diff options
-rw-r--r-- | net/tipc/eth_media.c | 13 | ||||
-rw-r--r-- | net/tipc/net.c | 1 |
2 files changed, 4 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); |
diff --git a/net/tipc/net.c b/net/tipc/net.c index f61b7694138b..7e05af47a196 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c | |||
@@ -248,6 +248,7 @@ void tipc_net_route_msg(struct sk_buff *buf) | |||
248 | 248 | ||
249 | /* Handle message for another node */ | 249 | /* Handle message for another node */ |
250 | msg_dbg(msg, "NET>SEND>: "); | 250 | msg_dbg(msg, "NET>SEND>: "); |
251 | skb_trim(buf, msg_size(msg)); | ||
251 | tipc_link_send(buf, dnode, msg_link_selector(msg)); | 252 | tipc_link_send(buf, dnode, msg_link_selector(msg)); |
252 | } | 253 | } |
253 | 254 | ||