All of lore.kernel.org
 help / color / mirror / Atom feed
* mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
@ 2021-11-08 14:00 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-11-08 14:00 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 37136 bytes --]

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Jakub Jelinek <jakub@redhat.com>
CC: "Peter Zijlstra (Intel)" <peterz@infradead.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   6b75d88fa81b122cce37ebf17428a849ccd3d0f1
commit: 2f78788b55baa3410b1ec91a576286abe1ad4d6a ilog2: improve ilog2 for constant arguments
date:   11 months ago
:::::: branch date: 19 hours ago
:::::: commit date: 11 months ago
config: riscv-randconfig-c006-20211003 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 962e503cc8bc411f7523cc393acae8aae425b1c4)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f78788b55baa3410b1ec91a576286abe1ad4d6a
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 2f78788b55baa3410b1ec91a576286abe1ad4d6a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
           if (unlikely(!bh))
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/nilfs2/mdt.c:122:2: note: Taking false branch
           if (unlikely(!bh))
           ^
   fs/nilfs2/mdt.c:126:6: note: Assuming the condition is false
           if (buffer_uptodate(bh))
               ^~~~~~~~~~~~~~~~~~~
   fs/nilfs2/mdt.c:126:2: note: Taking false branch
           if (buffer_uptodate(bh))
           ^
   fs/nilfs2/mdt.c:129:2: note: Taking false branch
           if (mode_flags & REQ_RAHEAD) {
           ^
   fs/nilfs2/mdt.c:137:6: note: Assuming the condition is false
           if (buffer_uptodate(bh)) {
               ^~~~~~~~~~~~~~~~~~~
   fs/nilfs2/mdt.c:137:2: note: Taking false branch
           if (buffer_uptodate(bh)) {
           ^
   fs/nilfs2/mdt.c:143:6: note: Assuming 'ret' is not equal to 0
           if (unlikely(ret)) {
               ^
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   fs/nilfs2/mdt.c:143:2: note: Taking true branch
           if (unlikely(ret)) {
           ^
   fs/nilfs2/mdt.c:145:3: note: Control jumps to line 160
                   goto failed_bh;
                   ^
   fs/nilfs2/mdt.c:164:2: note: Returning without writing to '*out_bh'
           return ret;
           ^
   fs/nilfs2/mdt.c:175:8: note: Returning from 'nilfs_mdt_submit_block'
           err = nilfs_mdt_submit_block(inode, block, REQ_OP_READ, 0, &first_bh);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/nilfs2/mdt.c:176:6: note: Assuming the condition is true
           if (err == -EEXIST) /* internal code */
               ^~~~~~~~~~~~~~
   fs/nilfs2/mdt.c:176:2: note: Taking true branch
           if (err == -EEXIST) /* internal code */
           ^
   fs/nilfs2/mdt.c:177:3: note: Control jumps to line 208
                   goto out;
                   ^
   fs/nilfs2/mdt.c:208:10: note: Assigned value is garbage or undefined
           *out_bh = first_bh;
                   ^ ~~~~~~~~
   Suppressed 10 warnings (3 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (3 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (3 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (3 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   12 warnings generated.
   mm/workingset.c:206:2: warning: Value stored to 'nid' is never read [clang-analyzer-deadcode.DeadStores]
           nid = entry & ((1UL << NODES_SHIFT) - 1);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/workingset.c:206:2: note: Value stored to 'nid' is never read
           nid = entry & ((1UL << NODES_SHIFT) - 1);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 11 warnings (3 in non-user code, 8 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (3 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (3 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   13 warnings generated.
   Suppressed 13 warnings (3 in non-user code, 10 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   47 warnings generated.
   mm/nommu.c:423:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
           ret = percpu_counter_init(&vm_committed_as, 0, GFP_KERNEL);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:423:2: note: Value stored to 'ret' is never read
           ret = percpu_counter_init(&vm_committed_as, 0, GFP_KERNEL);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:881:6: warning: Value stored to 'prot' is never read [clang-analyzer-deadcode.DeadStores]
                                           prot |= PROT_EXEC;
                                           ^
   mm/nommu.c:881:6: note: Value stored to 'prot' is never read
   mm/nommu.c:899:4: warning: Value stored to 'prot' is never read [clang-analyzer-deadcode.DeadStores]
                           prot |= PROT_EXEC;
                           ^
   mm/nommu.c:899:4: note: Value stored to 'prot' is never read
>> mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
           total = 1 << order;
                     ^
   mm/nommu.c:1091:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   mm/nommu.c:1091:2: note: Taking false branch
           if (ret < 0)
           ^
   mm/nommu.c:1104:6: note: Assuming 'region' is non-null
           if (!region)
               ^~~~~~~
   mm/nommu.c:1104:2: note: Taking false branch
           if (!region)
           ^
   mm/nommu.c:1108:6: note: Assuming 'vma' is non-null
           if (!vma)
               ^~~~
   mm/nommu.c:1108:2: note: Taking false branch
           if (!vma)
           ^
   mm/nommu.c:1118:6: note: 'file' is null
           if (file) {
               ^~~~
   mm/nommu.c:1118:2: note: Taking false branch
           if (file) {
           ^
   mm/nommu.c:1133:6: note: Assuming the condition is false
           if (vm_flags & VM_MAYSHARE) {
               ^~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:1133:2: note: Taking false branch
           if (vm_flags & VM_MAYSHARE) {
           ^
   mm/nommu.c:1230:6: note: 'file' is null
           if (file && vma->vm_flags & VM_SHARED)
               ^~~~
   mm/nommu.c:1230:11: note: Left side of '&&' is false
           if (file && vma->vm_flags & VM_SHARED)
                    ^
   mm/nommu.c:1233:9: note: Calling 'do_mmap_private'
                   ret = do_mmap_private(vma, region, len, capabilities);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:988:2: note: Taking false branch
           if (capabilities & NOMMU_MAP_DIRECT) {
           ^
   mm/nommu.c:1009:10: note: Calling 'get_order'
           order = get_order(len);
                   ^~~~~~~~~~~~~~
   include/asm-generic/getorder.h:31:2: note: Taking false branch
           if (__builtin_constant_p(size)) {
           ^
   include/asm-generic/getorder.h:46:9: note: Calling 'fls64'
           return fls64(size);
                  ^~~~~~~~~~~
   include/asm-generic/bitops/fls64.h:29:6: note: Assuming 'x' is not equal to 0
           if (x == 0)
               ^~~~~~
   include/asm-generic/bitops/fls64.h:29:2: note: Taking false branch
           if (x == 0)
           ^
   include/asm-generic/bitops/fls64.h:31:2: note: Returning the value 32
           return __fls(x) + 1;
           ^~~~~~~~~~~~~~~~~~~
   include/asm-generic/getorder.h:46:9: note: Returning from 'fls64'
           return fls64(size);
                  ^~~~~~~~~~~
   include/asm-generic/getorder.h:46:2: note: Returning the value 32
           return fls64(size);
           ^~~~~~~~~~~~~~~~~~
   mm/nommu.c:1009:10: note: Returning from 'get_order'
           order = get_order(len);
                   ^~~~~~~~~~~~~~
   mm/nommu.c:1009:2: note: The value 32 is assigned to 'order'
           order = get_order(len);
           ^~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:1010:12: note: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int'
           total = 1 << order;
                     ^  ~~~~~
   mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '33', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
           total = 1 << order;
                     ^
   mm/nommu.c:1091:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   mm/nommu.c:1091:2: note: Taking false branch
           if (ret < 0)
           ^
   mm/nommu.c:1104:6: note: Assuming 'region' is non-null
           if (!region)
               ^~~~~~~
   mm/nommu.c:1104:2: note: Taking false branch
           if (!region)
           ^
   mm/nommu.c:1108:6: note: Assuming 'vma' is non-null
           if (!vma)
               ^~~~
   mm/nommu.c:1108:2: note: Taking false branch
           if (!vma)
           ^
   mm/nommu.c:1118:6: note: 'file' is null
           if (file) {

vim +1010 mm/nommu.c

^1da177e4c3f41 Linus Torvalds     2005-04-16   750  
^1da177e4c3f41 Linus Torvalds     2005-04-16   751  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   752   * determine whether a mapping should be permitted and, if so, what sort of
^1da177e4c3f41 Linus Torvalds     2005-04-16   753   * mapping we're capable of supporting
^1da177e4c3f41 Linus Torvalds     2005-04-16   754   */
^1da177e4c3f41 Linus Torvalds     2005-04-16   755  static int validate_mmap_request(struct file *file,
^1da177e4c3f41 Linus Torvalds     2005-04-16   756  				 unsigned long addr,
^1da177e4c3f41 Linus Torvalds     2005-04-16   757  				 unsigned long len,
^1da177e4c3f41 Linus Torvalds     2005-04-16   758  				 unsigned long prot,
^1da177e4c3f41 Linus Torvalds     2005-04-16   759  				 unsigned long flags,
^1da177e4c3f41 Linus Torvalds     2005-04-16   760  				 unsigned long pgoff,
^1da177e4c3f41 Linus Torvalds     2005-04-16   761  				 unsigned long *_capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   762  {
8feae13110d60c David Howells      2009-01-08   763  	unsigned long capabilities, rlen;
^1da177e4c3f41 Linus Torvalds     2005-04-16   764  	int ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   765  
^1da177e4c3f41 Linus Torvalds     2005-04-16   766  	/* do the simple checks first */
22cc877b32202b Leon Romanovsky    2015-06-24   767  	if (flags & MAP_FIXED)
^1da177e4c3f41 Linus Torvalds     2005-04-16   768  		return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   769  
^1da177e4c3f41 Linus Torvalds     2005-04-16   770  	if ((flags & MAP_TYPE) != MAP_PRIVATE &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   771  	    (flags & MAP_TYPE) != MAP_SHARED)
^1da177e4c3f41 Linus Torvalds     2005-04-16   772  		return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   773  
f81cff0d4067e4 Mike Frysinger     2006-12-06   774  	if (!len)
^1da177e4c3f41 Linus Torvalds     2005-04-16   775  		return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   776  
f81cff0d4067e4 Mike Frysinger     2006-12-06   777  	/* Careful about overflows.. */
8feae13110d60c David Howells      2009-01-08   778  	rlen = PAGE_ALIGN(len);
8feae13110d60c David Howells      2009-01-08   779  	if (!rlen || rlen > TASK_SIZE)
f81cff0d4067e4 Mike Frysinger     2006-12-06   780  		return -ENOMEM;
f81cff0d4067e4 Mike Frysinger     2006-12-06   781  
^1da177e4c3f41 Linus Torvalds     2005-04-16   782  	/* offset overflow? */
8feae13110d60c David Howells      2009-01-08   783  	if ((pgoff + (rlen >> PAGE_SHIFT)) < pgoff)
f81cff0d4067e4 Mike Frysinger     2006-12-06   784  		return -EOVERFLOW;
^1da177e4c3f41 Linus Torvalds     2005-04-16   785  
^1da177e4c3f41 Linus Torvalds     2005-04-16   786  	if (file) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   787  		/* files must support mmap */
72c2d531920048 Al Viro            2013-09-22   788  		if (!file->f_op->mmap)
^1da177e4c3f41 Linus Torvalds     2005-04-16   789  			return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   790  
^1da177e4c3f41 Linus Torvalds     2005-04-16   791  		/* work out if what we've got could possibly be shared
^1da177e4c3f41 Linus Torvalds     2005-04-16   792  		 * - we support chardevs that provide their own "memory"
^1da177e4c3f41 Linus Torvalds     2005-04-16   793  		 * - we support files/blockdevs that are memory backed
^1da177e4c3f41 Linus Torvalds     2005-04-16   794  		 */
b4caecd48005fb Christoph Hellwig  2015-01-14   795  		if (file->f_op->mmap_capabilities) {
b4caecd48005fb Christoph Hellwig  2015-01-14   796  			capabilities = file->f_op->mmap_capabilities(file);
b4caecd48005fb Christoph Hellwig  2015-01-14   797  		} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   798  			/* no explicit capabilities set, so assume some
^1da177e4c3f41 Linus Torvalds     2005-04-16   799  			 * defaults */
496ad9aa8ef448 Al Viro            2013-01-23   800  			switch (file_inode(file)->i_mode & S_IFMT) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   801  			case S_IFREG:
^1da177e4c3f41 Linus Torvalds     2005-04-16   802  			case S_IFBLK:
b4caecd48005fb Christoph Hellwig  2015-01-14   803  				capabilities = NOMMU_MAP_COPY;
^1da177e4c3f41 Linus Torvalds     2005-04-16   804  				break;
^1da177e4c3f41 Linus Torvalds     2005-04-16   805  
^1da177e4c3f41 Linus Torvalds     2005-04-16   806  			case S_IFCHR:
^1da177e4c3f41 Linus Torvalds     2005-04-16   807  				capabilities =
b4caecd48005fb Christoph Hellwig  2015-01-14   808  					NOMMU_MAP_DIRECT |
b4caecd48005fb Christoph Hellwig  2015-01-14   809  					NOMMU_MAP_READ |
b4caecd48005fb Christoph Hellwig  2015-01-14   810  					NOMMU_MAP_WRITE;
^1da177e4c3f41 Linus Torvalds     2005-04-16   811  				break;
^1da177e4c3f41 Linus Torvalds     2005-04-16   812  
^1da177e4c3f41 Linus Torvalds     2005-04-16   813  			default:
^1da177e4c3f41 Linus Torvalds     2005-04-16   814  				return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   815  			}
^1da177e4c3f41 Linus Torvalds     2005-04-16   816  		}
^1da177e4c3f41 Linus Torvalds     2005-04-16   817  
^1da177e4c3f41 Linus Torvalds     2005-04-16   818  		/* eliminate any capabilities that we can't support on this
^1da177e4c3f41 Linus Torvalds     2005-04-16   819  		 * device */
^1da177e4c3f41 Linus Torvalds     2005-04-16   820  		if (!file->f_op->get_unmapped_area)
b4caecd48005fb Christoph Hellwig  2015-01-14   821  			capabilities &= ~NOMMU_MAP_DIRECT;
6e242a1ceeb1bc Al Viro            2015-03-31   822  		if (!(file->f_mode & FMODE_CAN_READ))
b4caecd48005fb Christoph Hellwig  2015-01-14   823  			capabilities &= ~NOMMU_MAP_COPY;
^1da177e4c3f41 Linus Torvalds     2005-04-16   824  
28d7a6ae92c099 Graff Yang         2009-08-18   825  		/* The file shall have been opened with read permission. */
28d7a6ae92c099 Graff Yang         2009-08-18   826  		if (!(file->f_mode & FMODE_READ))
28d7a6ae92c099 Graff Yang         2009-08-18   827  			return -EACCES;
28d7a6ae92c099 Graff Yang         2009-08-18   828  
^1da177e4c3f41 Linus Torvalds     2005-04-16   829  		if (flags & MAP_SHARED) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   830  			/* do checks for writing, appending and locking */
^1da177e4c3f41 Linus Torvalds     2005-04-16   831  			if ((prot & PROT_WRITE) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   832  			    !(file->f_mode & FMODE_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16   833  				return -EACCES;
^1da177e4c3f41 Linus Torvalds     2005-04-16   834  
496ad9aa8ef448 Al Viro            2013-01-23   835  			if (IS_APPEND(file_inode(file)) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   836  			    (file->f_mode & FMODE_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16   837  				return -EACCES;
^1da177e4c3f41 Linus Torvalds     2005-04-16   838  
d7a06983a01a33 Jeff Layton        2014-03-10   839  			if (locks_verify_locked(file))
^1da177e4c3f41 Linus Torvalds     2005-04-16   840  				return -EAGAIN;
^1da177e4c3f41 Linus Torvalds     2005-04-16   841  
b4caecd48005fb Christoph Hellwig  2015-01-14   842  			if (!(capabilities & NOMMU_MAP_DIRECT))
^1da177e4c3f41 Linus Torvalds     2005-04-16   843  				return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   844  
^1da177e4c3f41 Linus Torvalds     2005-04-16   845  			/* we mustn't privatise shared mappings */
b4caecd48005fb Christoph Hellwig  2015-01-14   846  			capabilities &= ~NOMMU_MAP_COPY;
ac7149045d9fcc Choi Gi-yong       2014-04-07   847  		} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   848  			/* we're going to read the file into private memory we
^1da177e4c3f41 Linus Torvalds     2005-04-16   849  			 * allocate */
b4caecd48005fb Christoph Hellwig  2015-01-14   850  			if (!(capabilities & NOMMU_MAP_COPY))
^1da177e4c3f41 Linus Torvalds     2005-04-16   851  				return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   852  
^1da177e4c3f41 Linus Torvalds     2005-04-16   853  			/* we don't permit a private writable mapping to be
^1da177e4c3f41 Linus Torvalds     2005-04-16   854  			 * shared with the backing device */
^1da177e4c3f41 Linus Torvalds     2005-04-16   855  			if (prot & PROT_WRITE)
b4caecd48005fb Christoph Hellwig  2015-01-14   856  				capabilities &= ~NOMMU_MAP_DIRECT;
^1da177e4c3f41 Linus Torvalds     2005-04-16   857  		}
^1da177e4c3f41 Linus Torvalds     2005-04-16   858  
b4caecd48005fb Christoph Hellwig  2015-01-14   859  		if (capabilities & NOMMU_MAP_DIRECT) {
b4caecd48005fb Christoph Hellwig  2015-01-14   860  			if (((prot & PROT_READ)  && !(capabilities & NOMMU_MAP_READ))  ||
b4caecd48005fb Christoph Hellwig  2015-01-14   861  			    ((prot & PROT_WRITE) && !(capabilities & NOMMU_MAP_WRITE)) ||
b4caecd48005fb Christoph Hellwig  2015-01-14   862  			    ((prot & PROT_EXEC)  && !(capabilities & NOMMU_MAP_EXEC))
3c7b204547bc3d Bernd Schmidt      2010-05-25   863  			    ) {
b4caecd48005fb Christoph Hellwig  2015-01-14   864  				capabilities &= ~NOMMU_MAP_DIRECT;
3c7b204547bc3d Bernd Schmidt      2010-05-25   865  				if (flags & MAP_SHARED) {
22cc877b32202b Leon Romanovsky    2015-06-24   866  					pr_warn("MAP_SHARED not completely supported on !MMU\n");
3c7b204547bc3d Bernd Schmidt      2010-05-25   867  					return -EINVAL;
3c7b204547bc3d Bernd Schmidt      2010-05-25   868  				}
3c7b204547bc3d Bernd Schmidt      2010-05-25   869  			}
3c7b204547bc3d Bernd Schmidt      2010-05-25   870  		}
3c7b204547bc3d Bernd Schmidt      2010-05-25   871  
^1da177e4c3f41 Linus Torvalds     2005-04-16   872  		/* handle executable mappings and implied executable
^1da177e4c3f41 Linus Torvalds     2005-04-16   873  		 * mappings */
90f8572b0f021f Eric W. Biederman  2015-06-29   874  		if (path_noexec(&file->f_path)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   875  			if (prot & PROT_EXEC)
^1da177e4c3f41 Linus Torvalds     2005-04-16   876  				return -EPERM;
ac7149045d9fcc Choi Gi-yong       2014-04-07   877  		} else if ((prot & PROT_READ) && !(prot & PROT_EXEC)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   878  			/* handle implication of PROT_EXEC by PROT_READ */
^1da177e4c3f41 Linus Torvalds     2005-04-16   879  			if (current->personality & READ_IMPLIES_EXEC) {
b4caecd48005fb Christoph Hellwig  2015-01-14   880  				if (capabilities & NOMMU_MAP_EXEC)
^1da177e4c3f41 Linus Torvalds     2005-04-16  @881  					prot |= PROT_EXEC;
^1da177e4c3f41 Linus Torvalds     2005-04-16   882  			}
ac7149045d9fcc Choi Gi-yong       2014-04-07   883  		} else if ((prot & PROT_READ) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   884  			 (prot & PROT_EXEC) &&
b4caecd48005fb Christoph Hellwig  2015-01-14   885  			 !(capabilities & NOMMU_MAP_EXEC)
^1da177e4c3f41 Linus Torvalds     2005-04-16   886  			 ) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   887  			/* backing file is not executable, try to copy */
b4caecd48005fb Christoph Hellwig  2015-01-14   888  			capabilities &= ~NOMMU_MAP_DIRECT;
^1da177e4c3f41 Linus Torvalds     2005-04-16   889  		}
ac7149045d9fcc Choi Gi-yong       2014-04-07   890  	} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   891  		/* anonymous mappings are always memory backed and can be
^1da177e4c3f41 Linus Torvalds     2005-04-16   892  		 * privately mapped
^1da177e4c3f41 Linus Torvalds     2005-04-16   893  		 */
b4caecd48005fb Christoph Hellwig  2015-01-14   894  		capabilities = NOMMU_MAP_COPY;
^1da177e4c3f41 Linus Torvalds     2005-04-16   895  
^1da177e4c3f41 Linus Torvalds     2005-04-16   896  		/* handle PROT_EXEC implication by PROT_READ */
^1da177e4c3f41 Linus Torvalds     2005-04-16   897  		if ((prot & PROT_READ) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   898  		    (current->personality & READ_IMPLIES_EXEC))
^1da177e4c3f41 Linus Torvalds     2005-04-16   899  			prot |= PROT_EXEC;
^1da177e4c3f41 Linus Torvalds     2005-04-16   900  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16   901  
^1da177e4c3f41 Linus Torvalds     2005-04-16   902  	/* allow the security API to have its say */
e5467859f7f79b Al Viro            2012-05-30   903  	ret = security_mmap_addr(addr);
^1da177e4c3f41 Linus Torvalds     2005-04-16   904  	if (ret < 0)
^1da177e4c3f41 Linus Torvalds     2005-04-16   905  		return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   906  
^1da177e4c3f41 Linus Torvalds     2005-04-16   907  	/* looks okay */
^1da177e4c3f41 Linus Torvalds     2005-04-16   908  	*_capabilities = capabilities;
^1da177e4c3f41 Linus Torvalds     2005-04-16   909  	return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16   910  }
^1da177e4c3f41 Linus Torvalds     2005-04-16   911  
^1da177e4c3f41 Linus Torvalds     2005-04-16   912  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   913   * we've determined that we can make the mapping, now translate what we
^1da177e4c3f41 Linus Torvalds     2005-04-16   914   * now know into VMA flags
^1da177e4c3f41 Linus Torvalds     2005-04-16   915   */
^1da177e4c3f41 Linus Torvalds     2005-04-16   916  static unsigned long determine_vm_flags(struct file *file,
^1da177e4c3f41 Linus Torvalds     2005-04-16   917  					unsigned long prot,
^1da177e4c3f41 Linus Torvalds     2005-04-16   918  					unsigned long flags,
^1da177e4c3f41 Linus Torvalds     2005-04-16   919  					unsigned long capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   920  {
^1da177e4c3f41 Linus Torvalds     2005-04-16   921  	unsigned long vm_flags;
^1da177e4c3f41 Linus Torvalds     2005-04-16   922  
e6bfb70959a0ca Dave Hansen        2016-02-12   923  	vm_flags = calc_vm_prot_bits(prot, 0) | calc_vm_flag_bits(flags);
^1da177e4c3f41 Linus Torvalds     2005-04-16   924  	/* vm_flags |= mm->def_flags; */
^1da177e4c3f41 Linus Torvalds     2005-04-16   925  
b4caecd48005fb Christoph Hellwig  2015-01-14   926  	if (!(capabilities & NOMMU_MAP_DIRECT)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   927  		/* attempt to share read-only copies of mapped file chunks */
3c7b204547bc3d Bernd Schmidt      2010-05-25   928  		vm_flags |= VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
^1da177e4c3f41 Linus Torvalds     2005-04-16   929  		if (file && !(prot & PROT_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16   930  			vm_flags |= VM_MAYSHARE;
3c7b204547bc3d Bernd Schmidt      2010-05-25   931  	} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   932  		/* overlay a shareable mapping on the backing device or inode
^1da177e4c3f41 Linus Torvalds     2005-04-16   933  		 * if possible - used for chardevs, ramfs/tmpfs/shmfs and
^1da177e4c3f41 Linus Torvalds     2005-04-16   934  		 * romfs/cramfs */
b4caecd48005fb Christoph Hellwig  2015-01-14   935  		vm_flags |= VM_MAYSHARE | (capabilities & NOMMU_VMFLAGS);
^1da177e4c3f41 Linus Torvalds     2005-04-16   936  		if (flags & MAP_SHARED)
3c7b204547bc3d Bernd Schmidt      2010-05-25   937  			vm_flags |= VM_SHARED;
^1da177e4c3f41 Linus Torvalds     2005-04-16   938  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16   939  
^1da177e4c3f41 Linus Torvalds     2005-04-16   940  	/* refuse to let anyone share private mappings with this process if
^1da177e4c3f41 Linus Torvalds     2005-04-16   941  	 * it's being traced - otherwise breakpoints set in it may interfere
^1da177e4c3f41 Linus Torvalds     2005-04-16   942  	 * with another untraced process
^1da177e4c3f41 Linus Torvalds     2005-04-16   943  	 */
a288eecce5253c Tejun Heo          2011-06-17   944  	if ((flags & MAP_PRIVATE) && current->ptrace)
^1da177e4c3f41 Linus Torvalds     2005-04-16   945  		vm_flags &= ~VM_MAYSHARE;
^1da177e4c3f41 Linus Torvalds     2005-04-16   946  
^1da177e4c3f41 Linus Torvalds     2005-04-16   947  	return vm_flags;
^1da177e4c3f41 Linus Torvalds     2005-04-16   948  }
^1da177e4c3f41 Linus Torvalds     2005-04-16   949  
^1da177e4c3f41 Linus Torvalds     2005-04-16   950  /*
8feae13110d60c David Howells      2009-01-08   951   * set up a shared mapping on a file (the driver or filesystem provides and
8feae13110d60c David Howells      2009-01-08   952   * pins the storage)
^1da177e4c3f41 Linus Torvalds     2005-04-16   953   */
8feae13110d60c David Howells      2009-01-08   954  static int do_mmap_shared_file(struct vm_area_struct *vma)
^1da177e4c3f41 Linus Torvalds     2005-04-16   955  {
^1da177e4c3f41 Linus Torvalds     2005-04-16   956  	int ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   957  
f74ac01520c9f6 Miklos Szeredi     2017-02-20   958  	ret = call_mmap(vma->vm_file, vma);
dd8632a12e500a Paul Mundt         2009-01-08   959  	if (ret == 0) {
dd8632a12e500a Paul Mundt         2009-01-08   960  		vma->vm_region->vm_top = vma->vm_region->vm_end;
645d83c5db970a David Howells      2009-09-24   961  		return 0;
dd8632a12e500a Paul Mundt         2009-01-08   962  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16   963  	if (ret != -ENOSYS)
^1da177e4c3f41 Linus Torvalds     2005-04-16   964  		return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   965  
3fa30460ea5021 David Howells      2010-03-23   966  	/* getting -ENOSYS indicates that direct mmap isn't possible (as
3fa30460ea5021 David Howells      2010-03-23   967  	 * opposed to tried but failed) so we can only give a suitable error as
3fa30460ea5021 David Howells      2010-03-23   968  	 * it's not possible to make a private copy if MAP_SHARED was given */
^1da177e4c3f41 Linus Torvalds     2005-04-16   969  	return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   970  }
^1da177e4c3f41 Linus Torvalds     2005-04-16   971  
^1da177e4c3f41 Linus Torvalds     2005-04-16   972  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   973   * set up a private mapping or an anonymous shared mapping
^1da177e4c3f41 Linus Torvalds     2005-04-16   974   */
8feae13110d60c David Howells      2009-01-08   975  static int do_mmap_private(struct vm_area_struct *vma,
8feae13110d60c David Howells      2009-01-08   976  			   struct vm_region *region,
645d83c5db970a David Howells      2009-09-24   977  			   unsigned long len,
645d83c5db970a David Howells      2009-09-24   978  			   unsigned long capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   979  {
dbc8358c72373d Joonsoo Kim        2014-12-12   980  	unsigned long total, point;
^1da177e4c3f41 Linus Torvalds     2005-04-16   981  	void *base;
8feae13110d60c David Howells      2009-01-08   982  	int ret, order;
^1da177e4c3f41 Linus Torvalds     2005-04-16   983  
^1da177e4c3f41 Linus Torvalds     2005-04-16   984  	/* invoke the file's mapping function so that it can keep track of
^1da177e4c3f41 Linus Torvalds     2005-04-16   985  	 * shared mappings on devices or memory
^1da177e4c3f41 Linus Torvalds     2005-04-16   986  	 * - VM_MAYSHARE will be set if it may attempt to share
^1da177e4c3f41 Linus Torvalds     2005-04-16   987  	 */
b4caecd48005fb Christoph Hellwig  2015-01-14   988  	if (capabilities & NOMMU_MAP_DIRECT) {
f74ac01520c9f6 Miklos Szeredi     2017-02-20   989  		ret = call_mmap(vma->vm_file, vma);
dd8632a12e500a Paul Mundt         2009-01-08   990  		if (ret == 0) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   991  			/* shouldn't return success if we're not sharing */
dd8632a12e500a Paul Mundt         2009-01-08   992  			BUG_ON(!(vma->vm_flags & VM_MAYSHARE));
dd8632a12e500a Paul Mundt         2009-01-08   993  			vma->vm_region->vm_top = vma->vm_region->vm_end;
645d83c5db970a David Howells      2009-09-24   994  			return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16   995  		}
dd8632a12e500a Paul Mundt         2009-01-08   996  		if (ret != -ENOSYS)
dd8632a12e500a Paul Mundt         2009-01-08   997  			return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   998  
^1da177e4c3f41 Linus Torvalds     2005-04-16   999  		/* getting an ENOSYS error indicates that direct mmap isn't
^1da177e4c3f41 Linus Torvalds     2005-04-16  1000  		 * possible (as opposed to tried but failed) so we'll try to
^1da177e4c3f41 Linus Torvalds     2005-04-16  1001  		 * make a private copy of the data and map that instead */
^1da177e4c3f41 Linus Torvalds     2005-04-16  1002  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  1003  
8feae13110d60c David Howells      2009-01-08  1004  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1005  	/* allocate some memory to hold the mapping
^1da177e4c3f41 Linus Torvalds     2005-04-16  1006  	 * - note that this may not return a page-aligned address if the object
^1da177e4c3f41 Linus Torvalds     2005-04-16  1007  	 *   we're allocating is smaller than a page
^1da177e4c3f41 Linus Torvalds     2005-04-16  1008  	 */
f67d9b1576c1c6 Bob Liu            2011-05-24  1009  	order = get_order(len);
8feae13110d60c David Howells      2009-01-08 @1010  	total = 1 << order;
f67d9b1576c1c6 Bob Liu            2011-05-24  1011  	point = len >> PAGE_SHIFT;
dd8632a12e500a Paul Mundt         2009-01-08  1012  
dbc8358c72373d Joonsoo Kim        2014-12-12  1013  	/* we don't want to allocate a power-of-2 sized page set */
22cc877b32202b Leon Romanovsky    2015-06-24  1014  	if (sysctl_nr_trim_pages && total - point >= sysctl_nr_trim_pages)
dbc8358c72373d Joonsoo Kim        2014-12-12  1015  		total = point;
8feae13110d60c David Howells      2009-01-08  1016  
da616534ed7f6e Joonsoo Kim        2015-02-27  1017  	base = alloc_pages_exact(total << PAGE_SHIFT, GFP_KERNEL);
dbc8358c72373d Joonsoo Kim        2014-12-12  1018  	if (!base)
dbc8358c72373d Joonsoo Kim        2014-12-12  1019  		goto enomem;
dbc8358c72373d Joonsoo Kim        2014-12-12  1020  
dbc8358c72373d Joonsoo Kim        2014-12-12  1021  	atomic_long_add(total, &mmap_pages_allocated);
8feae13110d60c David Howells      2009-01-08  1022  
8feae13110d60c David Howells      2009-01-08  1023  	region->vm_flags = vma->vm_flags |= VM_MAPPED_COPY;
8feae13110d60c David Howells      2009-01-08  1024  	region->vm_start = (unsigned long) base;
f67d9b1576c1c6 Bob Liu            2011-05-24  1025  	region->vm_end   = region->vm_start + len;
dd8632a12e500a Paul Mundt         2009-01-08  1026  	region->vm_top   = region->vm_start + (total << PAGE_SHIFT);
8feae13110d60c David Howells      2009-01-08  1027  
8feae13110d60c David Howells      2009-01-08  1028  	vma->vm_start = region->vm_start;
8feae13110d60c David Howells      2009-01-08  1029  	vma->vm_end   = region->vm_start + len;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1030  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1031  	if (vma->vm_file) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  1032  		/* read the contents of a file into the copy */
^1da177e4c3f41 Linus Torvalds     2005-04-16  1033  		loff_t fpos;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1034  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1035  		fpos = vma->vm_pgoff;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1036  		fpos <<= PAGE_SHIFT;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1037  
b4bf802a5a6563 Christoph Hellwig  2017-09-01  1038  		ret = kernel_read(vma->vm_file, base, len, &fpos);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1039  		if (ret < 0)
^1da177e4c3f41 Linus Torvalds     2005-04-16  1040  			goto error_free;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1041  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1042  		/* clear the last little bit */
f67d9b1576c1c6 Bob Liu            2011-05-24  1043  		if (ret < len)
f67d9b1576c1c6 Bob Liu            2011-05-24  1044  			memset(base + ret, 0, len - ret);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1045  
bfd40eaff5abb9 Kirill A. Shutemov 2018-07-26  1046  	} else {
bfd40eaff5abb9 Kirill A. Shutemov 2018-07-26  1047  		vma_set_anonymous(vma);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1048  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  1049  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1050  	return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1051  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1052  error_free:
7223bb4a829628 Namhyung Kim       2011-05-24  1053  	free_page_series(region->vm_start, region->vm_top);
8feae13110d60c David Howells      2009-01-08  1054  	region->vm_start = vma->vm_start = 0;
8feae13110d60c David Howells      2009-01-08  1055  	region->vm_end   = vma->vm_end = 0;
dd8632a12e500a Paul Mundt         2009-01-08  1056  	region->vm_top   = 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1057  	return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1058  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1059  enomem:
b1de0d139c97a6 Mitchel Humpherys  2014-06-06  1060  	pr_err("Allocation of length %lu from process %d (%s) failed\n",
05ae6fa31874ed Greg Ungerer       2009-01-13  1061  	       len, current->pid, current->comm);
9af744d743170b Michal Hocko       2017-02-22  1062  	show_free_areas(0, NULL);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1063  	return -ENOMEM;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1064  }
^1da177e4c3f41 Linus Torvalds     2005-04-16  1065  

:::::: The code at line 1010 was first introduced by commit
:::::: 8feae13110d60cc6287afabc2887366b0eb226c2 NOMMU: Make VMAs per MM as for MMU-mode linux

:::::: TO: David Howells <dhowells@redhat.com>
:::::: CC: David Howells <dhowells@redhat.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37659 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
@ 2021-11-13 13:49 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-11-13 13:49 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 37040 bytes --]

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Jakub Jelinek <jakub@redhat.com>
CC: "Peter Zijlstra (Intel)" <peterz@infradead.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   66f4beaa6c1d28161f534471484b2daa2de1dce0
commit: 2f78788b55baa3410b1ec91a576286abe1ad4d6a ilog2: improve ilog2 for constant arguments
date:   11 months ago
:::::: branch date: 17 hours ago
:::::: commit date: 11 months ago
config: riscv-randconfig-c006-20211003 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 962e503cc8bc411f7523cc393acae8aae425b1c4)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f78788b55baa3410b1ec91a576286abe1ad4d6a
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 2f78788b55baa3410b1ec91a576286abe1ad4d6a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
   #define ASSERTCMP(X, OP, Y)                                             \
                                                                           ^
   fs/fscache/operation.c:597:7: note: Assuming field 'n_ops' is not equal to 0
                   if (object->n_ops == 0)
                       ^~~~~~~~~~~~~~~~~~
   fs/fscache/operation.c:597:3: note: Taking false branch
                   if (object->n_ops == 0)
                   ^
   fs/fscache/operation.c:601:3: note: Memory is released
                   kfree(op);
                   ^~~~~~~~~
   fs/fscache/operation.c:571:2: note: Loop condition is true. Execution continues on line 572
           do {
           ^
   fs/fscache/operation.c:573:7: note: Assuming the condition is false
                   if (list_empty(&cache->op_gc_list)) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/fscache/operation.c:573:3: note: Taking false branch
                   if (list_empty(&cache->op_gc_list)) {
                   ^
   fs/fscache/operation.c:578:8: note: Left side of '&&' is false
                   op = list_entry(cache->op_gc_list.next,
                        ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:694:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   fs/fscache/operation.c:578:8: note: Taking false branch
                   op = list_entry(cache->op_gc_list.next,
                        ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:694:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:315:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:303:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:295:3: note: expanded from macro '__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   fs/fscache/operation.c:578:8: note: Loop condition is false.  Exiting loop
                   op = list_entry(cache->op_gc_list.next,
                        ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:694:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:315:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:303:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:293:2: note: expanded from macro '__compiletime_assert'
           do {                                                            \
           ^
   fs/fscache/operation.c:580:3: note: Calling 'list_del'
                   list_del(&op->pend_link);
                   ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:146:2: note: Calling '__list_del_entry'
           __list_del_entry(entry);
           ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:132:2: note: Taking false branch
           if (!__list_del_entry_valid(entry))
           ^
   include/linux/list.h:135:13: note: Use of memory after it is freed
           __list_del(entry->prev, entry->next);
                      ^~~~~~~~~~~
   Suppressed 10 warnings (2 in non-user code, 8 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   47 warnings generated.
   mm/nommu.c:423:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
           ret = percpu_counter_init(&vm_committed_as, 0, GFP_KERNEL);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:423:2: note: Value stored to 'ret' is never read
           ret = percpu_counter_init(&vm_committed_as, 0, GFP_KERNEL);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:881:6: warning: Value stored to 'prot' is never read [clang-analyzer-deadcode.DeadStores]
                                           prot |= PROT_EXEC;
                                           ^
   mm/nommu.c:881:6: note: Value stored to 'prot' is never read
   mm/nommu.c:899:4: warning: Value stored to 'prot' is never read [clang-analyzer-deadcode.DeadStores]
                           prot |= PROT_EXEC;
                           ^
   mm/nommu.c:899:4: note: Value stored to 'prot' is never read
>> mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
           total = 1 << order;
                     ^
   mm/nommu.c:1091:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   mm/nommu.c:1091:2: note: Taking false branch
           if (ret < 0)
           ^
   mm/nommu.c:1104:6: note: Assuming 'region' is non-null
           if (!region)
               ^~~~~~~
   mm/nommu.c:1104:2: note: Taking false branch
           if (!region)
           ^
   mm/nommu.c:1108:6: note: Assuming 'vma' is non-null
           if (!vma)
               ^~~~
   mm/nommu.c:1108:2: note: Taking false branch
           if (!vma)
           ^
   mm/nommu.c:1118:6: note: 'file' is null
           if (file) {
               ^~~~
   mm/nommu.c:1118:2: note: Taking false branch
           if (file) {
           ^
   mm/nommu.c:1133:6: note: Assuming the condition is false
           if (vm_flags & VM_MAYSHARE) {
               ^~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:1133:2: note: Taking false branch
           if (vm_flags & VM_MAYSHARE) {
           ^
   mm/nommu.c:1230:6: note: 'file' is null
           if (file && vma->vm_flags & VM_SHARED)
               ^~~~
   mm/nommu.c:1230:11: note: Left side of '&&' is false
           if (file && vma->vm_flags & VM_SHARED)
                    ^
   mm/nommu.c:1233:9: note: Calling 'do_mmap_private'
                   ret = do_mmap_private(vma, region, len, capabilities);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:988:2: note: Taking false branch
           if (capabilities & NOMMU_MAP_DIRECT) {
           ^
   mm/nommu.c:1009:10: note: Calling 'get_order'
           order = get_order(len);
                   ^~~~~~~~~~~~~~
   include/asm-generic/getorder.h:31:2: note: Taking false branch
           if (__builtin_constant_p(size)) {
           ^
   include/asm-generic/getorder.h:46:9: note: Calling 'fls64'
           return fls64(size);
                  ^~~~~~~~~~~
   include/asm-generic/bitops/fls64.h:29:6: note: Assuming 'x' is not equal to 0
           if (x == 0)
               ^~~~~~
   include/asm-generic/bitops/fls64.h:29:2: note: Taking false branch
           if (x == 0)
           ^
   include/asm-generic/bitops/fls64.h:31:2: note: Returning the value 32
           return __fls(x) + 1;
           ^~~~~~~~~~~~~~~~~~~
   include/asm-generic/getorder.h:46:9: note: Returning from 'fls64'
           return fls64(size);
                  ^~~~~~~~~~~
   include/asm-generic/getorder.h:46:2: note: Returning the value 32
           return fls64(size);
           ^~~~~~~~~~~~~~~~~~
   mm/nommu.c:1009:10: note: Returning from 'get_order'
           order = get_order(len);
                   ^~~~~~~~~~~~~~
   mm/nommu.c:1009:2: note: The value 32 is assigned to 'order'
           order = get_order(len);
           ^~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:1010:12: note: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int'
           total = 1 << order;
                     ^  ~~~~~
   mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '33', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
           total = 1 << order;
                     ^
   mm/nommu.c:1091:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   mm/nommu.c:1091:2: note: Taking false branch
           if (ret < 0)
           ^
   mm/nommu.c:1104:6: note: Assuming 'region' is non-null
           if (!region)
               ^~~~~~~
   mm/nommu.c:1104:2: note: Taking false branch
           if (!region)
           ^
   mm/nommu.c:1108:6: note: Assuming 'vma' is non-null
           if (!vma)
               ^~~~
   mm/nommu.c:1108:2: note: Taking false branch
           if (!vma)
           ^
   mm/nommu.c:1118:6: note: 'file' is null
           if (file) {

vim +1010 mm/nommu.c

^1da177e4c3f41 Linus Torvalds     2005-04-16   750  
^1da177e4c3f41 Linus Torvalds     2005-04-16   751  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   752   * determine whether a mapping should be permitted and, if so, what sort of
^1da177e4c3f41 Linus Torvalds     2005-04-16   753   * mapping we're capable of supporting
^1da177e4c3f41 Linus Torvalds     2005-04-16   754   */
^1da177e4c3f41 Linus Torvalds     2005-04-16   755  static int validate_mmap_request(struct file *file,
^1da177e4c3f41 Linus Torvalds     2005-04-16   756  				 unsigned long addr,
^1da177e4c3f41 Linus Torvalds     2005-04-16   757  				 unsigned long len,
^1da177e4c3f41 Linus Torvalds     2005-04-16   758  				 unsigned long prot,
^1da177e4c3f41 Linus Torvalds     2005-04-16   759  				 unsigned long flags,
^1da177e4c3f41 Linus Torvalds     2005-04-16   760  				 unsigned long pgoff,
^1da177e4c3f41 Linus Torvalds     2005-04-16   761  				 unsigned long *_capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   762  {
8feae13110d60c David Howells      2009-01-08   763  	unsigned long capabilities, rlen;
^1da177e4c3f41 Linus Torvalds     2005-04-16   764  	int ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   765  
^1da177e4c3f41 Linus Torvalds     2005-04-16   766  	/* do the simple checks first */
22cc877b32202b Leon Romanovsky    2015-06-24   767  	if (flags & MAP_FIXED)
^1da177e4c3f41 Linus Torvalds     2005-04-16   768  		return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   769  
^1da177e4c3f41 Linus Torvalds     2005-04-16   770  	if ((flags & MAP_TYPE) != MAP_PRIVATE &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   771  	    (flags & MAP_TYPE) != MAP_SHARED)
^1da177e4c3f41 Linus Torvalds     2005-04-16   772  		return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   773  
f81cff0d4067e4 Mike Frysinger     2006-12-06   774  	if (!len)
^1da177e4c3f41 Linus Torvalds     2005-04-16   775  		return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   776  
f81cff0d4067e4 Mike Frysinger     2006-12-06   777  	/* Careful about overflows.. */
8feae13110d60c David Howells      2009-01-08   778  	rlen = PAGE_ALIGN(len);
8feae13110d60c David Howells      2009-01-08   779  	if (!rlen || rlen > TASK_SIZE)
f81cff0d4067e4 Mike Frysinger     2006-12-06   780  		return -ENOMEM;
f81cff0d4067e4 Mike Frysinger     2006-12-06   781  
^1da177e4c3f41 Linus Torvalds     2005-04-16   782  	/* offset overflow? */
8feae13110d60c David Howells      2009-01-08   783  	if ((pgoff + (rlen >> PAGE_SHIFT)) < pgoff)
f81cff0d4067e4 Mike Frysinger     2006-12-06   784  		return -EOVERFLOW;
^1da177e4c3f41 Linus Torvalds     2005-04-16   785  
^1da177e4c3f41 Linus Torvalds     2005-04-16   786  	if (file) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   787  		/* files must support mmap */
72c2d531920048 Al Viro            2013-09-22   788  		if (!file->f_op->mmap)
^1da177e4c3f41 Linus Torvalds     2005-04-16   789  			return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   790  
^1da177e4c3f41 Linus Torvalds     2005-04-16   791  		/* work out if what we've got could possibly be shared
^1da177e4c3f41 Linus Torvalds     2005-04-16   792  		 * - we support chardevs that provide their own "memory"
^1da177e4c3f41 Linus Torvalds     2005-04-16   793  		 * - we support files/blockdevs that are memory backed
^1da177e4c3f41 Linus Torvalds     2005-04-16   794  		 */
b4caecd48005fb Christoph Hellwig  2015-01-14   795  		if (file->f_op->mmap_capabilities) {
b4caecd48005fb Christoph Hellwig  2015-01-14   796  			capabilities = file->f_op->mmap_capabilities(file);
b4caecd48005fb Christoph Hellwig  2015-01-14   797  		} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   798  			/* no explicit capabilities set, so assume some
^1da177e4c3f41 Linus Torvalds     2005-04-16   799  			 * defaults */
496ad9aa8ef448 Al Viro            2013-01-23   800  			switch (file_inode(file)->i_mode & S_IFMT) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   801  			case S_IFREG:
^1da177e4c3f41 Linus Torvalds     2005-04-16   802  			case S_IFBLK:
b4caecd48005fb Christoph Hellwig  2015-01-14   803  				capabilities = NOMMU_MAP_COPY;
^1da177e4c3f41 Linus Torvalds     2005-04-16   804  				break;
^1da177e4c3f41 Linus Torvalds     2005-04-16   805  
^1da177e4c3f41 Linus Torvalds     2005-04-16   806  			case S_IFCHR:
^1da177e4c3f41 Linus Torvalds     2005-04-16   807  				capabilities =
b4caecd48005fb Christoph Hellwig  2015-01-14   808  					NOMMU_MAP_DIRECT |
b4caecd48005fb Christoph Hellwig  2015-01-14   809  					NOMMU_MAP_READ |
b4caecd48005fb Christoph Hellwig  2015-01-14   810  					NOMMU_MAP_WRITE;
^1da177e4c3f41 Linus Torvalds     2005-04-16   811  				break;
^1da177e4c3f41 Linus Torvalds     2005-04-16   812  
^1da177e4c3f41 Linus Torvalds     2005-04-16   813  			default:
^1da177e4c3f41 Linus Torvalds     2005-04-16   814  				return -EINVAL;
^1da177e4c3f41 Linus Torvalds     2005-04-16   815  			}
^1da177e4c3f41 Linus Torvalds     2005-04-16   816  		}
^1da177e4c3f41 Linus Torvalds     2005-04-16   817  
^1da177e4c3f41 Linus Torvalds     2005-04-16   818  		/* eliminate any capabilities that we can't support on this
^1da177e4c3f41 Linus Torvalds     2005-04-16   819  		 * device */
^1da177e4c3f41 Linus Torvalds     2005-04-16   820  		if (!file->f_op->get_unmapped_area)
b4caecd48005fb Christoph Hellwig  2015-01-14   821  			capabilities &= ~NOMMU_MAP_DIRECT;
6e242a1ceeb1bc Al Viro            2015-03-31   822  		if (!(file->f_mode & FMODE_CAN_READ))
b4caecd48005fb Christoph Hellwig  2015-01-14   823  			capabilities &= ~NOMMU_MAP_COPY;
^1da177e4c3f41 Linus Torvalds     2005-04-16   824  
28d7a6ae92c099 Graff Yang         2009-08-18   825  		/* The file shall have been opened with read permission. */
28d7a6ae92c099 Graff Yang         2009-08-18   826  		if (!(file->f_mode & FMODE_READ))
28d7a6ae92c099 Graff Yang         2009-08-18   827  			return -EACCES;
28d7a6ae92c099 Graff Yang         2009-08-18   828  
^1da177e4c3f41 Linus Torvalds     2005-04-16   829  		if (flags & MAP_SHARED) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   830  			/* do checks for writing, appending and locking */
^1da177e4c3f41 Linus Torvalds     2005-04-16   831  			if ((prot & PROT_WRITE) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   832  			    !(file->f_mode & FMODE_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16   833  				return -EACCES;
^1da177e4c3f41 Linus Torvalds     2005-04-16   834  
496ad9aa8ef448 Al Viro            2013-01-23   835  			if (IS_APPEND(file_inode(file)) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   836  			    (file->f_mode & FMODE_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16   837  				return -EACCES;
^1da177e4c3f41 Linus Torvalds     2005-04-16   838  
d7a06983a01a33 Jeff Layton        2014-03-10   839  			if (locks_verify_locked(file))
^1da177e4c3f41 Linus Torvalds     2005-04-16   840  				return -EAGAIN;
^1da177e4c3f41 Linus Torvalds     2005-04-16   841  
b4caecd48005fb Christoph Hellwig  2015-01-14   842  			if (!(capabilities & NOMMU_MAP_DIRECT))
^1da177e4c3f41 Linus Torvalds     2005-04-16   843  				return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   844  
^1da177e4c3f41 Linus Torvalds     2005-04-16   845  			/* we mustn't privatise shared mappings */
b4caecd48005fb Christoph Hellwig  2015-01-14   846  			capabilities &= ~NOMMU_MAP_COPY;
ac7149045d9fcc Choi Gi-yong       2014-04-07   847  		} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   848  			/* we're going to read the file into private memory we
^1da177e4c3f41 Linus Torvalds     2005-04-16   849  			 * allocate */
b4caecd48005fb Christoph Hellwig  2015-01-14   850  			if (!(capabilities & NOMMU_MAP_COPY))
^1da177e4c3f41 Linus Torvalds     2005-04-16   851  				return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   852  
^1da177e4c3f41 Linus Torvalds     2005-04-16   853  			/* we don't permit a private writable mapping to be
^1da177e4c3f41 Linus Torvalds     2005-04-16   854  			 * shared with the backing device */
^1da177e4c3f41 Linus Torvalds     2005-04-16   855  			if (prot & PROT_WRITE)
b4caecd48005fb Christoph Hellwig  2015-01-14   856  				capabilities &= ~NOMMU_MAP_DIRECT;
^1da177e4c3f41 Linus Torvalds     2005-04-16   857  		}
^1da177e4c3f41 Linus Torvalds     2005-04-16   858  
b4caecd48005fb Christoph Hellwig  2015-01-14   859  		if (capabilities & NOMMU_MAP_DIRECT) {
b4caecd48005fb Christoph Hellwig  2015-01-14   860  			if (((prot & PROT_READ)  && !(capabilities & NOMMU_MAP_READ))  ||
b4caecd48005fb Christoph Hellwig  2015-01-14   861  			    ((prot & PROT_WRITE) && !(capabilities & NOMMU_MAP_WRITE)) ||
b4caecd48005fb Christoph Hellwig  2015-01-14   862  			    ((prot & PROT_EXEC)  && !(capabilities & NOMMU_MAP_EXEC))
3c7b204547bc3d Bernd Schmidt      2010-05-25   863  			    ) {
b4caecd48005fb Christoph Hellwig  2015-01-14   864  				capabilities &= ~NOMMU_MAP_DIRECT;
3c7b204547bc3d Bernd Schmidt      2010-05-25   865  				if (flags & MAP_SHARED) {
22cc877b32202b Leon Romanovsky    2015-06-24   866  					pr_warn("MAP_SHARED not completely supported on !MMU\n");
3c7b204547bc3d Bernd Schmidt      2010-05-25   867  					return -EINVAL;
3c7b204547bc3d Bernd Schmidt      2010-05-25   868  				}
3c7b204547bc3d Bernd Schmidt      2010-05-25   869  			}
3c7b204547bc3d Bernd Schmidt      2010-05-25   870  		}
3c7b204547bc3d Bernd Schmidt      2010-05-25   871  
^1da177e4c3f41 Linus Torvalds     2005-04-16   872  		/* handle executable mappings and implied executable
^1da177e4c3f41 Linus Torvalds     2005-04-16   873  		 * mappings */
90f8572b0f021f Eric W. Biederman  2015-06-29   874  		if (path_noexec(&file->f_path)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   875  			if (prot & PROT_EXEC)
^1da177e4c3f41 Linus Torvalds     2005-04-16   876  				return -EPERM;
ac7149045d9fcc Choi Gi-yong       2014-04-07   877  		} else if ((prot & PROT_READ) && !(prot & PROT_EXEC)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   878  			/* handle implication of PROT_EXEC by PROT_READ */
^1da177e4c3f41 Linus Torvalds     2005-04-16   879  			if (current->personality & READ_IMPLIES_EXEC) {
b4caecd48005fb Christoph Hellwig  2015-01-14   880  				if (capabilities & NOMMU_MAP_EXEC)
^1da177e4c3f41 Linus Torvalds     2005-04-16  @881  					prot |= PROT_EXEC;
^1da177e4c3f41 Linus Torvalds     2005-04-16   882  			}
ac7149045d9fcc Choi Gi-yong       2014-04-07   883  		} else if ((prot & PROT_READ) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   884  			 (prot & PROT_EXEC) &&
b4caecd48005fb Christoph Hellwig  2015-01-14   885  			 !(capabilities & NOMMU_MAP_EXEC)
^1da177e4c3f41 Linus Torvalds     2005-04-16   886  			 ) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   887  			/* backing file is not executable, try to copy */
b4caecd48005fb Christoph Hellwig  2015-01-14   888  			capabilities &= ~NOMMU_MAP_DIRECT;
^1da177e4c3f41 Linus Torvalds     2005-04-16   889  		}
ac7149045d9fcc Choi Gi-yong       2014-04-07   890  	} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   891  		/* anonymous mappings are always memory backed and can be
^1da177e4c3f41 Linus Torvalds     2005-04-16   892  		 * privately mapped
^1da177e4c3f41 Linus Torvalds     2005-04-16   893  		 */
b4caecd48005fb Christoph Hellwig  2015-01-14   894  		capabilities = NOMMU_MAP_COPY;
^1da177e4c3f41 Linus Torvalds     2005-04-16   895  
^1da177e4c3f41 Linus Torvalds     2005-04-16   896  		/* handle PROT_EXEC implication by PROT_READ */
^1da177e4c3f41 Linus Torvalds     2005-04-16   897  		if ((prot & PROT_READ) &&
^1da177e4c3f41 Linus Torvalds     2005-04-16   898  		    (current->personality & READ_IMPLIES_EXEC))
^1da177e4c3f41 Linus Torvalds     2005-04-16   899  			prot |= PROT_EXEC;
^1da177e4c3f41 Linus Torvalds     2005-04-16   900  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16   901  
^1da177e4c3f41 Linus Torvalds     2005-04-16   902  	/* allow the security API to have its say */
e5467859f7f79b Al Viro            2012-05-30   903  	ret = security_mmap_addr(addr);
^1da177e4c3f41 Linus Torvalds     2005-04-16   904  	if (ret < 0)
^1da177e4c3f41 Linus Torvalds     2005-04-16   905  		return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   906  
^1da177e4c3f41 Linus Torvalds     2005-04-16   907  	/* looks okay */
^1da177e4c3f41 Linus Torvalds     2005-04-16   908  	*_capabilities = capabilities;
^1da177e4c3f41 Linus Torvalds     2005-04-16   909  	return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16   910  }
^1da177e4c3f41 Linus Torvalds     2005-04-16   911  
^1da177e4c3f41 Linus Torvalds     2005-04-16   912  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   913   * we've determined that we can make the mapping, now translate what we
^1da177e4c3f41 Linus Torvalds     2005-04-16   914   * now know into VMA flags
^1da177e4c3f41 Linus Torvalds     2005-04-16   915   */
^1da177e4c3f41 Linus Torvalds     2005-04-16   916  static unsigned long determine_vm_flags(struct file *file,
^1da177e4c3f41 Linus Torvalds     2005-04-16   917  					unsigned long prot,
^1da177e4c3f41 Linus Torvalds     2005-04-16   918  					unsigned long flags,
^1da177e4c3f41 Linus Torvalds     2005-04-16   919  					unsigned long capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   920  {
^1da177e4c3f41 Linus Torvalds     2005-04-16   921  	unsigned long vm_flags;
^1da177e4c3f41 Linus Torvalds     2005-04-16   922  
e6bfb70959a0ca Dave Hansen        2016-02-12   923  	vm_flags = calc_vm_prot_bits(prot, 0) | calc_vm_flag_bits(flags);
^1da177e4c3f41 Linus Torvalds     2005-04-16   924  	/* vm_flags |= mm->def_flags; */
^1da177e4c3f41 Linus Torvalds     2005-04-16   925  
b4caecd48005fb Christoph Hellwig  2015-01-14   926  	if (!(capabilities & NOMMU_MAP_DIRECT)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   927  		/* attempt to share read-only copies of mapped file chunks */
3c7b204547bc3d Bernd Schmidt      2010-05-25   928  		vm_flags |= VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
^1da177e4c3f41 Linus Torvalds     2005-04-16   929  		if (file && !(prot & PROT_WRITE))
^1da177e4c3f41 Linus Torvalds     2005-04-16   930  			vm_flags |= VM_MAYSHARE;
3c7b204547bc3d Bernd Schmidt      2010-05-25   931  	} else {
^1da177e4c3f41 Linus Torvalds     2005-04-16   932  		/* overlay a shareable mapping on the backing device or inode
^1da177e4c3f41 Linus Torvalds     2005-04-16   933  		 * if possible - used for chardevs, ramfs/tmpfs/shmfs and
^1da177e4c3f41 Linus Torvalds     2005-04-16   934  		 * romfs/cramfs */
b4caecd48005fb Christoph Hellwig  2015-01-14   935  		vm_flags |= VM_MAYSHARE | (capabilities & NOMMU_VMFLAGS);
^1da177e4c3f41 Linus Torvalds     2005-04-16   936  		if (flags & MAP_SHARED)
3c7b204547bc3d Bernd Schmidt      2010-05-25   937  			vm_flags |= VM_SHARED;
^1da177e4c3f41 Linus Torvalds     2005-04-16   938  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16   939  
^1da177e4c3f41 Linus Torvalds     2005-04-16   940  	/* refuse to let anyone share private mappings with this process if
^1da177e4c3f41 Linus Torvalds     2005-04-16   941  	 * it's being traced - otherwise breakpoints set in it may interfere
^1da177e4c3f41 Linus Torvalds     2005-04-16   942  	 * with another untraced process
^1da177e4c3f41 Linus Torvalds     2005-04-16   943  	 */
a288eecce5253c Tejun Heo          2011-06-17   944  	if ((flags & MAP_PRIVATE) && current->ptrace)
^1da177e4c3f41 Linus Torvalds     2005-04-16   945  		vm_flags &= ~VM_MAYSHARE;
^1da177e4c3f41 Linus Torvalds     2005-04-16   946  
^1da177e4c3f41 Linus Torvalds     2005-04-16   947  	return vm_flags;
^1da177e4c3f41 Linus Torvalds     2005-04-16   948  }
^1da177e4c3f41 Linus Torvalds     2005-04-16   949  
^1da177e4c3f41 Linus Torvalds     2005-04-16   950  /*
8feae13110d60c David Howells      2009-01-08   951   * set up a shared mapping on a file (the driver or filesystem provides and
8feae13110d60c David Howells      2009-01-08   952   * pins the storage)
^1da177e4c3f41 Linus Torvalds     2005-04-16   953   */
8feae13110d60c David Howells      2009-01-08   954  static int do_mmap_shared_file(struct vm_area_struct *vma)
^1da177e4c3f41 Linus Torvalds     2005-04-16   955  {
^1da177e4c3f41 Linus Torvalds     2005-04-16   956  	int ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   957  
f74ac01520c9f6 Miklos Szeredi     2017-02-20   958  	ret = call_mmap(vma->vm_file, vma);
dd8632a12e500a Paul Mundt         2009-01-08   959  	if (ret == 0) {
dd8632a12e500a Paul Mundt         2009-01-08   960  		vma->vm_region->vm_top = vma->vm_region->vm_end;
645d83c5db970a David Howells      2009-09-24   961  		return 0;
dd8632a12e500a Paul Mundt         2009-01-08   962  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16   963  	if (ret != -ENOSYS)
^1da177e4c3f41 Linus Torvalds     2005-04-16   964  		return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   965  
3fa30460ea5021 David Howells      2010-03-23   966  	/* getting -ENOSYS indicates that direct mmap isn't possible (as
3fa30460ea5021 David Howells      2010-03-23   967  	 * opposed to tried but failed) so we can only give a suitable error as
3fa30460ea5021 David Howells      2010-03-23   968  	 * it's not possible to make a private copy if MAP_SHARED was given */
^1da177e4c3f41 Linus Torvalds     2005-04-16   969  	return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16   970  }
^1da177e4c3f41 Linus Torvalds     2005-04-16   971  
^1da177e4c3f41 Linus Torvalds     2005-04-16   972  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   973   * set up a private mapping or an anonymous shared mapping
^1da177e4c3f41 Linus Torvalds     2005-04-16   974   */
8feae13110d60c David Howells      2009-01-08   975  static int do_mmap_private(struct vm_area_struct *vma,
8feae13110d60c David Howells      2009-01-08   976  			   struct vm_region *region,
645d83c5db970a David Howells      2009-09-24   977  			   unsigned long len,
645d83c5db970a David Howells      2009-09-24   978  			   unsigned long capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   979  {
dbc8358c72373d Joonsoo Kim        2014-12-12   980  	unsigned long total, point;
^1da177e4c3f41 Linus Torvalds     2005-04-16   981  	void *base;
8feae13110d60c David Howells      2009-01-08   982  	int ret, order;
^1da177e4c3f41 Linus Torvalds     2005-04-16   983  
^1da177e4c3f41 Linus Torvalds     2005-04-16   984  	/* invoke the file's mapping function so that it can keep track of
^1da177e4c3f41 Linus Torvalds     2005-04-16   985  	 * shared mappings on devices or memory
^1da177e4c3f41 Linus Torvalds     2005-04-16   986  	 * - VM_MAYSHARE will be set if it may attempt to share
^1da177e4c3f41 Linus Torvalds     2005-04-16   987  	 */
b4caecd48005fb Christoph Hellwig  2015-01-14   988  	if (capabilities & NOMMU_MAP_DIRECT) {
f74ac01520c9f6 Miklos Szeredi     2017-02-20   989  		ret = call_mmap(vma->vm_file, vma);
dd8632a12e500a Paul Mundt         2009-01-08   990  		if (ret == 0) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   991  			/* shouldn't return success if we're not sharing */
dd8632a12e500a Paul Mundt         2009-01-08   992  			BUG_ON(!(vma->vm_flags & VM_MAYSHARE));
dd8632a12e500a Paul Mundt         2009-01-08   993  			vma->vm_region->vm_top = vma->vm_region->vm_end;
645d83c5db970a David Howells      2009-09-24   994  			return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16   995  		}
dd8632a12e500a Paul Mundt         2009-01-08   996  		if (ret != -ENOSYS)
dd8632a12e500a Paul Mundt         2009-01-08   997  			return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   998  
^1da177e4c3f41 Linus Torvalds     2005-04-16   999  		/* getting an ENOSYS error indicates that direct mmap isn't
^1da177e4c3f41 Linus Torvalds     2005-04-16  1000  		 * possible (as opposed to tried but failed) so we'll try to
^1da177e4c3f41 Linus Torvalds     2005-04-16  1001  		 * make a private copy of the data and map that instead */
^1da177e4c3f41 Linus Torvalds     2005-04-16  1002  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  1003  
8feae13110d60c David Howells      2009-01-08  1004  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1005  	/* allocate some memory to hold the mapping
^1da177e4c3f41 Linus Torvalds     2005-04-16  1006  	 * - note that this may not return a page-aligned address if the object
^1da177e4c3f41 Linus Torvalds     2005-04-16  1007  	 *   we're allocating is smaller than a page
^1da177e4c3f41 Linus Torvalds     2005-04-16  1008  	 */
f67d9b1576c1c6 Bob Liu            2011-05-24  1009  	order = get_order(len);
8feae13110d60c David Howells      2009-01-08 @1010  	total = 1 << order;
f67d9b1576c1c6 Bob Liu            2011-05-24  1011  	point = len >> PAGE_SHIFT;
dd8632a12e500a Paul Mundt         2009-01-08  1012  
dbc8358c72373d Joonsoo Kim        2014-12-12  1013  	/* we don't want to allocate a power-of-2 sized page set */
22cc877b32202b Leon Romanovsky    2015-06-24  1014  	if (sysctl_nr_trim_pages && total - point >= sysctl_nr_trim_pages)
dbc8358c72373d Joonsoo Kim        2014-12-12  1015  		total = point;
8feae13110d60c David Howells      2009-01-08  1016  
da616534ed7f6e Joonsoo Kim        2015-02-27  1017  	base = alloc_pages_exact(total << PAGE_SHIFT, GFP_KERNEL);
dbc8358c72373d Joonsoo Kim        2014-12-12  1018  	if (!base)
dbc8358c72373d Joonsoo Kim        2014-12-12  1019  		goto enomem;
dbc8358c72373d Joonsoo Kim        2014-12-12  1020  
dbc8358c72373d Joonsoo Kim        2014-12-12  1021  	atomic_long_add(total, &mmap_pages_allocated);
8feae13110d60c David Howells      2009-01-08  1022  
8feae13110d60c David Howells      2009-01-08  1023  	region->vm_flags = vma->vm_flags |= VM_MAPPED_COPY;
8feae13110d60c David Howells      2009-01-08  1024  	region->vm_start = (unsigned long) base;
f67d9b1576c1c6 Bob Liu            2011-05-24  1025  	region->vm_end   = region->vm_start + len;
dd8632a12e500a Paul Mundt         2009-01-08  1026  	region->vm_top   = region->vm_start + (total << PAGE_SHIFT);
8feae13110d60c David Howells      2009-01-08  1027  
8feae13110d60c David Howells      2009-01-08  1028  	vma->vm_start = region->vm_start;
8feae13110d60c David Howells      2009-01-08  1029  	vma->vm_end   = region->vm_start + len;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1030  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1031  	if (vma->vm_file) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  1032  		/* read the contents of a file into the copy */
^1da177e4c3f41 Linus Torvalds     2005-04-16  1033  		loff_t fpos;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1034  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1035  		fpos = vma->vm_pgoff;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1036  		fpos <<= PAGE_SHIFT;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1037  
b4bf802a5a6563 Christoph Hellwig  2017-09-01  1038  		ret = kernel_read(vma->vm_file, base, len, &fpos);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1039  		if (ret < 0)
^1da177e4c3f41 Linus Torvalds     2005-04-16  1040  			goto error_free;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1041  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1042  		/* clear the last little bit */
f67d9b1576c1c6 Bob Liu            2011-05-24  1043  		if (ret < len)
f67d9b1576c1c6 Bob Liu            2011-05-24  1044  			memset(base + ret, 0, len - ret);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1045  
bfd40eaff5abb9 Kirill A. Shutemov 2018-07-26  1046  	} else {
bfd40eaff5abb9 Kirill A. Shutemov 2018-07-26  1047  		vma_set_anonymous(vma);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1048  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  1049  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1050  	return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1051  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1052  error_free:
7223bb4a829628 Namhyung Kim       2011-05-24  1053  	free_page_series(region->vm_start, region->vm_top);
8feae13110d60c David Howells      2009-01-08  1054  	region->vm_start = vma->vm_start = 0;
8feae13110d60c David Howells      2009-01-08  1055  	region->vm_end   = vma->vm_end = 0;
dd8632a12e500a Paul Mundt         2009-01-08  1056  	region->vm_top   = 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1057  	return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1058  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1059  enomem:
b1de0d139c97a6 Mitchel Humpherys  2014-06-06  1060  	pr_err("Allocation of length %lu from process %d (%s) failed\n",
05ae6fa31874ed Greg Ungerer       2009-01-13  1061  	       len, current->pid, current->comm);
9af744d743170b Michal Hocko       2017-02-22  1062  	show_free_areas(0, NULL);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1063  	return -ENOMEM;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1064  }
^1da177e4c3f41 Linus Torvalds     2005-04-16  1065  

:::::: The code at line 1010 was first introduced by commit
:::::: 8feae13110d60cc6287afabc2887366b0eb226c2 NOMMU: Make VMAs per MM as for MMU-mode linux

:::::: TO: David Howells <dhowells@redhat.com>
:::::: CC: David Howells <dhowells@redhat.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37658 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
@ 2021-08-23  4:10 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2021-08-23  4:10 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 19794 bytes --]

CC: clang-built-linux(a)googlegroups.com
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Jakub Jelinek <jakub@redhat.com>
CC: "Peter Zijlstra (Intel)" <peterz@infradead.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   e22ce8eb631bdc47a4a4ea7ecf4e4ba499db4f93
commit: 2f78788b55baa3410b1ec91a576286abe1ad4d6a ilog2: improve ilog2 for constant arguments
date:   8 months ago
:::::: branch date: 7 hours ago
:::::: commit date: 8 months ago
config: riscv-randconfig-c006-20210822 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 9e9d70591e72fc6762b4b9a226b68ed1307419bf)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f78788b55baa3410b1ec91a576286abe1ad4d6a
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 2f78788b55baa3410b1ec91a576286abe1ad4d6a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                                               ^
   mm/page-writeback.c:1925:2: note: Taking true branch
           if (unlikely(current->nr_dirtied >= ratelimit))
           ^
   mm/page-writeback.c:1926:3: note: Calling 'balance_dirty_pages'
                   balance_dirty_pages(wb, current->nr_dirtied);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:1561:47: note: '?' condition is false
           struct dirty_throttle_control * const mdtc = mdtc_valid(&mdtc_stor) ?
                                                        ^
   mm/page-writeback.c:1577:2: note: Loop condition is true.  Entering loop body
           for (;;) {
           ^
   mm/page-writeback.c:1590:7: note: Assuming 'strictlimit' is false
                   if (unlikely(strictlimit)) {
                       ^
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   mm/page-writeback.c:1590:3: note: Taking false branch
                   if (unlikely(strictlimit)) {
                   ^
   mm/page-writeback.c:1602:7: note: 'mdtc' is null
                   if (mdtc) {
                       ^~~~
   mm/page-writeback.c:1602:3: note: Taking false branch
                   if (mdtc) {
                   ^
   mm/page-writeback.c:1640:7: note: Assuming the condition is true
                   if (dirty <= dirty_freerun_ceiling(thresh, bg_thresh) &&
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:1640:7: note: Left side of '&&' is true
   mm/page-writeback.c:1641:9: note: 'mdtc' is null
                       (!mdtc ||
                         ^~~~
   mm/page-writeback.c:1641:14: note: Left side of '||' is true
                       (!mdtc ||
                              ^
   mm/page-writeback.c:1647:11: note: Calling 'dirty_poll_interval'
                           intv = dirty_poll_interval(dirty, thresh);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:1407:6: note: Assuming 'thresh' is > 'dirty'
           if (thresh > dirty)
               ^~~~~~~~~~~~~~
   mm/page-writeback.c:1407:2: note: Taking true branch
           if (thresh > dirty)
           ^
   mm/page-writeback.c:1408:18: note: '?' condition is false
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                                  ^
   include/linux/log2.h:158:2: note: expanded from macro 'ilog2'
           __builtin_constant_p(n) ?       \
           ^
   mm/page-writeback.c:1408:18: note: '?' condition is false
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                                  ^
   include/linux/log2.h:161:2: note: expanded from macro 'ilog2'
           (sizeof(n) <= 4) ?              \
           ^
   mm/page-writeback.c:1408:14: note: The result of the left shift is undefined because the right operand is negative
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                              ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 13 warnings (6 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   5 warnings generated.
   Suppressed 5 warnings (5 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   13 warnings generated.
   Suppressed 13 warnings (6 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   13 warnings generated.
   Suppressed 13 warnings (6 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   15 warnings generated.
   mm/workingset.c:206:2: warning: Value stored to 'nid' is never read [clang-analyzer-deadcode.DeadStores]
           nid = entry & ((1UL << NODES_SHIFT) - 1);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/workingset.c:206:2: note: Value stored to 'nid' is never read
           nid = entry & ((1UL << NODES_SHIFT) - 1);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 14 warnings (6 in non-user code, 8 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   13 warnings generated.
   Suppressed 13 warnings (6 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   13 warnings generated.
   Suppressed 13 warnings (6 in non-user code, 7 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   16 warnings generated.
   Suppressed 16 warnings (6 in non-user code, 10 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   49 warnings generated.
   mm/nommu.c:881:6: warning: Value stored to 'prot' is never read [clang-analyzer-deadcode.DeadStores]
                                           prot |= PROT_EXEC;
                                           ^
   mm/nommu.c:881:6: note: Value stored to 'prot' is never read
   mm/nommu.c:899:4: warning: Value stored to 'prot' is never read [clang-analyzer-deadcode.DeadStores]
                           prot |= PROT_EXEC;
                           ^
   mm/nommu.c:899:4: note: Value stored to 'prot' is never read
>> mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
           total = 1 << order;
                     ^
   mm/nommu.c:1091:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   mm/nommu.c:1091:2: note: Taking false branch
           if (ret < 0)
           ^
   mm/nommu.c:1104:6: note: Assuming 'region' is non-null
           if (!region)
               ^~~~~~~
   mm/nommu.c:1104:2: note: Taking false branch
           if (!region)
           ^
   mm/nommu.c:1108:6: note: Assuming 'vma' is non-null
           if (!vma)
               ^~~~
   mm/nommu.c:1108:2: note: Taking false branch
           if (!vma)
           ^
   mm/nommu.c:1118:6: note: 'file' is null
           if (file) {
               ^~~~
   mm/nommu.c:1118:2: note: Taking false branch
           if (file) {
           ^
   mm/nommu.c:1133:6: note: Assuming the condition is false
           if (vm_flags & VM_MAYSHARE) {
               ^~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:1133:2: note: Taking false branch
           if (vm_flags & VM_MAYSHARE) {
           ^
   mm/nommu.c:1230:6: note: 'file' is null
           if (file && vma->vm_flags & VM_SHARED)
               ^~~~
   mm/nommu.c:1230:11: note: Left side of '&&' is false
           if (file && vma->vm_flags & VM_SHARED)
                    ^
   mm/nommu.c:1233:9: note: Calling 'do_mmap_private'
                   ret = do_mmap_private(vma, region, len, capabilities);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:988:2: note: Taking false branch
           if (capabilities & NOMMU_MAP_DIRECT) {
           ^
   mm/nommu.c:1009:10: note: Calling 'get_order'
           order = get_order(len);
                   ^~~~~~~~~~~~~~
   include/asm-generic/getorder.h:31:2: note: Taking false branch
           if (__builtin_constant_p(size)) {
           ^
   include/asm-generic/getorder.h:46:9: note: Calling 'fls64'
           return fls64(size);
                  ^~~~~~~~~~~
   include/asm-generic/bitops/fls64.h:29:6: note: Assuming 'x' is not equal to 0
           if (x == 0)
               ^~~~~~
   include/asm-generic/bitops/fls64.h:29:2: note: Taking false branch
           if (x == 0)
           ^
   include/asm-generic/bitops/fls64.h:31:2: note: Returning the value 32
           return __fls(x) + 1;
           ^~~~~~~~~~~~~~~~~~~
   include/asm-generic/getorder.h:46:9: note: Returning from 'fls64'
           return fls64(size);
                  ^~~~~~~~~~~
   include/asm-generic/getorder.h:46:2: note: Returning the value 32
           return fls64(size);
           ^~~~~~~~~~~~~~~~~~
   mm/nommu.c:1009:10: note: Returning from 'get_order'
           order = get_order(len);
                   ^~~~~~~~~~~~~~
   mm/nommu.c:1009:2: note: The value 32 is assigned to 'order'
           order = get_order(len);
           ^~~~~~~~~~~~~~~~~~~~~~
   mm/nommu.c:1010:12: note: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int'
           total = 1 << order;
                     ^  ~~~~~
   mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '33', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult]
           total = 1 << order;
                     ^
   mm/nommu.c:1091:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   mm/nommu.c:1091:2: note: Taking false branch
           if (ret < 0)
           ^
   mm/nommu.c:1104:6: note: Assuming 'region' is non-null
           if (!region)
               ^~~~~~~
   mm/nommu.c:1104:2: note: Taking false branch
           if (!region)
           ^
   mm/nommu.c:1108:6: note: Assuming 'vma' is non-null
           if (!vma)
               ^~~~
   mm/nommu.c:1108:2: note: Taking false branch
           if (!vma)
           ^
   mm/nommu.c:1118:6: note: 'file' is null
           if (file) {

vim +1010 mm/nommu.c

^1da177e4c3f41 Linus Torvalds     2005-04-16   971  
^1da177e4c3f41 Linus Torvalds     2005-04-16   972  /*
^1da177e4c3f41 Linus Torvalds     2005-04-16   973   * set up a private mapping or an anonymous shared mapping
^1da177e4c3f41 Linus Torvalds     2005-04-16   974   */
8feae13110d60c David Howells      2009-01-08   975  static int do_mmap_private(struct vm_area_struct *vma,
8feae13110d60c David Howells      2009-01-08   976  			   struct vm_region *region,
645d83c5db970a David Howells      2009-09-24   977  			   unsigned long len,
645d83c5db970a David Howells      2009-09-24   978  			   unsigned long capabilities)
^1da177e4c3f41 Linus Torvalds     2005-04-16   979  {
dbc8358c72373d Joonsoo Kim        2014-12-12   980  	unsigned long total, point;
^1da177e4c3f41 Linus Torvalds     2005-04-16   981  	void *base;
8feae13110d60c David Howells      2009-01-08   982  	int ret, order;
^1da177e4c3f41 Linus Torvalds     2005-04-16   983  
^1da177e4c3f41 Linus Torvalds     2005-04-16   984  	/* invoke the file's mapping function so that it can keep track of
^1da177e4c3f41 Linus Torvalds     2005-04-16   985  	 * shared mappings on devices or memory
^1da177e4c3f41 Linus Torvalds     2005-04-16   986  	 * - VM_MAYSHARE will be set if it may attempt to share
^1da177e4c3f41 Linus Torvalds     2005-04-16   987  	 */
b4caecd48005fb Christoph Hellwig  2015-01-14   988  	if (capabilities & NOMMU_MAP_DIRECT) {
f74ac01520c9f6 Miklos Szeredi     2017-02-20   989  		ret = call_mmap(vma->vm_file, vma);
dd8632a12e500a Paul Mundt         2009-01-08   990  		if (ret == 0) {
^1da177e4c3f41 Linus Torvalds     2005-04-16   991  			/* shouldn't return success if we're not sharing */
dd8632a12e500a Paul Mundt         2009-01-08   992  			BUG_ON(!(vma->vm_flags & VM_MAYSHARE));
dd8632a12e500a Paul Mundt         2009-01-08   993  			vma->vm_region->vm_top = vma->vm_region->vm_end;
645d83c5db970a David Howells      2009-09-24   994  			return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16   995  		}
dd8632a12e500a Paul Mundt         2009-01-08   996  		if (ret != -ENOSYS)
dd8632a12e500a Paul Mundt         2009-01-08   997  			return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16   998  
^1da177e4c3f41 Linus Torvalds     2005-04-16   999  		/* getting an ENOSYS error indicates that direct mmap isn't
^1da177e4c3f41 Linus Torvalds     2005-04-16  1000  		 * possible (as opposed to tried but failed) so we'll try to
^1da177e4c3f41 Linus Torvalds     2005-04-16  1001  		 * make a private copy of the data and map that instead */
^1da177e4c3f41 Linus Torvalds     2005-04-16  1002  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  1003  
8feae13110d60c David Howells      2009-01-08  1004  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1005  	/* allocate some memory to hold the mapping
^1da177e4c3f41 Linus Torvalds     2005-04-16  1006  	 * - note that this may not return a page-aligned address if the object
^1da177e4c3f41 Linus Torvalds     2005-04-16  1007  	 *   we're allocating is smaller than a page
^1da177e4c3f41 Linus Torvalds     2005-04-16  1008  	 */
f67d9b1576c1c6 Bob Liu            2011-05-24  1009  	order = get_order(len);
8feae13110d60c David Howells      2009-01-08 @1010  	total = 1 << order;
f67d9b1576c1c6 Bob Liu            2011-05-24  1011  	point = len >> PAGE_SHIFT;
dd8632a12e500a Paul Mundt         2009-01-08  1012  
dbc8358c72373d Joonsoo Kim        2014-12-12  1013  	/* we don't want to allocate a power-of-2 sized page set */
22cc877b32202b Leon Romanovsky    2015-06-24  1014  	if (sysctl_nr_trim_pages && total - point >= sysctl_nr_trim_pages)
dbc8358c72373d Joonsoo Kim        2014-12-12  1015  		total = point;
8feae13110d60c David Howells      2009-01-08  1016  
da616534ed7f6e Joonsoo Kim        2015-02-27  1017  	base = alloc_pages_exact(total << PAGE_SHIFT, GFP_KERNEL);
dbc8358c72373d Joonsoo Kim        2014-12-12  1018  	if (!base)
dbc8358c72373d Joonsoo Kim        2014-12-12  1019  		goto enomem;
dbc8358c72373d Joonsoo Kim        2014-12-12  1020  
dbc8358c72373d Joonsoo Kim        2014-12-12  1021  	atomic_long_add(total, &mmap_pages_allocated);
8feae13110d60c David Howells      2009-01-08  1022  
8feae13110d60c David Howells      2009-01-08  1023  	region->vm_flags = vma->vm_flags |= VM_MAPPED_COPY;
8feae13110d60c David Howells      2009-01-08  1024  	region->vm_start = (unsigned long) base;
f67d9b1576c1c6 Bob Liu            2011-05-24  1025  	region->vm_end   = region->vm_start + len;
dd8632a12e500a Paul Mundt         2009-01-08  1026  	region->vm_top   = region->vm_start + (total << PAGE_SHIFT);
8feae13110d60c David Howells      2009-01-08  1027  
8feae13110d60c David Howells      2009-01-08  1028  	vma->vm_start = region->vm_start;
8feae13110d60c David Howells      2009-01-08  1029  	vma->vm_end   = region->vm_start + len;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1030  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1031  	if (vma->vm_file) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  1032  		/* read the contents of a file into the copy */
^1da177e4c3f41 Linus Torvalds     2005-04-16  1033  		loff_t fpos;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1034  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1035  		fpos = vma->vm_pgoff;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1036  		fpos <<= PAGE_SHIFT;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1037  
b4bf802a5a6563 Christoph Hellwig  2017-09-01  1038  		ret = kernel_read(vma->vm_file, base, len, &fpos);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1039  		if (ret < 0)
^1da177e4c3f41 Linus Torvalds     2005-04-16  1040  			goto error_free;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1041  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1042  		/* clear the last little bit */
f67d9b1576c1c6 Bob Liu            2011-05-24  1043  		if (ret < len)
f67d9b1576c1c6 Bob Liu            2011-05-24  1044  			memset(base + ret, 0, len - ret);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1045  
bfd40eaff5abb9 Kirill A. Shutemov 2018-07-26  1046  	} else {
bfd40eaff5abb9 Kirill A. Shutemov 2018-07-26  1047  		vma_set_anonymous(vma);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1048  	}
^1da177e4c3f41 Linus Torvalds     2005-04-16  1049  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1050  	return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1051  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1052  error_free:
7223bb4a829628 Namhyung Kim       2011-05-24  1053  	free_page_series(region->vm_start, region->vm_top);
8feae13110d60c David Howells      2009-01-08  1054  	region->vm_start = vma->vm_start = 0;
8feae13110d60c David Howells      2009-01-08  1055  	region->vm_end   = vma->vm_end = 0;
dd8632a12e500a Paul Mundt         2009-01-08  1056  	region->vm_top   = 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1057  	return ret;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1058  
^1da177e4c3f41 Linus Torvalds     2005-04-16  1059  enomem:
b1de0d139c97a6 Mitchel Humpherys  2014-06-06  1060  	pr_err("Allocation of length %lu from process %d (%s) failed\n",
05ae6fa31874ed Greg Ungerer       2009-01-13  1061  	       len, current->pid, current->comm);
9af744d743170b Michal Hocko       2017-02-22  1062  	show_free_areas(0, NULL);
^1da177e4c3f41 Linus Torvalds     2005-04-16  1063  	return -ENOMEM;
^1da177e4c3f41 Linus Torvalds     2005-04-16  1064  }
^1da177e4c3f41 Linus Torvalds     2005-04-16  1065  

:::::: The code at line 1010 was first introduced by commit
:::::: 8feae13110d60cc6287afabc2887366b0eb226c2 NOMMU: Make VMAs per MM as for MMU-mode linux

:::::: TO: David Howells <dhowells@redhat.com>
:::::: CC: David Howells <dhowells@redhat.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 31955 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-11-13 13:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-08 14:00 mm/nommu.c:1010:12: warning: The result of the left shift is undefined due to shifting by '32', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult] kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2021-11-13 13:49 kernel test robot
2021-08-23  4:10 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.