Thanks for the reviews - I'll have to come up with some tests on my own
then ...

In general there already are build time tests and autopkgtests in the package.
So coverage of "old calls" for regressions is already good.
Fortunately the autopkgtests seem to be extendable for an explicit verification 
of a few of the new calls. IMHO there is no need to modify the packages test as 
run on autopkgtest for these more rare calls - the are focused on use cases 
like snaps which they got added for.

We need to:
- add the new calls
- make it fail on unknown calls (without it says "syscall not available on this 
arch/kernel - as this is a syscall whitelist its ok and the error can be ignored
- remove some syscalls that never (or no more) exist(ed) that way


Note: a lot of this is kernel dependent it should work with the intended SRU 
target of Bionic with kernel 4.15 or 4.18, but be careful to run it there (e.g. 
not a LXD container on Xenials 4.4 kernel)

# Prep
$ apt install ubuntu-dev-tools build-essential linux-libc-dev libseccomp-dev  
libseccomp2 seccomp
$ pull-lp-source libseccomp bionic
$ cd libseccomp-2.3.1
$ export ADTTMP=$(mktemp -d); echo $ADTTMP
# run original tests as-is (should pass/fail as expected)
$ ./debian/tests/test-filter
# add new syscalls of this SRU
$ cp debian/tests/data/safe.filter debian/tests/data/newcodes.filter
$ printf 
"preadv2\npwritev2\npkey_mprotect\npkey_alloc\npkey_free\nget_tls\ns390_guarded_storage\ns390_sthyi\n"
 >> debian/tests/data/newcodes.filter
# remove unknown calls (x86 4.18 kernel)
sed -i -e '/^_exit$/d' -e '/^fstatvfs$/d' -e '/^llseek$/d' -e '/^pread$/d' -e 
'/^pselect$/d' -e '/^pwrite$/d' -e '/^sigtimedwait$/d' -e '/^sigwaitinfo$/d' -e 
'/^statvfs$/d' debian/tests/data/newcodes.filter
# make unknown call a fail
$ sed -i -e '111s/continue;/{fprintf(stderr, "failed to find %s\\n",buf);rc = 
-1;goto out;}/' debian/tests/src/test-seccomp.c
# run this special test and check return value
${ADTTMP}/exe ./debian/tests/data/newcodes.filter /bin/date; echo $?

Without the fix it will fail like:
DEBUG: seccomp_load_filters ./debian/tests/data/newcodes.filter
failed to find preadv2
seccomp_load_filters failed with -1
1

But with the fix applied those new calls will work:
DEBUG: seccomp_load_filters ./debian/tests/data/newcodes.filter
Tue Feb 12 07:41:05 UTC 2019
0


Tested on the PPA builds and working - adding these as SRU test & verification 
steps

** Description changed:

  [Impact]
  
   * The libseccomp library provides an easy to use, platform independent,
     interface to the Linux Kernel's syscall filtering mechanism. But it can
     only "control" those syscalls it knows about. Therefore staying up to
     date with newer kernels is a requirement to be fully funcitonal.
  
   * At the time 18.04 was released with the 4.15 kernel the new definitions
     were not yet released for libseccomp - lets fix this mismatch by
     backporting the new syscall definitions [2][3][4].
  
  [Test Case]
  
-  * TODO
+  * Note: a lot of this is kernel dependent it should work with the
+ intended SRU target of Bionic with kernel 4.15 or 4.18, but be careful
+ to run it there (e.g. not a LXD container on Xenials 4.4 kernel)
+ 
+  * we modify the already existing autopkgtest for this SRU verification
+ 
+ # Prep
+ $ apt install ubuntu-dev-tools build-essential linux-libc-dev libseccomp-dev 
libseccomp2 seccomp
+ $ pull-lp-source libseccomp bionic
+ $ cd libseccomp-2.3.1
+ $ export ADTTMP=$(mktemp -d); echo $ADTTMP
+ # run original tests as-is (should pass/fail as expected)
+ $ ./debian/tests/test-filter
+ # add new syscalls of this SRU
+ $ cp debian/tests/data/safe.filter debian/tests/data/newcodes.filter
+ $ printf 
"preadv2\npwritev2\npkey_mprotect\npkey_alloc\npkey_free\nget_tls\ns390_guarded_storage\ns390_sthyi\n"
 >> debian/tests/data/newcodes.filter
