> Per [1] this symbol is present in: firejail, elogind, valgrind, glibc, musl, 
> linux,
> systemd, strace, stress-ng, libseccomp, qemu

tl;dr: it looks like glibc and stress-ng are the only packages from that
list that might need a rebuild, but as with systemd, neither seem
important enough to warrant a special no-change rebuild.  They will pick
up the new syscall value whenever they are next uploaded for any other
bugfix (after the current bionic -proposed kernel is promoted to
-updates).


details:

elogind: not included in bionic


firejail: it does use SYS_pkey_mprotect (which is defined as 
__NR_pkey_mprotect):
ddstreet@thorin:~/bugs/lp1821625/sym-check/firejail/firejail-0.9.52$ grep -r 
pkey_mprotect
src/man/firejail.txt:the arguments of mmap, mmap2, mprotect, pkey_mprotect and 
shmat system
src/fseccomp/seccomp.c:         // same for pkey_mprotect(,,PROT_EXEC), where 
available
src/fseccomp/seccomp.c:#ifdef SYS_pkey_mprotect
src/fseccomp/seccomp.c:         BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 
SYS_pkey_mprotect, 0, 5),

however, the latest build available:
https://launchpad.net/ubuntu/+source/firejail/0.9.52-2
for ppc64el:
https://launchpad.net/ubuntu/+source/firejail/0.9.52-2/+build/13948498
was built with libseccomp2, not libseccomp-dev (which provides the problematic 
public header file): 
Get:57 http://ftpmaster.internal/ubuntu bionic/main ppc64el libseccomp2 ppc64el 
2.3.1-2.1ubuntu3 [47.2 kB]

additionally, it was built with libseccomp2 version 2.3.1-2.1ubuntu3,
which was earlier than when the problematic patch was added (per this
bug comment 1).  So no need to recompile.


musl: appears to only define __NR_pkey_mprotect in its embedded headers, and 
doesn't include ppc; no need to require recompile:

ddstreet@thorin:~/bugs/lp1821625/sym-check/musl/musl-1.1.19$ grep -r 
pkey_mprotect
arch/mipsn32/bits/syscall.h.in:#define __NR_pkey_mprotect               6327
arch/mips64/bits/syscall.h.in:#define __NR_pkey_mprotect                5323
arch/arm/bits/syscall.h.in:#define __NR_pkey_mprotect   394
arch/aarch64/bits/syscall.h.in:#define __NR_pkey_mprotect 288
arch/or1k/bits/syscall.h.in:#define __NR_pkey_mprotect 288
arch/x32/bits/syscall.h.in:#define __NR_pkey_mprotect (0x40000000 + 329)
arch/i386/bits/syscall.h.in:#define __NR_pkey_mprotect  380
arch/x86_64/bits/syscall.h.in:#define __NR_pkey_mprotect                        
329
arch/mips/bits/syscall.h.in:#define __NR_pkey_mprotect           4363
arch/microblaze/bits/syscall.h.in:#define __NR_pkey_mprotect 395


qemu: as @cpaelzer said, just in its embedded headers; no need to recompile.


strace: does appear to use pkey_mprotect, but the latest ppc64el build:
https://launchpad.net/ubuntu/+source/strace/4.21-1ubuntu1/+build/14750033
did not build with libseccomp-dev (or libseccomp2) at all.  Additionally, it 
was built 2018-04-11, while the problematic patch was added to libseccomp 
2019-02-12.  No need to rebuild.


stress-ng: it does include the number in its skip_syscalls list, of syscalls to 
skip while running the 'enosys' stressor:
ddstreet@thorin:~/bugs/lp1821625/sym-check/stress-ng/stress-ng-0.09.25$ grep -r 
pkey_mprotect
stress-enosys.c:#if defined(SYS_pkey_mprotect)
stress-enosys.c:        SYS_pkey_mprotect,
stress-enosys.c:#if defined(__NR_pkey_mprotect)
stress-enosys.c:        __NR_pkey_mprotect,

This stressor appears to call all syscall numbers that it thinks are not
supported/implemented.  In this case, whether __NR_pkey_mprotect is a
negative number (if built with libseccomp-dev header), or not defined,
the end result is the same: stress-ng will not skip the *real*
pkey_mprotect syscall number.  However, running 'sudo stress-ng --enosys
1' on a test ppc64el instance, at kernel 4.15.0-54 or -55, does not
appear to have any negative effect.  So I don't think stress-ng needs to
be no-change rebuilt with the new kernel headers; it should be ok to
just let it pick up the correct value whenever it is next uploaded for
other reasons.


