From: James Morris Date: Sun, 9 Jan 2011 22:46:24 +0000 (+1100) Subject: Merge branch 'master' into next X-Git-Tag: v2.6.38-rc1~429^2~1 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Flinux.git;a=commitdiff_plain;h=d2e7ad19229f982fc1eb731827d82ceac90abfb3 Merge branch 'master' into next Conflicts: security/smack/smack_lsm.c Verified and added fix by Stephen Rothwell Ok'd by Casey Schaufler Signed-off-by: James Morris --- d2e7ad19229f982fc1eb731827d82ceac90abfb3 diff --cc security/smack/smack_lsm.c index 05dc4da2e25f,ccb71a044a1a..533bf3255d7f --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@@ -2534,21 -2415,17 +2534,21 @@@ static int smack_setprocattr(struct tas * Return 0 if a subject with the smack of sock could access * an object with the smack of other, otherwise an error code */ - static int smack_unix_stream_connect(struct socket *sock, - struct socket *other, struct sock *newsk) + static int smack_unix_stream_connect(struct sock *sock, + struct sock *other, struct sock *newsk) { - struct socket_smack *ssp = sock->sk->sk_security; - struct socket_smack *osp = other->sk->sk_security; - struct inode *sp = SOCK_INODE(sock->sk_socket); - struct inode *op = SOCK_INODE(other->sk_socket); ++ struct socket_smack *ssp = sock->sk_security; ++ struct socket_smack *osp = other->sk_security; struct smk_audit_info ad; + int rc = 0; smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_NET); - smk_ad_setfield_u_net_sk(&ad, other->sk); + smk_ad_setfield_u_net_sk(&ad, other); - return smk_access(smk_of_inode(sp), smk_of_inode(op), - MAY_READWRITE, &ad); + + if (!capable(CAP_MAC_OVERRIDE)) + rc = smk_access(ssp->smk_out, osp->smk_in, MAY_WRITE, &ad); + + return rc; } /**