Skip to content

Commit

Permalink
Smack: Assign smack_known_web as default smk_in label for kernel thre…
Browse files Browse the repository at this point in the history
…ad's socket

This change fixes the bug associated with sockets owned by kernel threads. These
sockets, created usually by network devices' drivers tasks, received smk_in
label from the task that created them - the "floor" label in the most cases. The
result was that they were not able to receive data packets because of missing
smack rules. The main reason of the access deny is that the socket smk_in label
is placed as the object during smk check, kernel thread's capabilities are
omitted.

Signed-off-by: Marcin Lis <[email protected]>
  • Loading branch information
MarcinLis authored and cschaufler committed Mar 23, 2015
1 parent 74f0414 commit 7412301
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion security/smack/smack_lsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2452,7 +2452,21 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
static int smack_socket_post_create(struct socket *sock, int family,
int type, int protocol, int kern)
{
if (family != PF_INET || sock->sk == NULL)
struct socket_smack *ssp;

if (sock->sk == NULL)
return 0;

/*
* Sockets created by kernel threads receive web label.
*/
if (unlikely(current->flags & PF_KTHREAD)) {
ssp = sock->sk->sk_security;
ssp->smk_in = &smack_known_web;
ssp->smk_out = &smack_known_web;
}

if (family != PF_INET)
return 0;
/*
* Set the outbound netlbl.
Expand Down

0 comments on commit 7412301

Please sign in to comment.