lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <45788B4D.2020403@redhat.com>
Date:	Thu, 07 Dec 2006 16:44:45 -0500
From:	Chris Lalancette <clalance@...hat.com>
To:	Chris Lalancette <clalance@...hat.com>
CC:	netdev@...r.kernel.org
Subject: Re: [PATCH]: Fix netpoll arp_reply for multiple routers

Chris Lalancette wrote:
> All,
>      Attached is a patch to fix arp_reply when you have multiple possible routers doing ARP requests to you.  Currently arp_reply always replies to the MAC address that it was given when it starts.  However, if you have multiple routers that can ARP request you, you might respond to the wrong router; in which case the other router will eventually drop you from it's ARP cache and stop delivering packets to you.  The fix is to always reply to the router that asked you, not the one you have hard-coded.
>      I do not have the setup to test this; the customer that does have the setup has tested the patch and reports that it fixes the problems they were having.
> 
> 
> Signed-off-by: Chris Lalancette <clalance@...hat.com>
> 
> 
> ------------------------------------------------------------------------
> 
> diff --git a/net/core/netpoll.c b/net/core/netpoll.c
> index 3c58846..5833b21 100644
> --- a/net/core/netpoll.c
> +++ b/net/core/netpoll.c
> @@ -331,6 +331,7 @@ static void arp_reply(struct sk_buff *sk
>  	unsigned char *arp_ptr;
>  	int size, type = ARPOP_REPLY, ptype = ETH_P_ARP;
>  	__be32 sip, tip;
> +	unsigned char *sha;
>  	struct sk_buff *send_skb;
>  	struct netpoll *np = NULL;
>  
> @@ -357,9 +358,14 @@ static void arp_reply(struct sk_buff *sk
>  	    arp->ar_op != htons(ARPOP_REQUEST))
>  		return;
>  
> -	arp_ptr = (unsigned char *)(arp+1) + skb->dev->addr_len;
> +	arp_ptr = (unsigned char *)(arp+1);
> +	/* save the location of the src hw addr */
> +	sha = arp_ptr;
> +	arp_ptr += skb->dev->addr_len;
>  	memcpy(&sip, arp_ptr, 4);
> -	arp_ptr += 4 + skb->dev->addr_len;
> +	arp_ptr += 4;
> +	/* if we actually cared about dst hw addr, it would get copied here */
> +	arp_ptr += skb->dev->addr_len;
>  	memcpy(&tip, arp_ptr, 4);
>  
>  	/* Should we ignore arp? */
> @@ -382,7 +388,7 @@ static void arp_reply(struct sk_buff *sk
>  
>  	if (np->dev->hard_header &&
>  	    np->dev->hard_header(send_skb, skb->dev, ptype,
> -				 np->remote_mac, np->local_mac,
> +				 sha, np->local_mac,
>  				 send_skb->len) < 0) {
>  		kfree_skb(send_skb);
>  		return;
> @@ -406,7 +412,7 @@ static void arp_reply(struct sk_buff *sk
>  	arp_ptr += np->dev->addr_len;
>  	memcpy(arp_ptr, &tip, 4);
>  	arp_ptr += 4;
> -	memcpy(arp_ptr, np->remote_mac, np->dev->addr_len);
> +	memcpy(arp_ptr, sha, np->dev->addr_len);
>  	arp_ptr += np->dev->addr_len;
>  	memcpy(arp_ptr, &sip, 4);
>  

All,
     Sorry for the confusion...this was already picked up by akpm on linux-net.  Please don't take the patch.

Thanks,
Chris Lalancette
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