From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from aserp2130.oracle.com ([141.146.126.79]:52310 "EHLO aserp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750950AbeCNTga (ORCPT ); Wed, 14 Mar 2018 15:36:30 -0400 Date: Wed, 14 Mar 2018 22:36:21 +0300 From: Dan Carpenter To: akpm@osdl.org Cc: linux-fsdevel@vger.kernel.org Subject: [bug report] [PATCH] sys_sync_file_range() Message-ID: <20180314193621.GA2249@mwanda> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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