On 15/06/2021 12:30, Pavel Begunkov wrote: > On 6/15/21 11:47 AM, Colin Ian King wrote: >> On 15/06/2021 11:45, Colin King wrote: >>> From: Colin Ian King <colin.king@xxxxxxxxxxxxx> >>> >>> Static analysis is warning that the sizeof being used is should be >>> of *data->tags[i] and not data->tags[i]. Although these are the same >>> size on 64 bit systems it is not a portable assumption to assume >>> this is true for all cases. >>> >>> Addresses-Coverity: ("Sizeof not portable") >>> Fixes: d878c81610e1 ("io_uring: hide rsrc tag copy into generic helpers") >>> Signed-off-by: Colin Ian King <colin.king@xxxxxxxxxxxxx> >>> --- >>> fs/io_uring.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/fs/io_uring.c b/fs/io_uring.c >>> index d665c9419ad3..6b1a70449749 100644 >>> --- a/fs/io_uring.c >>> +++ b/fs/io_uring.c >>> @@ -7231,7 +7231,7 @@ static int io_rsrc_data_alloc(struct io_ring_ctx *ctx, rsrc_put_fn *do_put, >>> ret = -EFAULT; >>> for (i = 0; i < nr; i++) { >>> if (copy_from_user(io_get_tag_slot(data, i), &utags[i], >>> - sizeof(data->tags[i]))) >>> + sizeof(*data->tags[i]))) >>> goto fail; >>> } >>> } >>> > > Yep, thanks Colin. I think `sizeof(io_get_tag_slot(data, i))` > would be less confusing. Or > > u64 *tag_slot = io_get_tag_slot(data, i); > copy_from_user(tag_slot, ..., sizeof(*tag_slot)); > BTW, Coverity is complaining about: 7220 return -ENOMEM; Wrong sizeof argument (SIZEOF_MISMATCH) suspicious_sizeof: Passing argument nr * 8UL /* sizeof (data->tags[0][0]) */ to function io_alloc_page_table and then casting the return value to u64 ** is suspicious. 7221 data->tags = (u64 **)io_alloc_page_table(nr * sizeof(data->tags[0][0])); Not sure if that's a false positive or not. This kind of indirection makes my brain melt. Colin