Smack: ipv6 label match fix
authorCasey Schaufler <casey@schaufler-ca.com>
Tue, 8 Nov 2016 03:01:09 +0000 (19:01 -0800)
committerCasey Schaufler <casey@schaufler-ca.com>
Thu, 10 Nov 2016 19:22:18 +0000 (11:22 -0800)
The check for a deleted entry in the list of IPv6 host
addresses was being performed in the wrong place, leading
to most peculiar results in some cases. This puts the
check into the right place.

Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
security/smack/smack_lsm.c

index f7ee77c3db555cbd41c083f576b58ea2428775e0..b2c839f735c0dd5ae1e9f1db40ccb0fec1d026f3 100644 (file)
@@ -2443,18 +2443,18 @@ static struct smack_known *smack_ipv6host_label(struct sockaddr_in6 *sip)
                return NULL;
 
        list_for_each_entry_rcu(snp, &smk_net6addr_list, list) {
+               /*
+                * If the label is NULL the entry has
+                * been renounced. Ignore it.
+                */
+               if (snp->smk_label == NULL)
+                       continue;
                /*
                * we break after finding the first match because
                * the list is sorted from longest to shortest mask
                * so we have found the most specific match
                */
                for (found = 1, i = 0; i < 8; i++) {
-                       /*
-                        * If the label is NULL the entry has
-                        * been renounced. Ignore it.
-                        */
-                       if (snp->smk_label == NULL)
-                               continue;
                        if ((sap->s6_addr16[i] & snp->smk_mask.s6_addr16[i]) !=
                            snp->smk_host.s6_addr16[i]) {
                                found = 0;