• Kuniyuki Iwashima's avatar
    af_unix: Add test for sock_diag and UDIAG_SHOW_UID. · ac011361
    Kuniyuki Iwashima authored
    The test prog dumps a single AF_UNIX socket's UID with and without
    unshare(CLONE_NEWUSER) and checks if it matches the result of getuid().
    
    Without the preceding patch, the test prog is killed by a NULL deref
    in sk_diag_dump_uid().
    
      # ./diag_uid
      TAP version 13
      1..2
      # Starting 2 tests from 3 test cases.
      #  RUN           diag_uid.uid.1 ...
      BUG: kernel NULL pointer dereference, address: 0000000000000270
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 105212067 P4D 105212067 PUD 1051fe067 PMD 0
      Oops: 0000 [#1] PREEMPT SMP NOPTI
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-1.amzn2022.0.1 04/01/2014
      RIP: 0010:sk_diag_fill (./include/net/sock.h:920 net/unix/diag.c:119 net/unix/diag.c:170)
      ...
      # 1: Test terminated unexpectedly by signal 9
      #          FAIL  diag_uid.uid.1
      not ok 1 diag_uid.uid.1
      #  RUN           diag_uid.uid_unshare.1 ...
      # 1: Test terminated by timeout
      #          FAIL  diag_uid.uid_unshare.1
      not ok 2 diag_uid.uid_unshare.1
      # FAILED: 0 / 2 tests passed.
      # Totals: pass:0 fail:2 xfail:0 xpass:0 skip:0 error:0
    
    With the patch, the test succeeds.
    
      # ./diag_uid
      TAP version 13
      1..2
      # Starting 2 tests from 3 test cases.
      #  RUN           diag_uid.uid.1 ...
      #            OK  diag_uid.uid.1
      ok 1 diag_uid.uid.1
      #  RUN           diag_uid.uid_unshare.1 ...
      #            OK  diag_uid.uid_unshare.1
      ok 2 diag_uid.uid_unshare.1
      # PASSED: 2 / 2 tests passed.
      # Totals: pass:2 fail:0 xfail:0 xpass:0 skip:0 error:0
    Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    ac011361
diag_uid.c 3.47 KB