From: Jesse Brandeburg Parse outgoing packets in e1000_transfer_dhcp_info as raw packet even if protocol bits are set. pump, for instance causes kernel panic on some systems, if parsed via udp header. Thanks to Derrell Lipman for reporting and testing. Signed-off-by: Jesse Brandeburg Cc: Jeff Garzik Signed-off-by: Andrew Morton --- drivers/net/e1000/e1000_main.c | 14 +------------- 1 files changed, 1 insertion(+), 13 deletions(-) diff -puN drivers/net/e1000/e1000_main.c~e1000-fix-for-dhcp-issue drivers/net/e1000/e1000_main.c --- devel/drivers/net/e1000/e1000_main.c~e1000-fix-for-dhcp-issue 2005-11-14 18:59:33.000000000 -0800 +++ devel-akpm/drivers/net/e1000/e1000_main.c 2005-11-14 18:59:37.000000000 -0800 @@ -2621,19 +2621,7 @@ e1000_transfer_dhcp_info(struct e1000_ad E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT)) ) return 0; } - if(htons(ETH_P_IP) == skb->protocol) { - const struct iphdr *ip = skb->nh.iph; - if(IPPROTO_UDP == ip->protocol) { - struct udphdr *udp = (struct udphdr *)(skb->h.uh); - if(ntohs(udp->dest) == 67) { - offset = (uint8_t *)udp + 8 - skb->data; - length = skb->len - offset; - - return e1000_mng_write_dhcp_info(hw, - (uint8_t *)udp + 8, length); - } - } - } else if((skb->len > MINIMUM_DHCP_PACKET_SIZE) && (!skb->protocol)) { + if ((skb->len > MINIMUM_DHCP_PACKET_SIZE) && (!skb->protocol)) { struct ethhdr *eth = (struct ethhdr *) skb->data; if((htons(ETH_P_IP) == eth->h_proto)) { const struct iphdr *ip = _