|
@@ -496,9 +496,24 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
|
|
|
inc_syscw(current);
|
|
|
return ret;
|
|
|
}
|
|
|
-
|
|
|
EXPORT_SYMBOL(__kernel_write);
|
|
|
|
|
|
+ssize_t kernel_write(struct file *file, const char *buf, size_t count,
|
|
|
+ loff_t pos)
|
|
|
+{
|
|
|
+ mm_segment_t old_fs;
|
|
|
+ ssize_t res;
|
|
|
+
|
|
|
+ old_fs = get_fs();
|
|
|
+ set_fs(get_ds());
|
|
|
+ /* The cast to a user pointer is valid due to the set_fs() */
|
|
|
+ res = vfs_write(file, (__force const char __user *)buf, count, &pos);
|
|
|
+ set_fs(old_fs);
|
|
|
+
|
|
|
+ return res;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(kernel_write);
|
|
|
+
|
|
|
ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
|
|
|
{
|
|
|
ssize_t ret;
|