sys_sync_file_range()
PATCH 1/1 sys_sync_file_range()
Hello Andrew Morton,
The patch f79e2abb9bd4: "[PATCH] sys_sync_file_range()" from Mar 31, 2006, leads to the following static checker warning:
fs/sync.c:298 ksys_sync_file_range() warn: signed overflow undefined. 'offset + nbytes < offset'
fs/sync.c
279 int ksys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
280 unsigned int flags)
281 {
282 int ret;
283 struct fd f;
284 struct address_space *mapping;
285 loff_t endbyte; /* inclusive */
286 umode_t i_mode;
287
288 ret = -EINVAL;
289 if (flags & ~VALID_FLAGS)
290 goto out;
291
292 endbyte = offset + nbytes;
293
294 if ((s64)offset < 0)
295 goto out;
296 if ((s64)endbyte < 0)
297 goto out;
298 if (endbyte < offset)
^^^^^^^^^^^^^^^^This is undefined but I think it works with the kernel build options?
299 goto out;
300
301 if (sizeof(pgoff_t) == 4) {
302 if (offset >= (0x100000000ULL << PAGE_SHIFT)) {
303 /*
304 * The range starts outside a 32 bit machine's
305 * pagecache addressing capabilities. Let it "succeed"
306 */
307 ret = 0;
308 goto out;
309 }
310 if (endbyte >= (0x100000000ULL << PAGE_SHIFT)) {
311 /*
312 * Out to EOF
313 */
314 nbytes = 0;
315 }
316 }regards,
dan carpenter
Quoted 30 lines · On Wed, 14 Mar 2018 22:36:21 +0300 Dan Carpenter <[email protected]>…
Hello Andrew Morton,
The patch
f79e2abb9bd4: "[PATCH]sys_sync_file_range()" from Mar 31, 2006, leads to the following static checker warning:fs/sync.c:298 ksys_sync_file_range() warn: signed overflow undefined. 'offset + nbytes < offset'
fs/sync.c
279 int ksys_sync_file_range(int fd,loff_toffset,loff_tnbytes,
280 unsigned int flags)281 { 282 int ret; 283 struct fd f; 284 struct address_space *mapping; 285 loff_t endbyte; /* inclusive */ 286 umode_t i_mode; 287 288 ret = -EINVAL; 289 if (flags & ~VALID_FLAGS) 290 goto out; 291 292 endbyte = offset + nbytes; 293 294 if ((s64)offset < 0) 295 goto out; 296 if ((s64)endbyte < 0) 297 goto out; 298 if (endbyte < offset) ^^^^^^^^^^^^^^^^
Quoted 2 lines
This is undefined but I think it works with the kernel build options?
Yup. -fno-strict-overflow. Please see Dmitry's explanation at
https://bugzilla.kernel.org/show_bug.cgi?id=199099.