Re: [PATCH v2] x86/mm/pat: use pr_warn() for early W^X warnings

From: kernel test robot

Date: Fri Sep 11 2026 - 21:30:28 EST


Hi Mike,

kernel test robot noticed the following build errors:

[auto build test ERROR on ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482]

url: https://github.com/intel-lab-lkp/linux/commits/Mike-Rapoport-Microsoft/x86-mm-pat-use-pr_warn-for-early-W-X-warnings/20260911-142843
base: ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482
patch link: https://lore.kernel.org/r/20260911-fixes-verify-rwx-v2-1-e2cde39b6693%40kernel.org
patch subject: [PATCH v2] x86/mm/pat: use pr_warn() for early W^X warnings
config: x86_64-allnoconfig (https://download.01.org/0day-ci/archive/20260912/202609120952.vcYnJp5p-lkp@xxxxxxxxx/config)
compiler: clang version 22.1.3 (https://github.com/llvm/llvm-project e9846648fd6183ee6d8cbdb4502213fcf902a211)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260912/202609120952.vcYnJp5p-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609120952.vcYnJp5p-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

>> arch/x86/mm/pat/set_memory.c:708:16: error: expected ')'
708 | pr_warn_once(1, "CPA detected W^X violation: %016llx -> %016llx range: 0x%016lx - 0x%016lx PFN %lx\n",
| ^
arch/x86/mm/pat/set_memory.c:708:3: note: to match this '('
708 | pr_warn_once(1, "CPA detected W^X violation: %016llx -> %016llx range: 0x%016lx - 0x%016lx PFN %lx\n",
| ^
include/linux/printk.h:669:2: note: expanded from macro 'pr_warn_once'
669 | printk_once(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
| ^
include/linux/printk.h:650:15: note: expanded from macro 'printk_once'
650 | DO_ONCE_LITE(printk, fmt, ##__VA_ARGS__)
| ^
1 error generated.


vim +708 arch/x86/mm/pat/set_memory.c

667
668 /*
669 * Validate strict W^X semantics.
670 */
671 static inline pgprot_t verify_rwx(pgprot_t old, pgprot_t new, unsigned long start,
672 unsigned long pfn, unsigned long npg,
673 bool nx, bool rw)
674 {
675 unsigned long end;
676
677 /*
678 * 32-bit has some unfixable W+X issues, like EFI code
679 * and writeable data being in the same page. Disable
680 * detection and enforcement there.
681 */
682 if (IS_ENABLED(CONFIG_X86_32))
683 return new;
684
685 /* Only verify when NX is supported: */
686 if (!(__supported_pte_mask & _PAGE_NX))
687 return new;
688
689 if (!((pgprot_val(old) ^ pgprot_val(new)) & (_PAGE_RW | _PAGE_NX)))
690 return new;
691
692 if ((pgprot_val(new) & (_PAGE_RW | _PAGE_NX)) != _PAGE_RW)
693 return new;
694
695 /* Non-leaf translation entries can disable writing or execution. */
696 if (!rw || nx)
697 return new;
698
699 end = start + npg * PAGE_SIZE - 1;
700
701 /*
702 * If the kernel text is still RWX, gently complain, this could be a
703 * false positive.
704 * Once debug_checkwx() becomes mandatory for CONFIG_STRICT_KERNEL_RWX,
705 * the warning can be removed completely.
706 */
707 if (!kernel_set_to_readonly) {
> 708 pr_warn_once(1, "CPA detected W^X violation: %016llx -> %016llx range: 0x%016lx - 0x%016lx PFN %lx\n",
709 (unsigned long long)pgprot_val(old),
710 (unsigned long long)pgprot_val(new),
711 start, end, pfn);
712 return new;
713 }
714
715 WARN_ONCE(1, "CPA detected W^X violation: %016llx -> %016llx range: 0x%016lx - 0x%016lx PFN %lx\n",
716 (unsigned long long)pgprot_val(old),
717 (unsigned long long)pgprot_val(new),
718 start, end, pfn);
719
720 /*
721 * For now, allow all permission change attempts by returning the
722 * attempted permissions. This can 'return old' to actively
723 * refuse the permission change at a later time.
724 */
725 return new;
726 }
727

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