Re: 2.1.12 & routing

Herbert Xu (herbert@greathan.apana.org.au)
Tue, 26 Nov 1996 18:13:16 +1100 (EST)


I wrote:
>
> I have a Pentium that has an ethernet connection and
> a PPP connection. My local (ethernet) network has been unable
> to reach the outside since I upgraded the router to 2.1.12 from
> 2.1.10. I can ping the outside with unusually high packet loss
> rates, but traceroute does not work, neither does any other
> network services. I've attached my kernel .config. Note that
> I've applied the vm86 patch for dosemu if that makes any
> difference. Thanks.

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