[PATCH v2 4/7] btrfs: use IO_URING_F_COMPAT for uring encoded iovec import

Yang Xiuwei <[email protected]>
Newsgroups org.kernel.vger.io-uring,org.kernel.vger.linux-block,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-fsdevel
Message-ID <[email protected]>
The uring encoded paths select args32 from IO_URING_F_COMPAT, but then
call import_iovec() for the iovec array. import_iovec() keys off
in_compat_syscall(), which is false when first issued from SQPOLL or
io-wq, so a compat ring can misread the iovec list as native layout.

Pass the same IO_URING_F_COMPAT flag into __import_iovec() instead.

Fixes: 34310c442e17 ("btrfs: add io_uring command for encoded reads (ENCODED_READ ioctl)")
Fixes: e32dcdb0af9f ("btrfs: add io_uring interface for encoded writes")
Signed-off-by: Yang Xiuwei <[email protected]>
---
 fs/btrfs/ioctl.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 39bd9788e895..939c4a9d47b6 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -4759,9 +4759,10 @@ static int btrfs_uring_encoded_read(struct io_uring_cmd *cmd, unsigned int issue
 		}
 
 		data->iov = data->iovstack;
-		ret = import_iovec(ITER_DEST, data->args.iov, data->args.iovcnt,
-				   ARRAY_SIZE(data->iovstack), &data->iov,
-				   &data->iter);
+		ret = __import_iovec(ITER_DEST, data->args.iov, data->args.iovcnt,
+				     ARRAY_SIZE(data->iovstack), &data->iov,
+				     &data->iter,
+				     !!(issue_flags & IO_URING_F_COMPAT));
 		if (ret < 0)
 			goto out_acct;
 
@@ -4914,9 +4915,10 @@ static int btrfs_uring_encoded_write(struct io_uring_cmd *cmd, unsigned int issu
 			goto out_acct;
 
 		data->iov = data->iovstack;
-		ret = import_iovec(ITER_SOURCE, data->args.iov, data->args.iovcnt,
-				   ARRAY_SIZE(data->iovstack), &data->iov,
-				   &data->iter);
+		ret = __import_iovec(ITER_SOURCE, data->args.iov, data->args.iovcnt,
+				     ARRAY_SIZE(data->iovstack), &data->iov,
+				     &data->iter,
+				     !!(issue_flags & IO_URING_F_COMPAT));
 		if (ret < 0)
 			goto out_acct;
 
-- 
2.25.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.