[patch][trusty] Revert "UBUNTU: SAUCE: apparmor: fix unix domain sockets to be mediated on connection"

John Johansen john.johansen at canonical.com
Tue Jan 28 11:25:46 UTC 2014


On 01/28/2014 03:08 AM, Tim Gardner wrote:
> On 01/28/2014 10:42 AM, John Johansen wrote:
>> This reverts commit 059c1f0963799ae6ac778863a82ba117e8041b54.
>>
>> http://bugs.launchpad.net/bugs/1270215
>>
>> Precise policy was not setup to deal with mediation of unix domain
>> sockets at connection, as such this patch causes policy failures on
>> precise. This bug could be fixed by updating policy but that would
>> still cause custom policy to break, so as with lts-saucy this feature
>> should be removed for lts-trusty on precise.
>>
>> Signed-off-by: John Johansen <john.johansen at canonical.com>
>> ---
>>   security/apparmor/lsm.c | 48 ++++++++++++------------------------------------
>>   1 file changed, 12 insertions(+), 36 deletions(-)
>>
>> diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
>> index b83e92b..b320317 100644
>> --- a/security/apparmor/lsm.c
>> +++ b/security/apparmor/lsm.c
>> @@ -787,29 +787,10 @@ do { \
>>   // sk->sk_socket is NULL when orphaned/being shutdown
>>   // socket->sk set on graft, and sock_init_data if (socket exists)
>>
>> -#define UNIX_ANONYMOUS(U) (!unix_sk(U)->addr)
>> -#define UNIX_FS(U) (!UNIX_ANONYMOUS(U) && unix_sk(U)->addr->name->sun_path[0])
>> -
>> -static int unix_fs_perm(int op, struct aa_label *label, struct sock *sk,
>> -            u32 mask)
>> -{
>> -    if (!unconfined(label) && UNIX_FS(sk)) {
>> -        struct unix_sock *u = unix_sk(sk);
>> -
>> -        /* the sunpath may not be valid for this ns so use the path */
>> -        struct path_cond cond = { u->path.dentry->d_inode->i_uid,
>> -                      u->path.dentry->d_inode->i_mode
>> -        };
>> -
>> -        return aa_path_perm(op, label, &u->path, 0, mask, &cond);
>> -    }
>> -    return 0;
>> -}
>> -
>>   /**
>>    * apparmor_unix_stream_connect - check perms before making unix domain conn
>>    *
>> - * other is locked when this hook is called
>> + * only used for alt unix socket namespace ???
>>    */
>>   static int apparmor_unix_stream_connect(struct sock *sock, struct sock *other,
>>                       struct sock *newsk)
>> @@ -817,16 +798,16 @@ static int apparmor_unix_stream_connect(struct sock *sock, struct sock *other,
>>       struct aa_sk_cxt *sock_cxt = SK_CXT(sock);
>>       struct aa_sk_cxt *other_cxt = SK_CXT(other);
>>       struct aa_sk_cxt *new_cxt = SK_CXT(newsk);
>> -    struct aa_label *label = __aa_get_current_label();
>>
>> -    int error = unix_fs_perm(OP_CONNECT, label, other,
>> -                 MAY_READ | MAY_WRITE);
>> -    __aa_put_current_label(label);
>>
>> -    if (error)
>> +#if 0
>> +    if (!perms to connect sock to other)
>> +
>>           return error;
>> +#endif
>>
>> -    /* Cross reference the peer labels for SO_PEERSEC */
>> +// ??? label not updated after connection??? it would be good if the label
>> +// was updated as the task labeling is updated
>>       if (new_cxt->peer) {
>>           //printk("%s: new_cxt->peer\n", __FUNCTION__);
>>           aa_put_label(new_cxt->peer);
>> @@ -849,21 +830,16 @@ static int apparmor_unix_stream_connect(struct sock *sock, struct sock *other,
>>   /**
>>    * apparmor_unix_may_send - check perms before conn or sending unix dgrams
>>    *
>> - * other is locked when this hook is called
>> + * Only used for alt unix socket namespace ????
>>    */
>>   static int apparmor_unix_may_send(struct socket *sock, struct socket *other)
>>   {
>> -    struct aa_sk_cxt *other_cxt = SK_CXT(other->sk);
>> -    struct aa_label *label = __aa_get_current_label();
>> -    int e, error ;
>> +  //  ??? how do these play in with regular perm checks, conditional?
>>
>> -    error = unix_fs_perm(OP_SENDMSG, label, other->sk, MAY_WRITE);
>> -    e = unix_fs_perm(OP_SENDMSG, other_cxt->label, sock->sk, MAY_READ);
>> -    if (e)
>> -        error = e;
>> -    __aa_put_current_label(label);
>> +//    print_sk(sock->sk);
>> +//    print_sk(other->sk);
>>
>> -    return error;
>> +    return 0;
>>   }
>>
>>   /**
>>
> 
> John - I assume this is really intended for application against the LTS branch only ? Is there a simpler patch such as a config option that is only turned on for the LTS version ? That way I don't have to carry a big delta between mainline and the LTS rebase.
> 
sorry yes, this is meant for lts-trust on precise

There is not a config option to disable this in the code atm. For the next sync of apparmor to trusty I can include a config option to disable new features that are not detected via policy load.





More information about the kernel-team mailing list