kdbus: remove set_fs() calls 33/283433/1
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 26 Oct 2022 11:37:30 +0000 (13:37 +0200)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 26 Oct 2022 11:47:44 +0000 (13:47 +0200)
The iov_iter based calls seems to already handle the kernel memory as
source or destination, when iov_iter is created from iov_iter_kvec(),
so there is no need to use the set_fs()-based API to let the called
functions access userspace. Those set_fs() calls were there from the
beginning of the merged kdbus code. They might be an artifact left from
kdbus v2 (where they seems to be really needed) to v3 (which use the
iov_iter and kvec API) update:
https://lore.kernel.org/all/1421435777-25306-5-git-send-email-gregkh@linuxfoundation.org/
https://lore.kernel.org/all/1416546149-24799-5-git-send-email-gregkh@linuxfoundation.org/

Change-Id: I25fe3066f073677a00f719af13e9c2ced5b89a47
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
kernel/kdbus/pool.c

index b128963..5798153 100644 (file)
@@ -609,7 +609,6 @@ ssize_t kdbus_pool_slice_copy_kvec(const struct kdbus_pool_slice *slice,
                                   size_t kvec_len, size_t total_len)
 {
        struct iov_iter iter;
-       mm_segment_t old_fs;
        ssize_t len;
 
        if (WARN_ON(off + total_len > slice->size))
@@ -618,10 +617,7 @@ ssize_t kdbus_pool_slice_copy_kvec(const struct kdbus_pool_slice *slice,
        off += slice->off;
        iov_iter_kvec(&iter, WRITE, kvec, kvec_len, total_len);
 
-       old_fs = get_fs();
-       set_fs(KERNEL_DS);
        len = vfs_iter_write(slice->pool->f, &iter, &off, 0);
-       set_fs(old_fs);
 
        return (len >= 0 && len != total_len) ? -EFAULT : len;
 }
@@ -644,7 +640,6 @@ int kdbus_pool_slice_copy(const struct kdbus_pool_slice *slice_dst,
        unsigned long len = slice_src->size;
        loff_t off_src = slice_src->off;
        loff_t off_dst = slice_dst->off;
-       mm_segment_t old_fs;
        int ret = 0;
 
        if (WARN_ON(slice_src->size != slice_dst->size) ||
@@ -652,8 +647,6 @@ int kdbus_pool_slice_copy(const struct kdbus_pool_slice *slice_dst,
                return -EINVAL;
 
        inode_lock(i_dst);
-       old_fs = get_fs();
-       set_fs(KERNEL_DS);
        while (len > 0) {
                unsigned long page_off;
                unsigned long copy_len;
@@ -695,7 +688,6 @@ int kdbus_pool_slice_copy(const struct kdbus_pool_slice *slice_dst,
                off_dst += copy_len;
                len -= copy_len;
        }
-       set_fs(old_fs);
        inode_unlock(i_dst);
 
        return ret;