+ # remove unknown calls (x86 4.18 kernel)
+ sed -i -e '/^_exit$/d' -e '/^fstatvfs$/d' -e '/^llseek$/d' -e '/^pread$/d' -e 
'/^pselect$/d' -e '/^pwrite$/d' -e '/^sigtimedwait$/d' -e '/^sigwaitinfo$/d' -e 
'/^statvfs$/d' debian/tests/data/newcodes.filter
+ # make unknown call a fail
+ $ sed -i -e '111s/continue;/{fprintf(stderr, "failed to find %s\\n",buf);rc = 
-1;goto out;}/' debian/tests/src/test-seccomp.c
+ # run this special test and check return value
+ ${ADTTMP}/exe ./debian/tests/data/newcodes.filter /bin/date; echo $?
+ 
+ Without the fix it will fail like:
+ DEBUG: seccomp_load_filters ./debian/tests/data/newcodes.filter
+ failed to find preadv2
+ seccomp_load_filters failed with -1
+ 1
+ 
+ But with the fix applied those new calls will work:
+ DEBUG: seccomp_load_filters ./debian/tests/data/newcodes.filter
+ Tue Feb 12 07:41:05 UTC 2019
+ 0
+ 
  
  [Regression Potential]
  
   * This isn't adding new active code like functions, but only extending
     the definitions of per-arch syscall numbers to be aware of the newer
     syscalls that were added in the kernel. Therefore no old use-cases
     should regress (they are not touched). The only change in behavior for
     an SRU POV would be that things that got denied so far (e.g. if you
     tried to set such a new syscall through libseccomp) was denied before
     and would now work. I think that is exactly the intention of the SRU
     and not a regression.
  
  [Other Info]
  
   * Requested while security reviewing an libseccomp SRU to have one update
     for both [1].
-  * we also missed the former update for kernel 4.9 [3] AND 4.10 [4] as the 
-    official releases of the lib are rather seldom.
+  * we also missed the former update for kernel 4.9 [3] AND 4.10 [4] as the
+    official releases of the lib are rather seldom.
+  * In general there already are build time tests and autopkgtests in the 
+    package already. So coverage of "old calls" for regressions is already 
+    good.
  
  ---
  
  This came up while working on bug 1755250 which asked for statx.
  But on the review of that it was pointed out [1] that it would be great to 
support further new kernel syscall defines - this isn't even looking at HWE 
kernels for Bionic, but "just" adding those which are there for the 4.15 kernel 
Bionic was released with.
  With the HWE kernels in mind there would be even more one might want to add, 
but there is no newer such update in the upstream repo yet.
  
  [1]: 
https://code.launchpad.net/~paelzer/ubuntu/+source/libseccomp/+git/libseccomp/+merge/362906/comments/944418
  [2]: 
https://github.com/seccomp/libseccomp/commit/c842c2f6c203ad9da37ca60219172aa0be68d26a
  [3]: 
https://github.com/seccomp/libseccomp/commit/d9102f12fd39bd77151a1f630fcfc8c80f86c55c
  [4]: 
https://github.com/seccomp/libseccomp/commit/116b3c1a2e1db53cc35b74f30c080f5265faa674

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to libseccomp in Ubuntu.
https://bugs.launchpad.net/bugs/1815415

Title:
  please update libseccomp for newer kernel syscalls

Status in libseccomp package in Ubuntu:
  Fix Released
Status in libseccomp source package in Bionic:
  In Progress
Status in libseccomp source package in Cosmic:
  Fix Released