valgrind: referenced only in a commented-out table in arm64-specific file; no 
rebuild needed.
ddstreet@thorin:~/bugs/lp1821625/sym-check/valgrind/valgrind-3.13.0$ grep -r 
pkey_mprotect
coregrind/m_syswrap/syswrap-arm64-linux.c:   //   (__NR_pkey_mprotect,     
sys_ni_syscall),        // 288


glibc: it does reference pkey_mprotect.  However, the latest build for bionic 
was on 2018-04-16, before the problematic patch was added to libseccomp.  It 
appears that glibc's pkey_mprotect will simply return ENOSYS for the current 
version:

int                                                                             
                                                                                
                                                                                
                               
pkey_mprotect (void *addr, size_t len, int prot, int pkey)                      
                                                                                
                                                                                
                               
{                                                                               
                                                                                
                                                                                
                               
  if (pkey == -1)                                                               
                                                                                
                                                                                
                               
    /* If the key is -1, the system call is precisely equivalent to             
                                                                                
                                                                                
                               
       mprotect.  */                                                            
                                                                                
                                                                                
                               
    return __mprotect (addr, len, prot);                                        
                                                                                
                                                                                
                               
#ifdef __NR_pkey_mprotect                                                       
                                                                                
                                                                                
                               
  return INLINE_SYSCALL_CALL (pkey_mprotect, addr, len, prot, pkey);            
                                                                                
                                                                                
                               
#else                                                                           
                                                                                
                                                                                
                               
  __set_errno (ENOSYS);                                                         
                                                                                
                                                                                
                               
  return -1;                                                                    
                                                                                
                                                                                
                               
#endif                                                                          
                                                                                
                                                                                
                               
}                                                                               
                                                                                
                                                                                
                               

It may be that glibc should now be rebuilt with the updated kernel
headers, so it picks up support for the __NR_pkey_mprotect syscall, but
I don't believe it is a bug to leave it returning ENOSYS until it is
rebuilt later for some actual bugfix; a no-change rebuild for glibc just
to pick up this new syscall number for ppc64el seems excessive.

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1821625

Title:
  systemd 237-3ubuntu10.14 ADT test failure on Bionic ppc64el (test-
  seccomp)

Status in libseccomp package in Ubuntu:
  Invalid
Status in linux package in Ubuntu:
  Fix Released
Status in systemd package in Ubuntu:
  Invalid
Status in libseccomp source package in Bionic:
  Invalid
Status in linux source package in Bionic:
  Fix Committed
Status in systemd source package in Bionic:
  Invalid

Bug description:
  Starting with systemd 237-3ubuntu10.14, the testcase test-seccomp is
  failing on Bionic on ppc64el with the error messages:

  Operating on architecture: ppc
  Failed to add n/a() rule for architecture ppc, skipping: Bad address
  Operating on architecture: ppc64
  Failed to add n/a() rule for architecture ppc64, skipping: Bad address
  Operating on architecture: ppc64-le
  Failed to add n/a() rule for architecture ppc64-le, skipping: Numerical 
argument out of domain
  Assertion 'p == MAP_FAILED' failed at ../src/test/test-seccomp.c:413, 
function test_memory_deny_write_execute_mmap(). Aborting.
  memoryseccomp-mmap terminated by signal ABRT.
  Assertion 'wait_for_terminate_and_check("memoryseccomp-mmap", pid, WAIT_LOG) 
== EXIT_SUCCESS' failed at ../src/test/test-seccomp.c:427, function 
test_memory_deny_write_execute_mmap(). Aborting.
  Aborted (core dumped)
  FAIL: test-seccomp (code: 134)

  Full logs at:
  
https://objectstorage.prodstack4-5.canonical.com/v1/AUTH_77e2ada1e7a84929a74ba3b87153c0ac/autopkgtest-bionic/bionic/ppc64el/s/systemd/20190302_025135_d0e38@/log.gz

  The testcase passed with systemd version 237-3ubuntu10.13 running on the same 
4.15.0-45 kernel on ppc64el:
  
https://objectstorage.prodstack4-5.canonical.com/v1/AUTH_77e2ada1e7a84929a74ba3b87153c0ac/autopkgtest-bionic/bionic/ppc64el/s/systemd/20190228_154406_6b12f@/log.gz

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libseccomp/+bug/1821625/+subscriptions

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to