Merge tag 'mm-hotfixes-stable-2022-10-11' of git://git.kernel.org/pub/scm/linux/kerne...
[linux-block.git] / kernel / fail_function.c
index 60dc825ecc2b31ee3add395282fc79cf1e8c5f3d..a7ccd2930c5f46169f6f7eda93113f9ac8a1568b 100644 (file)
@@ -247,15 +247,11 @@ static ssize_t fei_write(struct file *file, const char __user *buffer,
        /* cut off if it is too long */
        if (count > KSYM_NAME_LEN)
                count = KSYM_NAME_LEN;
-       buf = kmalloc(count + 1, GFP_KERNEL);
-       if (!buf)
-               return -ENOMEM;
 
-       if (copy_from_user(buf, buffer, count)) {
-               ret = -EFAULT;
-               goto out_free;
-       }
-       buf[count] = '\0';
+       buf = memdup_user_nul(buffer, count);
+       if (IS_ERR(buf))
+               return PTR_ERR(buf);
+
        sym = strstrip(buf);
 
        mutex_lock(&fei_lock);
@@ -298,17 +294,15 @@ static ssize_t fei_write(struct file *file, const char __user *buffer,
        }
 
        ret = register_kprobe(&attr->kp);
-       if (!ret)
-               fei_debugfs_add_attr(attr);
-       if (ret < 0)
-               fei_attr_remove(attr);
-       else {
-               list_add_tail(&attr->list, &fei_attr_list);
-               ret = count;
+       if (ret) {
+               fei_attr_free(attr);
+               goto out;
        }
+       fei_debugfs_add_attr(attr);
+       list_add_tail(&attr->list, &fei_attr_list);
+       ret = count;
 out:
        mutex_unlock(&fei_lock);
-out_free:
        kfree(buf);
        return ret;
 }