Bug description:
  [Impact]

   * The libseccomp library provides an easy to use, platform independent,
     interface to the Linux Kernel's syscall filtering mechanism. But it can
     only "control" those syscalls it knows about. Therefore staying up to
     date with newer kernels is a requirement to be fully funcitonal.

   * At the time 18.04 was released with the 4.15 kernel the new definitions
     were not yet released for libseccomp - lets fix this mismatch by
     backporting the new syscall definitions [2][3][4].

  [Test Case]

   * Note: a lot of this is kernel dependent it should work with the
  intended SRU target of Bionic with kernel 4.15 or 4.18, but be careful
  to run it there (e.g. not a LXD container on Xenials 4.4 kernel)

   * we modify the already existing autopkgtest for this SRU
  verification

  # Prep
  $ apt install ubuntu-dev-tools build-essential linux-libc-dev libseccomp-dev 
libseccomp2 seccomp
  $ pull-lp-source libseccomp bionic
  $ cd libseccomp-2.3.1
  $ export ADTTMP=$(mktemp -d); echo $ADTTMP
  # run original tests as-is (should pass/fail as expected)
  $ ./debian/tests/test-filter
  # add new syscalls of this SRU
  $ cp debian/tests/data/safe.filter debian/tests/data/newcodes.filter
  $ printf 
"preadv2\npwritev2\npkey_mprotect\npkey_alloc\npkey_free\nget_tls\ns390_guarded_storage\ns390_sthyi\n"
 >> debian/tests/data/newcodes.filter
  # remove unknown calls (x86 4.18 kernel)
  sed -i -e '/^_exit$/d' -e '/^fstatvfs$/d' -e '/^llseek$/d' -e '/^pread$/d' -e 
'/^pselect$/d' -e '/^pwrite$/d' -e '/^sigtimedwait$/d' -e '/^sigwaitinfo$/d' -e 
'/^statvfs$/d' debian/tests/data/newcodes.filter
  # make unknown call a fail
  $ sed -i -e '111s/continue;/{fprintf(stderr, "failed to find %s\\n",buf);rc = 
-1;goto out;}/' debian/tests/src/test-seccomp.c
  # run this special test and check return value
  ${ADTTMP}/exe ./debian/tests/data/newcodes.filter /bin/date; echo $?

  Without the fix it will fail like:
  DEBUG: seccomp_load_filters ./debian/tests/data/newcodes.filter
  failed to find preadv2
  seccomp_load_filters failed with -1
  1

  But with the fix applied those new calls will work:
  DEBUG: seccomp_load_filters ./debian/tests/data/newcodes.filter
  Tue Feb 12 07:41:05 UTC 2019
  0

  
  [Regression Potential]

   * This isn't adding new active code like functions, but only extending
     the definitions of per-arch syscall numbers to be aware of the newer
     syscalls that were added in the kernel. Therefore no old use-cases
     should regress (they are not touched). The only change in behavior for
     an SRU POV would be that things that got denied so far (e.g. if you
     tried to set such a new syscall through libseccomp) was denied before
     and would now work. I think that is exactly the intention of the SRU
     and not a regression.

  [Other Info]

   * Requested while security reviewing an libseccomp SRU to have one update
     for both [1].
   * we also missed the former update for kernel 4.9 [3] AND 4.10 [4] as the
     official releases of the lib are rather seldom.
   * In general there already are build time tests and autopkgtests in the 
     package already. So coverage of "old calls" for regressions is already 
     good.

  ---

  This came up while working on bug 1755250 which asked for statx.
  But on the review of that it was pointed out [1] that it would be great to 
support further new kernel syscall defines - this isn't even looking at HWE 
kernels for Bionic, but "just" adding those which are there for the 4.15 kernel 
Bionic was released with.
  With the HWE kernels in mind there would be even more one might want to add, 
but there is no newer such update in the upstream repo yet.

  [1]: 
https://code.launchpad.net/~paelzer/ubuntu/+source/libseccomp/+git/libseccomp/+merge/362906/comments/944418
  [2]: 
https://github.com/seccomp/libseccomp/commit/c842c2f6c203ad9da37ca60219172aa0be68d26a
  [3]: 
https://github.com/seccomp/libseccomp/commit/d9102f12fd39bd77151a1f630fcfc8c80f86c55c
  [4]: 
https://github.com/seccomp/libseccomp/commit/116b3c1a2e1db53cc35b74f30c080f5265faa674

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

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

Reply via email to