CC: kbuild-all(a)lists.01.org CC: linux-kernel(a)vger.kernel.org TO: Andrea Arcangeli CC: Peter Xu CC: Andrew Morton CC: Linux Memory Management List CC: Jerome Glisse tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: a409ed156a90093a03fe6a93721ddf4c591eac87 commit: 63b2d4174c4ad1f40b48d7138e71bcb564c1fe03 userfaultfd: wp: add the writeprotect API to userfaultfd ioctl date: 9 months ago :::::: branch date: 18 hours ago :::::: commit date: 9 months ago compiler: nds32le-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot cppcheck possible warnings: (new ones prefixed by >>, may not real problems) fs/userfaultfd.c:417:40: warning: Boolean result is used in bitwise operation. Clarify expression with parentheses. [clarifyCondition] VM_BUG_ON(!(reason & VM_UFFD_MISSING) ^ !!(reason & VM_UFFD_WP)); ^ fs/userfaultfd.c:902:40: warning: Boolean result is used in bitwise operation. Clarify expression with parentheses. [clarifyCondition] BUG_ON(!!vma->vm_userfaultfd_ctx.ctx ^ ^ fs/userfaultfd.c:1379:40: warning: Boolean result is used in bitwise operation. Clarify expression with parentheses. [clarifyCondition] BUG_ON(!!cur->vm_userfaultfd_ctx.ctx ^ ^ fs/userfaultfd.c:1571:40: warning: Boolean result is used in bitwise operation. Clarify expression with parentheses. [clarifyCondition] BUG_ON(!!cur->vm_userfaultfd_ctx.ctx ^ ^ >> fs/userfaultfd.c:1849:9: warning: Identical condition 'ret', second condition is always false [identicalConditionAfterEarlyExit] return ret; ^ fs/userfaultfd.c:1841:6: note: first condition if (ret) ^ fs/userfaultfd.c:1849:9: note: second condition return ret; ^ vim +/ret +1849 fs/userfaultfd.c ad465cae96b456b Andrea Arcangeli 2015-09-04 1807 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1808 static int userfaultfd_writeprotect(struct userfaultfd_ctx *ctx, 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1809 unsigned long arg) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1810 { 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1811 int ret; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1812 struct uffdio_writeprotect uffdio_wp; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1813 struct uffdio_writeprotect __user *user_uffdio_wp; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1814 struct userfaultfd_wake_range range; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1815 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1816 if (READ_ONCE(ctx->mmap_changing)) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1817 return -EAGAIN; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1818 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1819 user_uffdio_wp = (struct uffdio_writeprotect __user *) arg; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1820 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1821 if (copy_from_user(&uffdio_wp, user_uffdio_wp, 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1822 sizeof(struct uffdio_writeprotect))) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1823 return -EFAULT; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1824 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1825 ret = validate_range(ctx->mm, &uffdio_wp.range.start, 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1826 uffdio_wp.range.len); 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1827 if (ret) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1828 return ret; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1829 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1830 if (uffdio_wp.mode & ~(UFFDIO_WRITEPROTECT_MODE_DONTWAKE | 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1831 UFFDIO_WRITEPROTECT_MODE_WP)) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1832 return -EINVAL; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1833 if ((uffdio_wp.mode & UFFDIO_WRITEPROTECT_MODE_WP) && 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1834 (uffdio_wp.mode & UFFDIO_WRITEPROTECT_MODE_DONTWAKE)) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1835 return -EINVAL; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1836 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1837 ret = mwriteprotect_range(ctx->mm, uffdio_wp.range.start, 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1838 uffdio_wp.range.len, uffdio_wp.mode & 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1839 UFFDIO_WRITEPROTECT_MODE_WP, 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1840 &ctx->mmap_changing); 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1841 if (ret) 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1842 return ret; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1843 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1844 if (!(uffdio_wp.mode & UFFDIO_WRITEPROTECT_MODE_DONTWAKE)) { 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1845 range.start = uffdio_wp.range.start; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1846 range.len = uffdio_wp.range.len; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1847 wake_userfault(ctx, &range); 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1848 } 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 @1849 return ret; 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1850 } 63b2d4174c4ad1f Andrea Arcangeli 2020-04-06 1851 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org