I've found the patch that broke this. It's in 2.1.11 to
net/ipv4/ip_forward.c. I've appended it.
Removing it cures the problem. But the question is of course
what is the right fix?
-- Debian GNU/Linux 1.1 is out! { http://www.debian.org/ } Email: Herbert Xu ~{PmV>HI~} <herbert@greathan.apana.org.au> { http://greathan.apana.org.au/~herbert/ } PGP Key: pgp-public-keys@pgp.mit.edu or any other key sites-- diff -u --recursive --new-file v2.1.10/linux/net/ipv4/ip_forward.c linux/net/ipv4/ip_forward.c --- v2.1.10/linux/net/ipv4/ip_forward.c Thu Oct 10 19:10:58 1996 +++ linux/net/ipv4/ip_forward.c Mon Nov 18 11:31:35 1996 @@ -16,6 +16,7 @@ * use output device for accounting. * Jos Vos : Call forward firewall after routing * (always use output device). + * Alan Cox : Unshare buffer on forward. */ #include <linux/config.h> @@ -120,6 +121,13 @@ struct sk_buff *skb_in = skb; /* So we can remember if the masquerader did some swaps */ #endif /* CONFIG_IP_MASQUERADE */ #endif /* CONFIG_FIREWALL */ + + /* + * We may be sharing the buffer with a snooper. That won't do + */ + + if((skb=skb_unshare(skb, GFP_ATOMIC,FREE_READ))==NULL) + return -1; /* * According to the RFC, we must first decrease the TTL field. If