From: kernel test robot <lkp@intel.com>
To: david.laight.linux@gmail.com,
Alexander Viro <viro@zeniv.linux.org.uk>,
Andre Almeida <andrealmeid@igalia.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Christian Brauner <brauner@kernel.org>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"Christophe Leroy (CS GROUP)" <chleroy@kernel.org>,
Darren Hart <dvhart@infradead.org>,
Davidlohr Bueso <dave@stgolabs.net>,
Heiko Carstens <hca@linux.ibm.com>, Jan Kara <jack@suse.cz>,
Julia Lawall <julia.lawall@inria.fr>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-arm-kernel@lists.infradead.org,
linux-fsdevel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
Nicolas Palix <nicolas.palix@imag.fr>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Walmsley <pjw@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Russell King <linux@armlinux.org.uk>,
Sven Schnelle <svens@linux.ibm.com>
Cc: oe-kbuild-all@lists.linux.dev, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 4/5] uaccess: Disable -Wshadow in __scoped_user_access()
Date: Thu, 5 Mar 2026 16:10:36 +0800 [thread overview]
Message-ID: <202603051642.i46zzlJ8-lkp@intel.com> (raw)
In-Reply-To: <20260302132755.1475451-5-david.laight.linux@gmail.com>
Hi,
kernel test robot noticed the following build errors:
[auto build test ERROR on brauner-vfs/vfs.all]
[also build test ERROR on v7.0-rc2]
[cannot apply to linus/master next-20260303]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/david-laight-linux-gmail-com/uaccess-Fix-scoped_user_read_access-for-pointer-to-const/20260302-213317
base: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git vfs.all
patch link: https://lore.kernel.org/r/20260302132755.1475451-5-david.laight.linux%40gmail.com
patch subject: [PATCH v2 4/5] uaccess: Disable -Wshadow in __scoped_user_access()
config: nios2-allnoconfig (https://download.01.org/0day-ci/archive/20260305/202603051642.i46zzlJ8-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260305/202603051642.i46zzlJ8-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/202603051642.i46zzlJ8-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
In file included from include/asm-generic/div64.h:27,
from ./arch/nios2/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/compat.h:10,
from kernel/futex/core.c:34:
kernel/futex/futex.h: In function 'futex_get_value_locked':
>> include/linux/uaccess.h:740:20: warning: unused variable '_tmpptr' [-Wunused-variable]
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
396 | for (declaration; !_with_done; _with_done = true)
| ^~~
include/linux/compiler.h:394:17: note: in expansion of macro 'and_with'
394 | and_with (declaration)
| ^~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:173,
from <command-line>:
include/linux/compiler-gcc.h:118:33: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
118 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
| ^~~~~~~
include/linux/compiler-gcc.h:129:9: note: in expansion of macro '__diag'
129 | __diag(__diag_GCC_ignore option)
| ^~~~~~
include/linux/uaccess.h:742:31: note: in expansion of macro '__diag_ignore_all'
742 | __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
In file included from include/asm-generic/div64.h:27,
from ./arch/nios2/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/compat.h:10,
from kernel/futex/core.c:34:
>> include/linux/uaccess.h:743:90: error: '_tmpptr' undeclared (first use in this function)
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
include/linux/uaccess.h:743:90: note: each undeclared identifier is reported only once for each function it appears in
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:28: error: '_with_done' undeclared (first use in this function)
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~
include/linux/uaccess.h:743:17: note: in expansion of macro 'and_with'
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
kernel/futex/core.c: In function 'get_futex_key':
>> include/linux/uaccess.h:740:20: warning: unused variable '_tmpptr' [-Wunused-variable]
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
396 | for (declaration; !_with_done; _with_done = true)
| ^~~
include/linux/compiler.h:394:17: note: in expansion of macro 'and_with'
394 | and_with (declaration)
| ^~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:173,
from <command-line>:
include/linux/compiler-gcc.h:118:33: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
118 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
| ^~~~~~~
include/linux/compiler-gcc.h:129:9: note: in expansion of macro '__diag'
129 | __diag(__diag_GCC_ignore option)
| ^~~~~~
include/linux/uaccess.h:742:31: note: in expansion of macro '__diag_ignore_all'
742 | __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
In file included from include/asm-generic/div64.h:27,
from ./arch/nios2/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/compat.h:10,
from kernel/futex/core.c:34:
>> include/linux/uaccess.h:743:90: error: '_tmpptr' undeclared (first use in this function)
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:28: error: '_with_done' undeclared (first use in this function)
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~
include/linux/uaccess.h:743:17: note: in expansion of macro 'and_with'
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/uaccess.h:740:20: warning: unused variable '_tmpptr' [-Wunused-variable]
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:778:9: note: in expansion of macro '__scoped_user_access'
778 | __scoped_user_access(write, udst, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:790:9: note: in expansion of macro 'scoped_user_write_access_size'
790 | scoped_user_write_access_size(udst, sizeof(*(udst)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:856:9: note: in expansion of macro 'scoped_user_write_access'
856 | scoped_user_write_access(_tmpdst, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:604:37: note: in expansion of macro 'put_user_inline'
604 | if (node_updated && put_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
396 | for (declaration; !_with_done; _with_done = true)
| ^~~
include/linux/compiler.h:394:17: note: in expansion of macro 'and_with'
394 | and_with (declaration)
| ^~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:778:9: note: in expansion of macro '__scoped_user_access'
778 | __scoped_user_access(write, udst, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:790:9: note: in expansion of macro 'scoped_user_write_access_size'
790 | scoped_user_write_access_size(udst, sizeof(*(udst)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:856:9: note: in expansion of macro 'scoped_user_write_access'
856 | scoped_user_write_access(_tmpdst, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:604:37: note: in expansion of macro 'put_user_inline'
604 | if (node_updated && put_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:173,
from <command-line>:
include/linux/compiler-gcc.h:118:33: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
118 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
| ^~~~~~~
include/linux/compiler-gcc.h:129:9: note: in expansion of macro '__diag'
129 | __diag(__diag_GCC_ignore option)
| ^~~~~~
include/linux/uaccess.h:742:31: note: in expansion of macro '__diag_ignore_all'
742 | __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:778:9: note: in expansion of macro '__scoped_user_access'
778 | __scoped_user_access(write, udst, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:790:9: note: in expansion of macro 'scoped_user_write_access_size'
790 | scoped_user_write_access_size(udst, sizeof(*(udst)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:856:9: note: in expansion of macro 'scoped_user_write_access'
856 | scoped_user_write_access(_tmpdst, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:604:37: note: in expansion of macro 'put_user_inline'
604 | if (node_updated && put_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
..
vim +/_tmpptr +743 include/linux/uaccess.h
689
690 /**
691 * __scoped_user_access - Open a scope for user access
692 * @mode: The mode of the access class (read, write, rw)
693 * @uptr: The pointer to access user space memory
694 * @size: Size of the access
695 * @elbl: Error label to goto when the access region is rejected. It
696 * must be placed outside the scope
697 *
698 * If the user access function inside the scope requires a fault label, it
699 * can use @elbl or a different label outside the scope, which requires
700 * that user access which is implemented with ASM GOTO has been properly
701 * wrapped. See unsafe_get_user() for reference.
702 *
703 * scoped_user_rw_access(ptr, efault) {
704 * unsafe_get_user(rval, &ptr->rval, efault);
705 * unsafe_put_user(wval, &ptr->wval, efault);
706 * }
707 * return 0;
708 * efault:
709 * return -EFAULT;
710 *
711 * The scope is internally implemented as a autoterminating nested for()
712 * loop, which can be left with 'return', 'break' and 'goto' at any
713 * point.
714 *
715 * When the scope is left user_##@_mode##_access_end() is automatically
716 * invoked.
717 *
718 * When the architecture supports masked user access and the access region
719 * which is determined by @uptr and @size is not a valid user space
720 * address, i.e. < TASK_SIZE, the scope sets the pointer to a faulting user
721 * space address and does not terminate early. This optimizes for the good
722 * case and lets the performance uncritical bad case go through the fault.
723 *
724 * The eventual modification of the pointer is limited to the scope.
725 * Outside of the scope the original pointer value is unmodified, so that
726 * the original pointer value is available for diagnostic purposes in an
727 * out of scope fault path.
728 *
729 * Nesting scoped user access into a user access scope is invalid and fails
730 * the build. Nesting into other guards, e.g. pagefault is safe.
731 *
732 * The masked variant does not check the size of the access and relies on a
733 * mapping hole (e.g. guard page) to catch an out of range pointer, the
734 * first access to user memory inside the scope has to be within
735 * @uptr ... @uptr + PAGE_SIZE - 1
736 *
737 * Don't use directly. Use scoped_masked_user_$MODE_access() instead.
738 */
739 #define __scoped_user_access(mode, uptr, size, elbl) \
> 740 with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
741 /* Force modified pointer usage within the scope */ \
742 __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
> 743 and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
744 __diag_pop()
745
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: david.laight.linux@gmail.com,
Alexander Viro <viro@zeniv.linux.org.uk>,
Andre Almeida <andrealmeid@igalia.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Christian Brauner <brauner@kernel.org>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"Christophe Leroy (CS GROUP)" <chleroy@kernel.org>,
Darren Hart <dvhart@infradead.org>,
Davidlohr Bueso <dave@stgolabs.net>,
Heiko Carstens <hca@linux.ibm.com>, Jan Kara <jack@suse.cz>,
Julia Lawall <julia.lawall@inria.fr>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-arm-kernel@lists.infradead.org,
linux-fsdevel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
Nicolas Palix <nicolas.palix@imag.fr>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Walmsley <pjw@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Russell King <linux@armlinux.org.uk>,
Sven Schnelle <svens@linux.ibm.com>
Cc: oe-kbuild-all@lists.linux.dev, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 4/5] uaccess: Disable -Wshadow in __scoped_user_access()
Date: Thu, 5 Mar 2026 16:10:36 +0800 [thread overview]
Message-ID: <202603051642.i46zzlJ8-lkp@intel.com> (raw)
In-Reply-To: <20260302132755.1475451-5-david.laight.linux@gmail.com>
Hi,
kernel test robot noticed the following build errors:
[auto build test ERROR on brauner-vfs/vfs.all]
[also build test ERROR on v7.0-rc2]
[cannot apply to linus/master next-20260303]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/david-laight-linux-gmail-com/uaccess-Fix-scoped_user_read_access-for-pointer-to-const/20260302-213317
base: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git vfs.all
patch link: https://lore.kernel.org/r/20260302132755.1475451-5-david.laight.linux%40gmail.com
patch subject: [PATCH v2 4/5] uaccess: Disable -Wshadow in __scoped_user_access()
config: nios2-allnoconfig (https://download.01.org/0day-ci/archive/20260305/202603051642.i46zzlJ8-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260305/202603051642.i46zzlJ8-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/202603051642.i46zzlJ8-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
In file included from include/asm-generic/div64.h:27,
from ./arch/nios2/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/compat.h:10,
from kernel/futex/core.c:34:
kernel/futex/futex.h: In function 'futex_get_value_locked':
>> include/linux/uaccess.h:740:20: warning: unused variable '_tmpptr' [-Wunused-variable]
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
396 | for (declaration; !_with_done; _with_done = true)
| ^~~
include/linux/compiler.h:394:17: note: in expansion of macro 'and_with'
394 | and_with (declaration)
| ^~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:173,
from <command-line>:
include/linux/compiler-gcc.h:118:33: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
118 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
| ^~~~~~~
include/linux/compiler-gcc.h:129:9: note: in expansion of macro '__diag'
129 | __diag(__diag_GCC_ignore option)
| ^~~~~~
include/linux/uaccess.h:742:31: note: in expansion of macro '__diag_ignore_all'
742 | __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
In file included from include/asm-generic/div64.h:27,
from ./arch/nios2/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/compat.h:10,
from kernel/futex/core.c:34:
>> include/linux/uaccess.h:743:90: error: '_tmpptr' undeclared (first use in this function)
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
include/linux/uaccess.h:743:90: note: each undeclared identifier is reported only once for each function it appears in
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:28: error: '_with_done' undeclared (first use in this function)
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~
include/linux/uaccess.h:743:17: note: in expansion of macro 'and_with'
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/futex.h:288:16: note: in expansion of macro 'get_user_inline'
288 | return get_user_inline(*dest, from);
| ^~~~~~~~~~~~~~~
kernel/futex/core.c: In function 'get_futex_key':
>> include/linux/uaccess.h:740:20: warning: unused variable '_tmpptr' [-Wunused-variable]
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
396 | for (declaration; !_with_done; _with_done = true)
| ^~~
include/linux/compiler.h:394:17: note: in expansion of macro 'and_with'
394 | and_with (declaration)
| ^~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:173,
from <command-line>:
include/linux/compiler-gcc.h:118:33: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
118 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
| ^~~~~~~
include/linux/compiler-gcc.h:129:9: note: in expansion of macro '__diag'
129 | __diag(__diag_GCC_ignore option)
| ^~~~~~
include/linux/uaccess.h:742:31: note: in expansion of macro '__diag_ignore_all'
742 | __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
In file included from include/asm-generic/div64.h:27,
from ./arch/nios2/include/generated/asm/div64.h:1,
from include/linux/math.h:6,
from include/linux/math64.h:6,
from include/linux/time.h:6,
from include/linux/compat.h:10,
from kernel/futex/core.c:34:
>> include/linux/uaccess.h:743:90: error: '_tmpptr' undeclared (first use in this function)
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:28: error: '_with_done' undeclared (first use in this function)
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~
include/linux/uaccess.h:743:17: note: in expansion of macro 'and_with'
743 | and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
| ^~~~~~~~
include/linux/uaccess.h:755:9: note: in expansion of macro '__scoped_user_access'
755 | __scoped_user_access(read, usrc, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:767:9: note: in expansion of macro 'scoped_user_read_access_size'
767 | scoped_user_read_access_size(usrc, sizeof(*(usrc)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:831:9: note: in expansion of macro 'scoped_user_read_access'
831 | scoped_user_read_access(_tmpsrc, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:584:21: note: in expansion of macro 'get_user_inline'
584 | if (get_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/uaccess.h:740:20: warning: unused variable '_tmpptr' [-Wunused-variable]
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~~~~
include/linux/compiler.h:396:14: note: in definition of macro 'and_with'
396 | for (declaration; !_with_done; _with_done = true)
| ^~~~~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:778:9: note: in expansion of macro '__scoped_user_access'
778 | __scoped_user_access(write, udst, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:790:9: note: in expansion of macro 'scoped_user_write_access_size'
790 | scoped_user_write_access_size(udst, sizeof(*(udst)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:856:9: note: in expansion of macro 'scoped_user_write_access'
856 | scoped_user_write_access(_tmpdst, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:604:37: note: in expansion of macro 'put_user_inline'
604 | if (node_updated && put_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
>> include/linux/compiler.h:396:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
396 | for (declaration; !_with_done; _with_done = true)
| ^~~
include/linux/compiler.h:394:17: note: in expansion of macro 'and_with'
394 | and_with (declaration)
| ^~~~~~~~
include/linux/uaccess.h:740:9: note: in expansion of macro 'with'
740 | with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
| ^~~~
include/linux/uaccess.h:778:9: note: in expansion of macro '__scoped_user_access'
778 | __scoped_user_access(write, udst, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:790:9: note: in expansion of macro 'scoped_user_write_access_size'
790 | scoped_user_write_access_size(udst, sizeof(*(udst)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:856:9: note: in expansion of macro 'scoped_user_write_access'
856 | scoped_user_write_access(_tmpdst, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:604:37: note: in expansion of macro 'put_user_inline'
604 | if (node_updated && put_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:173,
from <command-line>:
include/linux/compiler-gcc.h:118:33: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
118 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
| ^~~~~~~
include/linux/compiler-gcc.h:129:9: note: in expansion of macro '__diag'
129 | __diag(__diag_GCC_ignore option)
| ^~~~~~
include/linux/uaccess.h:742:31: note: in expansion of macro '__diag_ignore_all'
742 | __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:778:9: note: in expansion of macro '__scoped_user_access'
778 | __scoped_user_access(write, udst, size, elbl)
| ^~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:790:9: note: in expansion of macro 'scoped_user_write_access_size'
790 | scoped_user_write_access_size(udst, sizeof(*(udst)), elbl)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/uaccess.h:856:9: note: in expansion of macro 'scoped_user_write_access'
856 | scoped_user_write_access(_tmpdst, efault) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/futex/core.c:604:37: note: in expansion of macro 'put_user_inline'
604 | if (node_updated && put_user_inline(node, naddr))
| ^~~~~~~~~~~~~~~
..
vim +/_tmpptr +743 include/linux/uaccess.h
689
690 /**
691 * __scoped_user_access - Open a scope for user access
692 * @mode: The mode of the access class (read, write, rw)
693 * @uptr: The pointer to access user space memory
694 * @size: Size of the access
695 * @elbl: Error label to goto when the access region is rejected. It
696 * must be placed outside the scope
697 *
698 * If the user access function inside the scope requires a fault label, it
699 * can use @elbl or a different label outside the scope, which requires
700 * that user access which is implemented with ASM GOTO has been properly
701 * wrapped. See unsafe_get_user() for reference.
702 *
703 * scoped_user_rw_access(ptr, efault) {
704 * unsafe_get_user(rval, &ptr->rval, efault);
705 * unsafe_put_user(wval, &ptr->wval, efault);
706 * }
707 * return 0;
708 * efault:
709 * return -EFAULT;
710 *
711 * The scope is internally implemented as a autoterminating nested for()
712 * loop, which can be left with 'return', 'break' and 'goto' at any
713 * point.
714 *
715 * When the scope is left user_##@_mode##_access_end() is automatically
716 * invoked.
717 *
718 * When the architecture supports masked user access and the access region
719 * which is determined by @uptr and @size is not a valid user space
720 * address, i.e. < TASK_SIZE, the scope sets the pointer to a faulting user
721 * space address and does not terminate early. This optimizes for the good
722 * case and lets the performance uncritical bad case go through the fault.
723 *
724 * The eventual modification of the pointer is limited to the scope.
725 * Outside of the scope the original pointer value is unmodified, so that
726 * the original pointer value is available for diagnostic purposes in an
727 * out of scope fault path.
728 *
729 * Nesting scoped user access into a user access scope is invalid and fails
730 * the build. Nesting into other guards, e.g. pagefault is safe.
731 *
732 * The masked variant does not check the size of the access and relies on a
733 * mapping hole (e.g. guard page) to catch an out of range pointer, the
734 * first access to user memory inside the scope has to be within
735 * @uptr ... @uptr + PAGE_SIZE - 1
736 *
737 * Don't use directly. Use scoped_masked_user_$MODE_access() instead.
738 */
739 #define __scoped_user_access(mode, uptr, size, elbl) \
> 740 with (auto _tmpptr = __scoped_user_access_begin(mode, uptr, size, elbl)) \
741 /* Force modified pointer usage within the scope */ \
742 __diag_push() __diag_ignore_all("-Wshadow", "uptr is readonly copy") \
> 743 and_with (const auto uptr __cleanup(__scoped_user_##mode##_access_end) = _tmpptr) \
744 __diag_pop()
745
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-03-05 8:12 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-02 13:27 [PATCH v2 0/5] uaccess: Updates to scoped_user_access() david.laight.linux
2026-03-02 13:27 ` david.laight.linux
2026-03-02 13:27 ` [PATCH v2 1/5] uaccess: Fix scoped_user_read_access() for 'pointer to const' david.laight.linux
2026-03-02 13:27 ` david.laight.linux
2026-03-02 14:59 ` Christophe Leroy (CS GROUP)
2026-03-02 14:59 ` Christophe Leroy (CS GROUP)
2026-03-02 17:26 ` Linus Torvalds
2026-03-02 17:26 ` Linus Torvalds
2026-03-02 18:55 ` David Laight
2026-03-02 18:55 ` David Laight
2026-03-02 13:27 ` [PATCH v2 2/5] compiler.h: Add generic support for 'autoterminating nested for() loops' david.laight.linux
2026-03-02 13:27 ` david.laight.linux
2026-03-02 13:27 ` [PATCH v2 3/5] uaccess.h: Use with() and and_with() in __scoped_user_access() david.laight.linux
2026-03-02 13:27 ` david.laight.linux
2026-03-02 13:27 ` [PATCH v2 4/5] uaccess: Disable -Wshadow " david.laight.linux
2026-03-02 13:27 ` david.laight.linux
2026-03-02 15:00 ` Christophe Leroy (CS GROUP)
2026-03-02 15:00 ` Christophe Leroy (CS GROUP)
2026-03-03 9:12 ` David Laight
2026-03-03 9:12 ` David Laight
2026-03-02 17:17 ` Linus Torvalds
2026-03-02 17:17 ` Linus Torvalds
2026-03-05 8:10 ` kernel test robot [this message]
2026-03-05 8:10 ` kernel test robot
2026-03-02 13:27 ` [PATCH v2 next 5/5] signal: Use scoped_user_access() instead of __put/get_user() david.laight.linux
2026-03-02 13:27 ` david.laight.linux
2026-03-02 16:07 ` Christophe Leroy (CS GROUP)
2026-03-02 16:07 ` Christophe Leroy (CS GROUP)
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=202603051642.i46zzlJ8-lkp@intel.com \
--to=lkp@intel.com \
--cc=andrealmeid@igalia.com \
--cc=andrew.cooper3@citrix.com \
--cc=borntraeger@linux.ibm.com \
--cc=brauner@kernel.org \
--cc=chleroy@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=dave@stgolabs.net \
--cc=david.laight.linux@gmail.com \
--cc=dvhart@infradead.org \
--cc=hca@linux.ibm.com \
--cc=jack@suse.cz \
--cc=julia.lawall@inria.fr \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mpe@ellerman.id.au \
--cc=nicolas.palix@imag.fr \
--cc=npiggin@gmail.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=palmer@dabbelt.com \
--cc=peterz@infradead.org \
--cc=pjw@kernel.org \
--cc=svens@linux.ibm.com \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
/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.