diff options
Diffstat (limited to 'net/ethernet/eth.c')
| -rw-r--r-- | net/ethernet/eth.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 61ec0329316c..215c83986a9d 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c | |||
| @@ -158,7 +158,6 @@ EXPORT_SYMBOL(eth_rebuild_header); | |||
| 158 | __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) | 158 | __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) |
| 159 | { | 159 | { |
| 160 | struct ethhdr *eth; | 160 | struct ethhdr *eth; |
| 161 | unsigned char *rawp; | ||
| 162 | 161 | ||
| 163 | skb->dev = dev; | 162 | skb->dev = dev; |
| 164 | skb_reset_mac_header(skb); | 163 | skb_reset_mac_header(skb); |
| @@ -199,15 +198,13 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) | |||
| 199 | if (ntohs(eth->h_proto) >= 1536) | 198 | if (ntohs(eth->h_proto) >= 1536) |
| 200 | return eth->h_proto; | 199 | return eth->h_proto; |
| 201 | 200 | ||
| 202 | rawp = skb->data; | ||
| 203 | |||
| 204 | /* | 201 | /* |
| 205 | * This is a magic hack to spot IPX packets. Older Novell breaks | 202 | * This is a magic hack to spot IPX packets. Older Novell breaks |
| 206 | * the protocol design and runs IPX over 802.3 without an 802.2 LLC | 203 | * the protocol design and runs IPX over 802.3 without an 802.2 LLC |
| 207 | * layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This | 204 | * layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This |
| 208 | * won't work for fault tolerant netware but does for the rest. | 205 | * won't work for fault tolerant netware but does for the rest. |
| 209 | */ | 206 | */ |
| 210 | if (*(unsigned short *)rawp == 0xFFFF) | 207 | if (skb->len >= 2 && *(unsigned short *)(skb->data) == 0xFFFF) |
| 211 | return htons(ETH_P_802_3); | 208 | return htons(ETH_P_802_3); |
| 212 | 209 | ||
| 213 | /* | 210 | /* |
