Skip to contentSkip to conversation

selinux: xfrm - notify users on dropped packets

PATCH In review Paul Moore 3 participants 6 messages Feb 23, 2011 – Feb 25, 2011 2 messages not in the archive SELinux security module

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): [email protected]

Paul Moore

author
#2 lore raw
Quoted 8 lines · Steffen Klassert

In selinux_xfrm_state_pol_flow_match we have cases where we drop packets without asking the avc. No audit message is generated in this case. Lets at least print out a message to the logs, so the users don't need to dig in the code to find out why these packets are dropped.

Quoted 8 lines

---

Paul,

I removed the exclamation marks and I changed this one
to print a message too if the flow label does not match the SA label. I kept your ACK on this one, I hope it is ok.
If not please complain.

I still see the exclamation marks in the patch below; perhaps you sent the wrong version by mistake?

Also, as far as keeping ACKs on modified patches, I think it is okay as long as you are just porting a patch, e.g. minor changes necessary so that the patch applies to the current stable kernel. If you have to do anything beyond that, I would appreciate it if you could drop my ACK; I don't have a problem with re-reviewing patches and re-ACKing them if they look okay.

Quoted 8 lines
 security/selinux/xfrm.c |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)
security/selinux/xfrm.c +0 -0
index 728c57e..0062613 100644

