On 11/26/24 06:34, Maciej Wieczor-Retman wrote:
Recent change in how get_user() handles pointers [1] has a specific case
for LAM. It assigns a different bitmask that's later used to check
whether a pointer comes from userland in get_user().

While currently commented out (until LASS [2] is merged into the kernel)
it's worth making changes to the LAM selftest ahead of time.

Modify cpu_has_la57() so it provides current paging level information
instead of the cpuid one.

Add test case to LAM that utilizes a ioctl (FIOASYNC) syscall which uses
get_user() in its implementation. Execute the syscall with differently
tagged pointers to verify that valid user pointers are passing through
and invalid kernel/non-canonical pointers are not.

Also to avoid unhelpful test failures add a check in main() to skip
running tests if LAM was not compiled into the kernel.

Code was tested on a Sierra Forest Xeon machine that's LAM capable. The
test was ran without issues with both the LAM lines from [1] untouched
and commented out. The test was also ran without issues with LAM_SUP
both enabled and disabled.

4/5 level pagetables code paths were also successfully tested in Simics
on a 5-level capable machine.

[1] 
https://lore.kernel.org/all/[email protected]/
[2] 
https://lore.kernel.org/all/[email protected]/

Maciej Wieczor-Retman (3):
   selftests/lam: Move cpu_has_la57() to use cpuinfo flag
   selftests/lam: Skip test if LAM is disabled
   selftests/lam: Test get_user() LAM pointer handling

  tools/testing/selftests/x86/lam.c | 122 ++++++++++++++++++++++++++++--
  1 file changed, 117 insertions(+), 5 deletions(-)


Looks good to me. For selftests if it is going through x86 tree.

Acked-by: Shuah Khan <[email protected]>

If you want me to take this through selftest tree, I can do that.

thanks,
-- Shuah

Reply via email to