After discussions in IRC, it was determined that this is expected
behavior and that the test should be modified to remove the getopt
permission from the list of server permissions.

The unix_socket test program calls getsockopt() after calling bind().
Because AppArmor continues to use traditional file rules for sockets
bound to a filesystem path, it does not mediate some socket operations
after the socket has been bound to the filesystem path and, as it turns
out, the getopt permission is one of those socket operations.

In the future, AppArmor plans to support specifying filesystem pathnames
in the addr conditional of unix rules. This would allow the unix rule
type to be used with pathname, abstract, and unnamed AF_UNIX sockets. At
that time, getopt and other socket operations could be mediated even for
bound pathname AF_UNIX sockets.

** Changed in: linux (Ubuntu)
       Status: Confirmed => Invalid

** Changed in: linux (Ubuntu)
     Assignee: John Johansen (jjohansen) => (unassigned)

** Also affects: apparmor
   Importance: Undecided
       Status: New

** Changed in: apparmor
       Status: New => In Progress

** Changed in: apparmor
   Importance: Undecided => Medium

** Changed in: apparmor
     Assignee: (unassigned) => Tyler Hicks (tyhicks)

** Changed in: apparmor
    Milestone: None => 2.9.0

-- 
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/1375516

Title:
  unix_socket_pathname.sh confined server stream/seqpacket missing
  getopt test fails

Status in AppArmor Linux application security framework:
  Fix Committed
Status in “linux” package in Ubuntu:
  Invalid

Bug description:
  The AF_UNIX pathname stream and seqpacket tests are not failing when
  the server program is missing the getopt unix permission. Note that
  the dgram version of this test fails as expected. This suggests some
  type of difference in the mediation of getsockopt() between connected
  and connectionless sockets.

  Note that you need a branch of lp:apparmor at r2715 or newer to
  reproduce this failure.

  * The test failures:

  Error: unix_socket passed. Test 'AF_UNIX pathname socket (stream);
  confined server w/ a missing af_unix access (getopt)' was expected to
  'fail'

  Error: unix_socket passed. Test 'AF_UNIX pathname socket (seqpacket);
  confined server w/ a missing af_unix access (getopt)' was expected to
  'fail'

  * The profile (note the missing getopt permission):

  /home/tyhicks/apparmor.git/tests/regression/apparmor/unix_socket {
    /etc/ld.so.cache r,
    /proc/*/attr/current w,
    /dev/urandom r,
    /home/tyhicks/apparmor.git/tests/regression/apparmor/unix_socket rix,
    /lib/x86_64-linux-gnu/libpthread-2.19.so mr,
    /lib/x86_64-linux-gnu/libc-2.19.so mr,
    /lib/x86_64-linux-gnu/ld-2.19.so rix,
    /tmp/sdtest.18777-31595-M5yfgv/output.unix_socket w,
    /tmp/sdtest.18777-31595-M5yfgv/aa_sock rw,
    unix (create,,setopt),
    /home/tyhicks/apparmor.git/tests/regression/apparmor/unix_socket_client Ux,
  }

  I've attached the strace output of the test run to show that the
  unix_socket program does successfully call getsockopt().

To manage notifications about this bug go to:
https://bugs.launchpad.net/apparmor/+bug/1375516/+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