• Hou Tao's avatar
    selftest/bpf: Test the read of vsyscall page under x86-64 · be66d791
    Hou Tao authored
    Under x86-64, when using bpf_probe_read_kernel{_str}() or
    bpf_probe_read{_str}() to read vsyscall page, the read may trigger oops,
    so add one test case to ensure that the problem is fixed. Beside those
    four bpf helpers mentioned above, testing the read of vsyscall page by
    using bpf_probe_read_user{_str} and bpf_copy_from_user{_task}() as well.
    
    The test case passes the address of vsyscall page to these six helpers
    and checks whether the returned values are expected:
    
    1) For bpf_probe_read_kernel{_str}()/bpf_probe_read{_str}(), the
       expected return value is -ERANGE as shown below:
    
    bpf_probe_read_kernel_common
      copy_from_kernel_nofault
        // false, return -ERANGE
        copy_from_kernel_nofault_allowed
    
    2) For bpf_probe_read_user{_str}(), the expected return value is -EFAULT
       as show below:
    
    bpf_probe_read_user_common
      copy_from_user_nofault
        // false, return -EFAULT
        __access_ok
    
    3) For bpf_copy_from_user(), the expected return value is -EFAULT:
    
    // return -EFAULT
    bpf_copy_from_user
      copy_from_user
        _copy_from_user
          // return false
          access_ok
    
    4) For bpf_copy_from_user_task(), the expected return value is -EFAULT:
    
    // return -EFAULT
    bpf_copy_from_user_task
      access_process_vm
        // return 0
        vma_lookup()
        // return 0
        expand_stack()
    
    The occurrence of oops depends on the availability of CPU SMAP [1]
    feature and there are three possible configurations of vsyscall page in
    the boot cmd-line: vsyscall={xonly|none|emulate}, so there are a total
    of six possible combinations. Under all these combinations, the test
    case runs successfully.
    
    [1]: https://en.wikipedia.org/wiki/Supervisor_Mode_Access_PreventionAcked-by: default avatarYonghong Song <yonghong.song@linux.dev>
    Signed-off-by: default avatarHou Tao <houtao1@huawei.com>
    Link: https://lore.kernel.org/r/20240202103935.3154011-4-houtao@huaweicloud.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    be66d791
read_vsyscall.c 1.15 KB