See below.

> -----Original Message-----
> From: James Morris [mailto:[EMAIL PROTECTED]
> Sent: Monday, September 18, 2006 2:12 PM
> To: Venkat Yekkirala
> Cc: netdev@vger.kernel.org; [EMAIL PROTECTED]; [EMAIL PROTECTED];
> [EMAIL PROTECTED]
> Subject: Re: [PATCH 4/7] secid reconciliation-v02: Invoke LSM hook for
> outbound traffic
> 
> 
> On Fri, 8 Sep 2006, Venkat Yekkirala wrote:
> 
> > -static void secmark_restore(struct sk_buff *skb)
> > +static unsigned int secmark_restore(struct sk_buff *skb, 
> unsigned int
> > hooknum,
> > +                      const struct xt_target *target)
> > {
> > -   if (!skb->secmark) {
> > -           u32 *connsecmark;
> > -           enum ip_conntrack_info ctinfo;
> > +   u32 *psecmark;
> > +   u32 secmark = 0;
> > +   enum ip_conntrack_info ctinfo;
> > 
> > -           connsecmark = nf_ct_get_secmark(skb, &ctinfo);
> > -           if (connsecmark && *connsecmark)
> > -                   if (skb->secmark != *connsecmark)
> > -                           skb->secmark = *connsecmark;
> > -   }
> > +   psecmark = nf_ct_get_secmark(skb, &ctinfo);
> > +   if (psecmark)
> > +           secmark = *psecmark;
> > +
> > +   if (!secmark)
> > +           return XT_CONTINUE;
> > +
> > +   /* Set secmark on inbound and filter it on outbound */
> > +   if (hooknum == NF_IP_POST_ROUTING || hooknum == 
> NF_IP6_POST_ROUTING) {
> > +           if (!security_skb_netfilter_check(skb, secmark))
> > +                   return NF_DROP;
> > +   } else
> > +           if (skb->secmark != secmark)
> > +                   skb->secmark = secmark;
> > +
> > +   return XT_CONTINUE;
> > }
> 
> Quite a lot of logic has changed here.
> 
> With the original code, we only restored a secmark once for 
> the lifetime 
> of a packet or connetcion (to make behavior deterministic and 
> security 
> marks immutable in the face of arbitrarily complex iptables rules).
> 
> With your patch, secmarks are always writable.

Hopefully the following thread addressed these concerns.
http://marc.theaimsgroup.com/?l=selinux&m=115870100405571&w=2

> 
> What about packets on the OUTPUT hook?

I will check for OUTPUT as well as POSTROUTING to kickoff skb_flow_out().

> 
> Also, we did not restore a 'null' (zero) secmark to the skb 
> (while this 
> should never happen with the current SECMARK target, there may be 
> non-SELinux extensions later which set a null marking).

How do you envision this (i.e. resoring a null secmark) being useful?
secmark is anyway zero by default (when no labeling rules exist for the
connection) right?

> 
> Why not just do something like:
> 
> 
>       psecmark = nf_ct_get_secmark(skb, &ctinfo);
>       if (psecmark && *psecmark) {
> 
>               ... core of function ...
> 
>       }
> 
>       return XT_CONTINUE;
> 
> I don't think you need the new secmark variable.

Will do.

> 
> You've also changed the logic for the dummy case of 
> security_skb_netfilter_check()

I am not getting this. This is a new function. Did you mean
to point to a different function?

> 
> 
> +static inline int security_skb_netfilter_check(struct sk_buff *skb,
> +                                       u32 nf_secid)
> +{
> +       return 1;
> +}
> +
> 
> This code does not now behave as it did originally.  Keep in 
> mind that 
> SELinux is not the only user of SECMARK.

Missed this as well (this is a new function in this patch). Please
elaborate.
> 
> (The documentation of the hook in security.h doesn't match 
> the behavior, 
> either -- it's (re-)labeling, not just filtering).

Will fix this.

> 
> I really don't know if connection tracking is the right place 
> to be doing 
> policy enforcment, either.  Perhaps you should just do the 
> relabeling here 
> and enforcement later.

We could have done enforcement, in the SELinux postroute_last
hook for example, if only there were a place to hold onto the
"exit point context", separate from the label already associated
with the skb in the secmark field. postroute_last would need BOTH
the label of the skb (available in the secmark field) and the
"exit point context" to do enforcement.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to