security/selinux/xfrm.c int selinux_xfrm_state_pol_flow_match(struct · line 123

Quoted 8 lines
security/selinux/xfrm.c +3 -2
@@ -118,25 +118,33 @@ int selinux_xfrm_state_pol_flow_match(struct
 xfrm_state *x, struct xfrm_policy * int rc;
 
 	if (!xp->security)
-		if (x->security)
-			/* unlabeled policy and labeled SA can't match */
+		if (x->security) {
+			if (net_ratelimit())
+				printk("selinux: unlabeled policy and labeled SA can't 

match!\n");

security/selinux/xfrm.c int selinux_xfrm_state_pol_flow_match(struct · line 131

Quoted 11 lines
security/selinux/xfrm.c +4 -3
 			return 0;
-		else
+		} else
 			/* unlabeled policy and unlabeled SA match all flows */
 			return 1;
 	else
-		if (!x->security)
-			/* unlabeled SA and labeled policy can't match */
+		if (!x->security) {
+			if (net_ratelimit())
+				printk("selinux: unlabeled SA and labeled policy can't 

match!\n");

Quoted 13 lines
security/selinux/xfrm.c +6 -3
 			return 0;
-		else
-			if (!selinux_authorizable_xfrm(x))
-				/* Not a SELinux-labeled SA */
+		} else {
+			if (!selinux_authorizable_xfrm(x)) {
+				if (net_ratelimit())
+					printk("selinux: Not a SELinux-labeled SA!\n");
 				return 0;
+			}
+		}
 
 	state_sid = x->security->ctx_sid;

security/selinux/xfrm.c int selinux_xfrm_state_pol_flow_match(struct · line 150

Quoted 10 lines
security/selinux/xfrm.c +4 -1
 
-	if (fl->secid != state_sid)
+	if (fl->secid != state_sid) {
+		if (net_ratelimit())
+			printk("selinux: Flow label does not match SA label!\n");
 		return 0;
+	}
 
 	rc = avc_has_perm(fl->secid, state_sid, SECCLASS_ASSOCIATION,
 			  ASSOCIATION__SENDTO,

--
paul moore
linux @ hp

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#3 lore raw
Quoted 4 lines · Paul Moore

I still see the exclamation marks in the patch below; perhaps you sent the wrong version by mistake?

Argh, yes. I'll update the git branch and resend the patch.

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#4 lore raw

PATCH v2 4/4 selinux: xfrm - notify users on dropped packets

In reply to Paul Moore

In selinux_xfrm_state_pol_flow_match we have cases where we drop packets without asking the avc. No audit message is generated in this case. Lets at least print out a message to the logs, so the users don't need to dig in the code to find out why these packets are dropped.

---
 security/selinux/xfrm.c |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)
security/selinux/xfrm.c +17 -9
index 728c57e..b0dd401 100644
@@ -118,25 +118,33 @@ int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x, struct xfrm_policy *
 	int rc;
 
 	if (!xp->security)
-		if (x->security)
-			/* unlabeled policy and labeled SA can't match */
+		if (x->security) {
+			if (net_ratelimit())
+				printk("selinux: unlabeled policy and labeled SA can't match\n");
 			return 0;
-		else
+		} else
 			/* unlabeled policy and unlabeled SA match all flows */
 			return 1;
 	else
-		if (!x->security)
-			/* unlabeled SA and labeled policy can't match */
+		if (!x->security) {
+			if (net_ratelimit())
+				printk("selinux: unlabeled SA and labeled policy can't match\n");
 			return 0;
-		else
-			if (!selinux_authorizable_xfrm(x))
-				/* Not a SELinux-labeled SA */
+		} else {
+			if (!selinux_authorizable_xfrm(x)) {
+				if (net_ratelimit())
+					printk("selinux: Not a SELinux-labeled SA\n");
 				return 0;
+			}
+		}
 
 	state_sid = x->security->ctx_sid;
 
-	if (fl->secid != state_sid)
+	if (fl->secid != state_sid) {
+		if (net_ratelimit())
+			printk("selinux: Flow label does not match SA label\n");
 		return 0;
+	}
 
 	rc = avc_has_perm(fl->secid, state_sid, SECCLASS_ASSOCIATION,
 			  ASSOCIATION__SENDTO,
Signature · 7 lines
1.7.0.4


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to [email protected] with
the words "unsubscribe selinux" without quotes as the message.
#5 lore raw

All printk() statement require a KERN_*. I've often heard upstream people say that every printk should only be printed if you expect the user to do something with it. If it doesn't give the user enough information to fix whatever the problem is, or know how to fix whatever the problem is, it's a bad printk. I don't know this code at all, but I'm pretty sure if I got those printk's I'd just feel dumb....

-Eric

Quoted 61 lines · Steffen Klassert

In selinux_xfrm_state_pol_flow_match we have cases where we drop packets without asking the avc. No audit message is generated in this case. Lets at least print out a message to the logs, so the users don't need to dig in the code to find out why these packets are dropped.

---
 security/selinux/xfrm.c |   26 +++++++++++++++++---------

 1 files changed, 17 insertions(+), 9 deletions(-)
security/selinux/xfrm.c +4 -3
index 728c57e..b0dd401 100644
@@ -118,25 +118,33 @@ int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x, struct xfrm_policy *
        int rc;
 
        if (!xp->security)
-               if (x->security)
-                       /* unlabeled policy and labeled SA can't match */
+               if (x->security) {
+                       if (net_ratelimit())
+                               printk("selinux: unlabeled policy and labeled SA can't match\n");
                        return 0;
-               else
+               } else
                        /* unlabeled policy and unlabeled SA match all flows */
                        return 1;

       else
-               if (!x->security)
-                       /* unlabeled SA and labeled policy can't match */
+               if (!x->security) {
+                       if (net_ratelimit())
+                               printk("selinux: unlabeled SA and labeled policy can't match\n"); return 0;
-               else
-                       if (!selinux_authorizable_xfrm(x))
-                               /* Not a SELinux-labeled SA */
+               } else {
+                       if (!selinux_authorizable_xfrm(x)) {
+                               if (net_ratelimit())
+                                       printk("selinux: Not a SELinux-labeled SA\n"); return 0;
+                       }
+               }

       state_sid = x->security->ctx_sid;

-       if (fl->secid != state_sid)
+       if (fl->secid != state_sid) {
+               if (net_ratelimit())
+                       printk("selinux: Flow label does not match SA label\n"); return 0;
+       }

       rc = avc_has_perm(fl->secid, state_sid, SECCLASS_ASSOCIATION, ASSOCIATION__SENDTO,
--
1.7.0.4

Quoted 5 lines

--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#6 lore raw
Quoted 8 lines · Eric Paris

All printk() statement require a KERN_*. I've often heard upstream people say that every printk should only be printed if you expect the user to do something with it. If it doesn't give the user enough information to fix whatever the problem is, or know how to fix whatever the problem is, it's a bad printk. I don't know this code at all, but I'm pretty sure if I got those printk's I'd just feel dumb....

The problem with this patch is, that it was one of my debugging patches when I tried to find out why my packets are dropped. It was not contemplated to push it upstream when I wrote it. Then I thought it would be good to print out a message if these packets are dropped and I picked the patch from my debugging branch, which was a bad idea. I think we should drop this patch entirely and focus on the remaining 3 paches for now, as they are real fixes. So I could resend the remaining patches for another round of review, or does anybody want to thake them as they are?

Steffen

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#7 lore raw

Patches 1-3 have been committed to
http://git.infradead.org/users/eparis/selinux.git

thanks!

-Eric

Quoted 20 lines · Steffen Klassert
Quoted 8 lines · Eric Paris

All printk() statement require a KERN_*.  I've often heard upstream people say that every printk should only be printed if you expect the user to do something with it.  If it doesn't give the user enough information to fix whatever the problem is, or know how to fix whatever the problem is, it's a bad printk.  I don't know this code at all, but I'm pretty sure if I got those printk's I'd just feel dumb....

The problem with this patch is, that it was one of my debugging patches when I tried to find out why my packets are dropped. It was not contemplated to push it upstream when I wrote it. Then I thought it would be good to print out a message if these packets are dropped and I picked the patch from my debugging branch, which was a bad idea. I think we should drop this patch entirely and focus on the remaining 3 paches for now, as they are real fixes. So I could resend the remaining patches for another round of review, or does anybody want to thake them as they are?

Quoted 2 lines

Steffen

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.