From fc2e08ac39f7ea438aaa3ca5fa4416eed2ace412 Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Wed, 26 Oct 2022 13:37:30 +0200 Subject: [PATCH] kdbus: remove set_fs() calls 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 --- kernel/kdbus/pool.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/kernel/kdbus/pool.c b/kernel/kdbus/pool.c index b128963..5798153 100644 --- a/kernel/kdbus/pool.c +++ b/kernel/kdbus/pool.c @@ -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; -- 2.34.1