kernel/*: switch to memdup_user_nul()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -1340,15 +1340,9 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
||||
if (cnt >= PAGE_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
buf = (char *)__get_free_page(GFP_TEMPORARY);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
if (copy_from_user(buf, ubuf, cnt)) {
|
||||
free_page((unsigned long) buf);
|
||||
return -EFAULT;
|
||||
}
|
||||
buf[cnt] = '\0';
|
||||
buf = memdup_user_nul(ubuf, cnt);
|
||||
if (IS_ERR(buf))
|
||||
return PTR_ERR(buf);
|
||||
|
||||
mutex_lock(&event_mutex);
|
||||
file = event_file_data(filp);
|
||||
@@ -1356,7 +1350,7 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
||||
err = apply_event_filter(file, buf);
|
||||
mutex_unlock(&event_mutex);
|
||||
|
||||
free_page((unsigned long) buf);
|
||||
kfree(buf);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@@ -1507,18 +1501,12 @@ subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
||||
if (cnt >= PAGE_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
buf = (char *)__get_free_page(GFP_TEMPORARY);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
if (copy_from_user(buf, ubuf, cnt)) {
|
||||
free_page((unsigned long) buf);
|
||||
return -EFAULT;
|
||||
}
|
||||
buf[cnt] = '\0';
|
||||
buf = memdup_user_nul(ubuf, cnt);
|
||||
if (IS_ERR(buf))
|
||||
return PTR_ERR(buf);
|
||||
|
||||
err = apply_subsystem_event_filter(dir, buf);
|
||||
free_page((unsigned long) buf);
|
||||
kfree(buf);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
||||
@@ -237,28 +237,23 @@ static ssize_t event_trigger_regex_write(struct file *file,
|
||||
if (cnt >= PAGE_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
buf = (char *)__get_free_page(GFP_TEMPORARY);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
buf = memdup_user_nul(ubuf, cnt);
|
||||
if (IS_ERR(buf))
|
||||
return PTR_ERR(buf);
|
||||
|
||||
if (copy_from_user(buf, ubuf, cnt)) {
|
||||
free_page((unsigned long)buf);
|
||||
return -EFAULT;
|
||||
}
|
||||
buf[cnt] = '\0';
|
||||
strim(buf);
|
||||
|
||||
mutex_lock(&event_mutex);
|
||||
event_file = event_file_data(file);
|
||||
if (unlikely(!event_file)) {
|
||||
mutex_unlock(&event_mutex);
|
||||
free_page((unsigned long)buf);
|
||||
kfree(buf);
|
||||
return -ENODEV;
|
||||
}
|
||||
ret = trigger_process_regex(event_file, buf);
|
||||
mutex_unlock(&event_mutex);
|
||||
|
||||
free_page((unsigned long)buf);
|
||||
kfree(buf);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user