inet: switch IP ID generator to siphash
[GitHub/moto-9609/android_kernel_motorola_exynos9610.git] / kernel / kcov.c
index 3f693a0f6f3edc9e563b681ad47bf168e73d0dca..f1e060b04ef626188361c924979803f7e937b627 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 #define pr_fmt(fmt) "kcov: " fmt
 
 #define DISABLE_BRANCH_PROFILING
@@ -107,7 +108,8 @@ static void kcov_put(struct kcov *kcov)
 
 void kcov_task_init(struct task_struct *t)
 {
-       t->kcov_mode = KCOV_MODE_DISABLED;
+       WRITE_ONCE(t->kcov_mode, KCOV_MODE_DISABLED);
+       barrier();
        t->kcov_size = 0;
        t->kcov_area = NULL;
        t->kcov = NULL;
@@ -224,9 +226,9 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
                if (unused != 0 || kcov->mode == KCOV_MODE_DISABLED ||
                    kcov->area == NULL)
                        return -EINVAL;
-               if (kcov->t != NULL)
-                       return -EBUSY;
                t = current;
+               if (kcov->t != NULL || t->kcov != NULL)
+                       return -EBUSY;
                /* Cache in task struct for performance. */
                t->kcov_size = kcov->size;
                t->kcov_area = kcov->area;