diff options
Diffstat (limited to 'net/tipc/eth_media.c')
-rw-r--r-- | net/tipc/eth_media.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c index 673fdf0b3222..6e988ba485fd 100644 --- a/net/tipc/eth_media.c +++ b/net/tipc/eth_media.c | |||
@@ -101,15 +101,12 @@ static int send_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr, | |||
101 | * Accept only packets explicitly sent to this node, or broadcast packets; | 101 | * Accept only packets explicitly sent to this node, or broadcast packets; |
102 | * ignores packets sent using Ethernet multicast, and traffic sent to other | 102 | * ignores packets sent using Ethernet multicast, and traffic sent to other |
103 | * nodes (which can happen if interface is running in promiscuous mode). | 103 | * nodes (which can happen if interface is running in promiscuous mode). |
104 | * Routine truncates any Ethernet padding/CRC appended to the message, | ||
105 | * and ensures message size matches actual length | ||
106 | */ | 104 | */ |
107 | 105 | ||
108 | static int recv_msg(struct sk_buff *buf, struct net_device *dev, | 106 | static int recv_msg(struct sk_buff *buf, struct net_device *dev, |
109 | struct packet_type *pt, struct net_device *orig_dev) | 107 | struct packet_type *pt, struct net_device *orig_dev) |
110 | { | 108 | { |
111 | struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; | 109 | struct eth_bearer *eb_ptr = (struct eth_bearer *)pt->af_packet_priv; |
112 | u32 size; | ||
113 | 110 | ||
114 | if (!net_eq(dev_net(dev), &init_net)) { | 111 | if (!net_eq(dev_net(dev), &init_net)) { |
115 | kfree_skb(buf); | 112 | kfree_skb(buf); |
@@ -118,13 +115,9 @@ static int recv_msg(struct sk_buff *buf, struct net_device *dev, | |||
118 | 115 | ||
119 | if (likely(eb_ptr->bearer)) { | 116 | if (likely(eb_ptr->bearer)) { |
120 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { | 117 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { |
121 | size = msg_size((struct tipc_msg *)buf->data); | 118 | buf->next = NULL; |
122 | skb_trim(buf, size); | 119 | tipc_recv_msg(buf, eb_ptr->bearer); |
123 | if (likely(buf->len == size)) { | 120 | return 0; |
124 | buf->next = NULL; | ||
125 | tipc_recv_msg(buf, eb_ptr->bearer); | ||
126 | return 0; | ||
127 | } | ||
128 | } | 121 | } |
129 | } | 122 | } |
130 | kfree_skb(buf); | 123 | kfree_skb(buf); |