Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

io_uring: add validate_fixed_range() for validate fixed buffer

Add helper of validate_fixed_range() for validating fixed buffer
range.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Link: https://lore.kernel.org/r/20250325135155.935398-2-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Ming Lei and committed by
Jens Axboe
8622b20f f8554f51

+22 -11
+22 -11
io_uring/rsrc.c
··· 1002 1002 } 1003 1003 EXPORT_SYMBOL_GPL(io_buffer_unregister_bvec); 1004 1004 1005 - static int io_import_fixed(int ddir, struct iov_iter *iter, 1006 - struct io_mapped_ubuf *imu, 1007 - u64 buf_addr, size_t len) 1005 + static int validate_fixed_range(u64 buf_addr, size_t len, 1006 + const struct io_mapped_ubuf *imu) 1008 1007 { 1009 1008 u64 buf_end; 1010 - size_t offset; 1011 1009 1012 - if (WARN_ON_ONCE(!imu)) 1013 - return -EFAULT; 1014 1010 if (unlikely(check_add_overflow(buf_addr, (u64)len, &buf_end))) 1015 1011 return -EFAULT; 1016 1012 /* not inside the mapped region */ ··· 1014 1018 return -EFAULT; 1015 1019 if (unlikely(len > MAX_RW_COUNT)) 1016 1020 return -EFAULT; 1021 + return 0; 1022 + } 1023 + 1024 + static int io_import_fixed(int ddir, struct iov_iter *iter, 1025 + struct io_mapped_ubuf *imu, 1026 + u64 buf_addr, size_t len) 1027 + { 1028 + size_t offset; 1029 + int ret; 1030 + 1031 + if (WARN_ON_ONCE(!imu)) 1032 + return -EFAULT; 1033 + ret = validate_fixed_range(buf_addr, len, imu); 1034 + if (unlikely(ret)) 1035 + return ret; 1017 1036 if (!(imu->dir & (1 << ddir))) 1018 1037 return -EFAULT; 1019 1038 ··· 1318 1307 u64 buf_addr = (u64)(uintptr_t)iovec[iov_idx].iov_base; 1319 1308 struct bio_vec *src_bvec; 1320 1309 size_t offset; 1321 - u64 buf_end; 1310 + int ret; 1322 1311 1323 - if (unlikely(check_add_overflow(buf_addr, (u64)iov_len, &buf_end))) 1324 - return -EFAULT; 1325 - if (unlikely(buf_addr < imu->ubuf || buf_end > (imu->ubuf + imu->len))) 1326 - return -EFAULT; 1312 + ret = validate_fixed_range(buf_addr, iov_len, imu); 1313 + if (unlikely(ret)) 1314 + return ret; 1315 + 1327 1316 if (unlikely(!iov_len)) 1328 1317 return -EFAULT; 1329 1318 if (unlikely(check_add_overflow(total_len, iov_len, &total_len)))