All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Anthony Yznaga <anthony.yznaga@oracle.com>
Cc: oe-kbuild-all@lists.linux.dev,
	LUCI Bot <vijayendra.suman@oracle.com>,
	Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
	"Liam R. Howlett" <Liam.Howlett@oracle.com>
Subject: [jlayton:uek-localio 2075/2262] mm/mprotect.c:741:34: error: 'PROT_RESERVED' undeclared; did you mean 'STATX__RESERVED'?
Date: Sun, 25 May 2025 05:51:11 +0800	[thread overview]
Message-ID: <202505250558.UsFMTCTn-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git uek-localio
head:   65b0dc6bb1f5c18e63d8ee9ea1cca997456a81a9
commit: 1531d95799a9ff0fe66223d38ac49153572f53d6 [2075/2262] mm: Allow userspace to reserve VA range for use by userspace only
config: parisc-randconfig-002-20250524 (https://download.01.org/0day-ci/archive/20250525/202505250558.UsFMTCTn-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250525/202505250558.UsFMTCTn-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505250558.UsFMTCTn-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from include/linux/bvec.h:10,
                    from include/linux/blk_types.h:10,
                    from include/linux/writeback.h:13,
                    from include/linux/memcontrol.h:23,
                    from include/linux/swap.h:9,
                    from include/linux/userfaultfd_k.h:18,
                    from include/linux/hugetlb.h:16,
                    from mm/mprotect.c:13:
   include/linux/highmem.h: In function 'clear_user_highpage_uncached':
   include/linux/highmem.h:265:2: error: implicit declaration of function 'clear_user_page_uncached'; did you mean 'clear_user_highpage_uncached'? [-Werror=implicit-function-declaration]
     clear_user_page_uncached(addr, vaddr, page);
     ^~~~~~~~~~~~~~~~~~~~~~~~
     clear_user_highpage_uncached
   mm/mprotect.c: In function 'do_mprotect_pkey':
>> mm/mprotect.c:741:34: error: 'PROT_RESERVED' undeclared (first use in this function); did you mean 'STATX__RESERVED'?
     if (!arch_validate_prot(prot & ~PROT_RESERVED, start))
                                     ^~~~~~~~~~~~~
                                     STATX__RESERVED
   mm/mprotect.c:741:34: note: each undeclared identifier is reported only once for each function it appears in
   cc1: some warnings being treated as errors


vim +741 mm/mprotect.c

   707	
   708	/*
   709	 * pkey==-1 when doing a legacy mprotect()
   710	 */
   711	static int do_mprotect_pkey(unsigned long start, size_t len,
   712			unsigned long prot, int pkey)
   713	{
   714		unsigned long nstart, end, tmp, reqprot;
   715		struct vm_area_struct *vma, *prev;
   716		int error;
   717		const int grows = prot & (PROT_GROWSDOWN|PROT_GROWSUP);
   718		const bool rier = (current->personality & READ_IMPLIES_EXEC) &&
   719					(prot & PROT_READ);
   720		struct mmu_gather tlb;
   721		struct vma_iterator vmi;
   722	
   723		start = untagged_addr(start);
   724	
   725		prot &= ~(PROT_GROWSDOWN|PROT_GROWSUP);
   726		if (grows == (PROT_GROWSDOWN|PROT_GROWSUP)) /* can't be both */
   727			return -EINVAL;
   728	
   729		if (start & ~PAGE_MASK)
   730			return -EINVAL;
   731		if (!len)
   732			return 0;
   733		len = PAGE_ALIGN(len);
   734		end = start + len;
   735		if (end <= start)
   736			return -ENOMEM;
   737		/*
   738		 * Remove PROT_RESERVED rather than teach architectures that
   739		 * it is okay.
   740		 */
 > 741		if (!arch_validate_prot(prot & ~PROT_RESERVED, start))
   742			return -EINVAL;
   743	
   744		reqprot = prot;
   745	
   746		if (mmap_write_lock_killable(current->mm))
   747			return -EINTR;
   748	
   749		/*
   750		 * If userspace did not allocate the pkey, do not let
   751		 * them use it here.
   752		 */
   753		error = -EINVAL;
   754		if ((pkey != -1) && !mm_pkey_is_allocated(current->mm, pkey))
   755			goto out;
   756	
   757		vma_iter_init(&vmi, current->mm, start);
   758		vma = vma_find(&vmi, end);
   759		error = -ENOMEM;
   760		if (prot & PROT_RESERVED) {
   761			if (vma || !access_ok((const void *)start, len))
   762				error = -EINVAL;
   763			else
   764				error = install_rsvd_mapping(current->mm, start, len);
   765			goto out;
   766		}
   767		if (!vma)
   768			goto out;
   769	
   770		if (unlikely(grows & PROT_GROWSDOWN)) {
   771			if (vma->vm_start >= end)
   772				goto out;
   773			start = vma->vm_start;
   774			error = -EINVAL;
   775			if (!(vma->vm_flags & VM_GROWSDOWN))
   776				goto out;
   777		} else {
   778			if (vma->vm_start > start)
   779				goto out;
   780			if (unlikely(grows & PROT_GROWSUP)) {
   781				end = vma->vm_end;
   782				error = -EINVAL;
   783				if (!(vma->vm_flags & VM_GROWSUP))
   784					goto out;
   785			}
   786		}
   787	
   788		prev = vma_prev(&vmi);
   789		if (start > vma->vm_start)
   790			prev = vma;
   791	
   792		tlb_gather_mmu(&tlb, current->mm);
   793		nstart = start;
   794		tmp = vma->vm_start;
   795		for_each_vma_range(vmi, vma, end) {
   796			unsigned long mask_off_old_flags;
   797			unsigned long newflags;
   798			int new_vma_pkey;
   799	
   800			if (vma->vm_start != tmp) {
   801				error = -ENOMEM;
   802				break;
   803			}
   804	
   805			/* Does the application expect PROT_READ to imply PROT_EXEC */
   806			if (rier && (vma->vm_flags & VM_MAYEXEC))
   807				prot |= PROT_EXEC;
   808	
   809			/*
   810			 * Each mprotect() call explicitly passes r/w/x permissions.
   811			 * If a permission is not passed to mprotect(), it must be
   812			 * cleared from the VMA.
   813			 */
   814			mask_off_old_flags = VM_ACCESS_FLAGS | VM_FLAGS_CLEAR;
   815	
   816			new_vma_pkey = arch_override_mprotect_pkey(vma, prot, pkey);
   817			newflags = calc_vm_prot_bits(prot, new_vma_pkey);
   818			newflags |= (vma->vm_flags & ~mask_off_old_flags);
   819	
   820			/* newflags >> 4 shift VM_MAY% in place of VM_% */
   821			if ((newflags & ~(newflags >> 4)) & VM_ACCESS_FLAGS) {
   822				error = -EACCES;
   823				break;
   824			}
   825	
   826			if (map_deny_write_exec(vma->vm_flags, newflags)) {
   827				error = -EACCES;
   828				break;
   829			}
   830	
   831			/* Allow architectures to sanity-check the new flags */
   832			if (!arch_validate_flags(newflags)) {
   833				error = -EINVAL;
   834				break;
   835			}
   836	
   837			error = security_file_mprotect(vma, reqprot, prot);
   838			if (error)
   839				break;
   840	
   841			tmp = vma->vm_end;
   842			if (tmp > end)
   843				tmp = end;
   844	
   845			if (vma->vm_ops && vma->vm_ops->mprotect) {
   846				error = vma->vm_ops->mprotect(vma, nstart, tmp, newflags);
   847				if (error)
   848					break;
   849			}
   850	
   851			error = mprotect_fixup(&vmi, &tlb, vma, &prev, nstart, tmp, newflags);
   852			if (error)
   853				break;
   854	
   855			tmp = vma_iter_end(&vmi);
   856			nstart = tmp;
   857			prot = reqprot;
   858		}
   859		tlb_finish_mmu(&tlb);
   860	
   861		if (!error && tmp < end)
   862			error = -ENOMEM;
   863	
   864	out:
   865		mmap_write_unlock(current->mm);
   866		return error;
   867	}
   868	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2025-05-24 21:51 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202505250558.UsFMTCTn-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=anthony.yznaga@oracle.com \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=vijayendra.suman@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.