[apparmor] query_label regression test failures
John Johansen
john.johansen at canonical.com
Mon Jul 13 06:55:53 UTC 2015
On 07/12/2015 08:36 PM, Tyler Hicks wrote:
> On 2015-07-11 12:04:37, John Johansen wrote:
>> On 06/25/2015 11:55 AM, Tyler Hicks wrote:
>>> On 2015-06-25 01:21:39, Steve Beattie wrote:
>>>> Hi,
>>>>
>>>> When running the apparmor regression tests on wily with the trunk of
>>>> the userspace tools, I'm getting the following two failures in the
>>>> query_label test:
>>>>
>>>> Error: query_label failed. Test 'QUERY file (all base perms #1)' was expected to 'pass'. Reason for failure 'FAIL: the access should not be allowed and should be audited'
>>>> Error: query_label failed. Test 'QUERY file (all base perms #2)' was expected to 'pass'. Reason for failure 'FAIL: the access should not be allowed and should be audited'
>>>
>>> Note that the test passes when we run them against the wily apparmor
>>> userspace (2.9.2-0ubuntu1). Seems to be something broken specifically in
>>> trunk.
>>>
>> So after further investigation there are a couple of problems.
>
> Thanks for looking into this. I was lost and wasn't sure what the
> solution was. :)
>
>>
>> 1. The test is using the wrong defines: It is using the defines from the
>> parser for the packed dfa permissions. This set of permissions is not
>> meant to be exposed to the outside world
>>
>> 2. The kernel is using the wrong mapping function for the permissions
>> in the file class. This results in partially exposing the packed
>> permissions, but even then it doesn't fully line up with the packed
>> permissions, and is not correct for several of the potential permissions.
>
> Is the kernel only using the wrong mapping function for behind the query
> interface or is it using the wrong mapping function in other areas too?
>
It is only using the wrong mapping on the interface
>>
>>
>> Attached is a patch that fixes the test, and moves the two tests that
>> fail due to the kernel to xpass.
>
> Can the 'xpass' tests be moved back to 'pass' once the kernel fix is in
> place?
>
yes, and we will make sure to add some extra info to the exported
abi/features so this bug can be detected from user space and we can be
confident the fix is in place.
>>
>> ---
>>
>> === modified file 'tests/regression/apparmor/query_label.c'
>> --- tests/regression/apparmor/query_label.c 2015-05-28 19:48:46 +0000
>> +++ tests/regression/apparmor/query_label.c 2015-07-10 20:45:07 +0000
>> @@ -35,28 +35,68 @@
>> #define AA_MAY_APPEND (1 << 3)
>> #endif
>>
>> +#ifndef AA_MAY_CREATE
>> +#define AA_MAY_CREATE (1 << 4)
>> +#endif
>> +
>> +#ifndef AA_MAY_DELETE
>> +#define AA_MAY_DELETE (1 << 5)
>> +#endif
>> +
>> +#ifndef AA_MAY_OPEN
>> +#define AA_MAY_OPEN (1 << 6)
>> +#endif
>> +
>> +#ifndef AA_MAY_RENAME
>> +#define AA_MAY_RENAME (1 << 7)
>> +#endif
>> +
>> +#ifndef AA_MAY_SETATTR
>> +#define AA_MAY_SETATTR (1 << 8)
>> +#endif
>> +
>> +#ifndef AA_MAY_GETATTR
>> +#define AA_MAY_GETATTR (1 << 9)
>> +#endif
>> +
>> +#ifndef AA_MAY_SETCRED
>> +#define AA_MAY_SETCRED (1 << 10)
>> +#endif
>> +
>> +#ifndef AA_MAY_GETCRED
>> +#define AA_MAY_GETCRED (1 << 11)
>> +#endif
>> +
>> +#ifndef AA_MAY_CHMOD
>> +#define AA_MAY_CHMOD (1 << 12)
>> +#endif
>> +
>> +#ifndef AA_MAY_CHOWN
>> +#define AA_MAY_CHOWN (1 << 13)
>> +#endif
>> +
>> +#ifndef AA_MAY_LCOK
>
> There's a typo in the line above. _LCOK -> _LOCK
>
> With that fixed,
>
> Acked-by: Tyler Hicks <tyhicks at canonical.com>
>
> Thanks again!
>
> Tyler
>
>> +#define AA_MAY_LOCK 0x8000
>> +#endif
>> +
>> +#ifndef AA_EXEC_MMAP
>> +#define AA_EXEC_MMAP 0x10000
>> +#endif
>> +
>> #ifndef AA_MAY_LINK
>> -#define AA_MAY_LINK (1 << 4)
>> -#endif
>> -
>> -#ifndef AA_MAY_LOCK
>> -#define AA_MAY_LOCK (1 << 5)
>> -#endif
>> -
>> -#ifndef AA_EXEC_MMAP
>> -#define AA_EXEC_MMAP (1 << 6)
>> -#endif
>> -
>> -#ifndef AA_EXEC_PUX
>> -#define AA_EXEC_PUX (1 << 7)
>> -#endif
>> -
>> -#ifndef AA_EXEC_UNSAFE
>> -#define AA_EXEC_UNSAFE (1 << 8)
>> -#endif
>> -
>> -#ifndef AA_EXEC_INHERIT
>> -#define AA_EXEC_INHERIT (1 << 9)
>> +#define AA_MAY_LINK 0x40000
>> +#endif
>> +
>> +#ifndef AA_LINK_SUBSET /* overlayed perm in pair */
>> +#define AA_LINK_SUBSET AA_MAY_LOCK
>> +#endif
>> +
>> +#ifndef AA_MAY_ONEXEC
>> +#define AA_MAY_ONEXEC 0x20000000
>> +#endif
>> +
>> +#ifndef AA_MAY_CHANGE_PROFILE
>> +#define AA_MAY_CHANGE_PROFILE 0x40000000
>> #endif
>>
>> static char *progname = NULL;
>> @@ -148,18 +188,26 @@
>> *mask |= AA_MAY_READ;
>> else if (!strcmp(perm, "append"))
>> *mask |= AA_MAY_APPEND;
>> + else if (!strcmp(perm, "create"))
>> + *mask |= AA_MAY_CREATE;
>> + else if (!strcmp(perm, "delete"))
>> + *mask |= AA_MAY_DELETE;
>> + else if (!strcmp(perm, "setattr"))
>> + *mask |= AA_MAY_SETATTR;
>> + else if (!strcmp(perm, "getattr"))
>> + *mask |= AA_MAY_GETATTR;
>> + else if (!strcmp(perm, "chmod"))
>> + *mask |= AA_MAY_CHMOD;
>> + else if (!strcmp(perm, "chown"))
>> + *mask |= AA_MAY_CHOWN;
>> else if (!strcmp(perm, "link"))
>> *mask |= AA_MAY_LINK;
>> else if (!strcmp(perm, "lock"))
>> *mask |= AA_MAY_LOCK;
>> + else if (!strcmp(perm, "linksubset"))
>> + *mask |= AA_LINK_SUBSET;
>> else if (!strcmp(perm, "exec_mmap"))
>> *mask |= AA_EXEC_MMAP;
>> - else if (!strcmp(perm, "exec_pux"))
>> - *mask |= AA_EXEC_PUX;
>> - else if (!strcmp(perm, "exec_unsafe"))
>> - *mask |= AA_EXEC_UNSAFE;
>> - else if (!strcmp(perm, "exec_inherit"))
>> - *mask |= AA_EXEC_INHERIT;
>> else {
>> fprintf(stderr, "FAIL: unknown perm: %s\n", perm);
>> return 1;
>> @@ -264,8 +312,8 @@
>> (allowed == should_allow && audited == should_audit)) {
>> printf("PASS\n");
>> } else {
>> - fprintf(stderr, "FAIL: the access should %sbe allowed and should %sbe audited\n",
>> - allowed ? "" : "not ", audited ? "" : "not ");
>> + fprintf(stderr, "FAIL: the access should %sbe allowed and should %sbe audited. mask 0x%x\n",
>> + allowed ? "" : "not ", audited ? "" : "not ", mask);
>> exit(1);
>> }
>>
>>
>> === modified file 'tests/regression/apparmor/query_label.sh'
>> --- tests/regression/apparmor/query_label.sh 2015-05-28 19:48:53 +0000
>> +++ tests/regression/apparmor/query_label.sh 2015-07-11 18:54:55 +0000
>> @@ -212,9 +212,9 @@
>>
>> genqueryprofile "file,"
>> expect allow
>> -perms file exec,write,read,append,link,lock
>> -querytest "QUERY file (all base perms #1)" pass /anything
>> -querytest "QUERY file (all base perms #2)" pass /everything
>> +perms file exec,write,read,append,create,delete,setattr,getattr,chmod,chown,link,linksubset,lock,exec_mmap
>> +querytest "QUERY file (all base perms #1)" xpass /anything
>> +querytest "QUERY file (all base perms #2)" xpass /everything
>>
>> genqueryprofile "/etc/passwd r,"
>> expect allow
>>
More information about the AppArmor
mailing list