On Mon, Oct 09, 2023 at 02:39:38PM +0100, Luis Henriques wrote: > Dan Carpenter <dan.carpenter@xxxxxxxxxx> writes: > > > In this code "ret" is type long and "src_objlen" is unsigned int. The > > problem is that on 32bit systems, when we do the comparison signed longs > > are type promoted to unsigned int. So negative error codes from > > do_splice_direct() are treated as success instead of failure. > > > > Fixes: 1b0c3b9f91f0 ("ceph: re-org copy_file_range and fix some error paths") > > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > > --- > > 32bit is so weird and ancient. It's strange to think that unsigned int > > has more positive bits than signed long. > > Yikes! Thanks for catching this, Dan. Really tricky. I guess you used > some static analysis tool (smatch?) to highlight this issue for you, > right? Yes. I've pushed this check but you need the cross function DB to know which functions return error codes so most people won't see the warning. regards, dan carpenter