diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/netpoll.c | 6 | ||||
-rw-r--r-- | net/ipv4/arp.c | 9 | ||||
-rw-r--r-- | net/ipv4/ipconfig.c | 5 | ||||
-rw-r--r-- | net/ipv4/netfilter/arp_tables.c | 5 |
4 files changed, 7 insertions, 18 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 6faa128a4c8e..7ae98659d79d 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
@@ -384,9 +384,7 @@ static void arp_reply(struct sk_buff *skb) | |||
384 | if (skb->dev->flags & IFF_NOARP) | 384 | if (skb->dev->flags & IFF_NOARP) |
385 | return; | 385 | return; |
386 | 386 | ||
387 | if (!pskb_may_pull(skb, (sizeof(struct arphdr) + | 387 | if (!pskb_may_pull(skb, arp_hdr_len(skb->dev))) |
388 | (2 * skb->dev->addr_len) + | ||
389 | (2 * sizeof(u32))))) | ||
390 | return; | 388 | return; |
391 | 389 | ||
392 | skb_reset_network_header(skb); | 390 | skb_reset_network_header(skb); |
@@ -414,7 +412,7 @@ static void arp_reply(struct sk_buff *skb) | |||
414 | ipv4_is_loopback(tip) || ipv4_is_multicast(tip)) | 412 | ipv4_is_loopback(tip) || ipv4_is_multicast(tip)) |
415 | return; | 413 | return; |
416 | 414 | ||
417 | size = sizeof(struct arphdr) + 2 * (skb->dev->addr_len + 4); | 415 | size = arp_hdr_len(skb->dev); |
418 | send_skb = find_skb(np, size + LL_RESERVED_SPACE(np->dev), | 416 | send_skb = find_skb(np, size + LL_RESERVED_SPACE(np->dev), |
419 | LL_RESERVED_SPACE(np->dev)); | 417 | LL_RESERVED_SPACE(np->dev)); |
420 | 418 | ||
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 8e17f65f4002..69e80bd9774a 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -570,14 +570,13 @@ struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip, | |||
570 | * Allocate a buffer | 570 | * Allocate a buffer |
571 | */ | 571 | */ |
572 | 572 | ||
573 | skb = alloc_skb(sizeof(struct arphdr)+ 2*(dev->addr_len+4) | 573 | skb = alloc_skb(arp_hdr_len(dev) + LL_RESERVED_SPACE(dev), GFP_ATOMIC); |
574 | + LL_RESERVED_SPACE(dev), GFP_ATOMIC); | ||
575 | if (skb == NULL) | 574 | if (skb == NULL) |
576 | return NULL; | 575 | return NULL; |
577 | 576 | ||
578 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 577 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
579 | skb_reset_network_header(skb); | 578 | skb_reset_network_header(skb); |
580 | arp = (struct arphdr *) skb_put(skb,sizeof(struct arphdr) + 2*(dev->addr_len+4)); | 579 | arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev)); |
581 | skb->dev = dev; | 580 | skb->dev = dev; |
582 | skb->protocol = htons(ETH_P_ARP); | 581 | skb->protocol = htons(ETH_P_ARP); |
583 | if (src_hw == NULL) | 582 | if (src_hw == NULL) |
@@ -916,9 +915,7 @@ static int arp_rcv(struct sk_buff *skb, struct net_device *dev, | |||
916 | goto freeskb; | 915 | goto freeskb; |
917 | 916 | ||
918 | /* ARP header, plus 2 device addresses, plus 2 IP addresses. */ | 917 | /* ARP header, plus 2 device addresses, plus 2 IP addresses. */ |
919 | if (!pskb_may_pull(skb, (sizeof(struct arphdr) + | 918 | if (!pskb_may_pull(skb, arp_hdr_len(dev))) |
920 | (2 * dev->addr_len) + | ||
921 | (2 * sizeof(u32))))) | ||
922 | goto freeskb; | 919 | goto freeskb; |
923 | 920 | ||
924 | arp = arp_hdr(skb); | 921 | arp = arp_hdr(skb); |
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index c90e75a66e81..f84041d1f623 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c | |||
@@ -459,10 +459,7 @@ ic_rarp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt | |||
459 | if (rarp->ar_pro != htons(ETH_P_IP)) | 459 | if (rarp->ar_pro != htons(ETH_P_IP)) |
460 | goto drop; | 460 | goto drop; |
461 | 461 | ||
462 | if (!pskb_may_pull(skb, | 462 | if (!pskb_may_pull(skb, arp_hdr_len(dev))) |
463 | sizeof(struct arphdr) + | ||
464 | (2 * dev->addr_len) + | ||
465 | (2 * 4))) | ||
466 | goto drop; | 463 | goto drop; |
467 | 464 | ||
468 | /* OK, it is all there and looks valid, process... */ | 465 | /* OK, it is all there and looks valid, process... */ |
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index a7591ce344d2..9b5904486184 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c | |||
@@ -233,10 +233,7 @@ unsigned int arpt_do_table(struct sk_buff *skb, | |||
233 | void *table_base; | 233 | void *table_base; |
234 | struct xt_table_info *private; | 234 | struct xt_table_info *private; |
235 | 235 | ||
236 | /* ARP header, plus 2 device addresses, plus 2 IP addresses. */ | 236 | if (!pskb_may_pull(skb, arp_hdr_len(skb->dev))) |
237 | if (!pskb_may_pull(skb, (sizeof(struct arphdr) + | ||
238 | (2 * skb->dev->addr_len) + | ||
239 | (2 * sizeof(u32))))) | ||
240 | return NF_DROP; | 237 | return NF_DROP; |
241 | 238 | ||
242 | indev = in ? in->name : nulldevname; | 239 | indev = in ? in->name : nulldevname; |