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