Chinh Nguyen wrote:
> I discovered that the "bug" is in the function tcp_v4_rcv for kernel 
> 2.6.16-rc1.
> 
> After the ESP packet is decapped and decrypted in xfrm4_rcv_encap_finish, the
> unencrypted packet is pushed back through ip_local_deliver. For a UDP packet, 
> it
> goes (back) to function udp_queue_rcv_skb. The first thing this function does 
> is
> called xfrm4_policy_check. As noted previously, in xfrm4_policy_check, if the
> skb->sp != NULL, the esp_post_input function is called. The post input 
> function
> sets skb->ip_summed to CHECKSUM_UNNECESSASRY if we are in transport mode.
> Therefore, further down in udp_queue_rcv_skb, we skip the checksum check and 
> the
> packet is passed up the stack.
> 
> However, for a decrypted TCP packet, the packet goes to tcp_v4_rcv. This
> function does the checksum check right away if skb->ip_summed !=
> CHECKSUM_UNNECESSARY while xfrm4_policy_check is called a little later in the
> function. Therefore, the esp post input has not yet set the ip_summed to
> unnecessary. The decrypted packet fails the checksum and is discarded.
> 
> To confirm this, I added another call to xfrm4_policy_check before the 
> checksum
> check in tcp_v4_rcv (to call esp post input). Once patched, my systems were 
> able
> to initiate TCP connections using Transport Mode/NAT.

What values does skb->ip_summed have before that?
-
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