On Sun, Oct 01, 2006 at 02:27:13AM -0400, James Morris ([EMAIL PROTECTED])
wrote:
> Please review this patch carefully. It addresses a couple of issues.
>
> When a security module is loaded (in this case, SELinux), the
> security_xfrm_policy_lookup() hook can return an access denied permission
> (or other error). We were not handling that correctly, and in fact
> inverting the return logic and propagating a false "ok" back up to
> xfrm_lookup(), which then allowed packets to pass as if they were not
> associated with an xfrm policy.
>
> The way I was seeing the problem was when connecting via IPsec to a
> confined service on an SELinux box (vsftpd), which did not have the
> appropriate SELinux policy permissions to send packets via IPsec.
>
> The first SYNACK would be blocked, because of an uncached lookup via
> flow_cache_lookup(), which would fail to resolve an xfrm policy because
> the SELinux policy is checked at that point via the resolver.
>
> However, retransmitted SYNACKs would then find a cached flow entry when
> calling into flow_cache_lookup() with a null xfrm policy, which is
> interpreted by xfrm_lookup() as the packet not having any associated
> policy and similarly to the first case, allowing it to pass without
> transformation.
>
> The solution presented here is to first ensure that errno values are
> correctly propagated all the way back up through the various call chains
> from security_xfrm_policy_lookup(), and handled correctly.
>
> Then, flow_cache_lookup() is modified, so that if the policy resolver
> fails (typically a permission denied via the security module), the flow
> cache entry is killed rather than having a null policy assigned (which
> indicates that the packet can pass freely). This also forces any future
> lookups for the same flow to consult the security module (e.g. SELinux)
> for current security policy (rather than, say, caching the error on the
> flow cache entry).
>
> I've done quite a bit of testing and not seen any problems, although the
> patch could certainly do with further review.
>
> Evgeniy, please let me know if this fixes your problem.
With that patch applied I got kernel panic after some time.
Unfortunately I have not installed serial console, so the most
interesting bits of the stack dump are not visible.
Here is the last ones which are on the screen:
ip_rcv
ip_rcv_finish
packet_rcv_spkt
ip_rcv
netif_receive_skb
sys_accept
skge_poll
and some other uninteresting stuff like hrtimer, softirq and the like...
EIP is at xfrm_lookup+0x43d/0x470
Notice packet socket handler in the trace, may be it can help - I ran
system with tcpdump started.
--
Evgeniy Polyakov
-
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