]> www.infradead.org Git - users/jedix/linux-maple.git/commit
smack: recognize ipv4 CIPSO w/o categories
authorKonstantin Andreev <andreev@swemel.ru>
Thu, 16 Jan 2025 23:40:34 +0000 (02:40 +0300)
committerCasey Schaufler <casey@schaufler-ca.com>
Sun, 16 Feb 2025 22:17:55 +0000 (14:17 -0800)
commita158a937d864d0034fea14913c1f09c6d5f574b8
tree68e06ccc84ba68b508ffc8e57d8a2cf45c78f949
parentc7fb50cecff9cad19fdac5b37337eae4e42b94c7
smack: recognize ipv4 CIPSO w/o categories

If SMACK label has CIPSO representation w/o categories, e.g.:

| # cat /smack/cipso2
| foo  10
| @ 250/2
| ...

then SMACK does not recognize such CIPSO in input ipv4 packets
and substitues '*' label instead. Audit records may look like

| lsm=SMACK fn=smack_socket_sock_rcv_skb action=denied
|   subject="*" object="_" requested=w pid=0 comm="swapper/1" ...

This happens in two steps:

1) security/smack/smackfs.c`smk_set_cipso
   does not clear NETLBL_SECATTR_MLS_CAT
   from (struct smack_known *)skp->smk_netlabel.flags
   on assigning CIPSO w/o categories:

| rcu_assign_pointer(skp->smk_netlabel.attr.mls.cat, ncats.attr.mls.cat);
| skp->smk_netlabel.attr.mls.lvl = ncats.attr.mls.lvl;

2) security/smack/smack_lsm.c`smack_from_secattr
   can not match skp->smk_netlabel with input packet's
   struct netlbl_lsm_secattr *sap
   because sap->flags have not NETLBL_SECATTR_MLS_CAT (what is correct)
   but skp->smk_netlabel.flags have (what is incorrect):

| if ((sap->flags & NETLBL_SECATTR_MLS_CAT) == 0) {
|  if ((skp->smk_netlabel.flags &
|   NETLBL_SECATTR_MLS_CAT) == 0)
|  found = 1;
|  break;
| }

This commit sets/clears NETLBL_SECATTR_MLS_CAT in
skp->smk_netlabel.flags according to the presense of CIPSO categories.
The update of smk_netlabel is not atomic, so input packets processing
still may be incorrect during short time while update proceeds.

Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
security/smack/smackfs.c