diff options
Diffstat (limited to 'net/tipc/udp_media.c')
-rw-r--r-- | net/tipc/udp_media.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c index ad2719ad4c1b..d63a911e7fe2 100644 --- a/net/tipc/udp_media.c +++ b/net/tipc/udp_media.c | |||
@@ -48,7 +48,6 @@ | |||
48 | #include <linux/tipc_netlink.h> | 48 | #include <linux/tipc_netlink.h> |
49 | #include "core.h" | 49 | #include "core.h" |
50 | #include "bearer.h" | 50 | #include "bearer.h" |
51 | #include "msg.h" | ||
52 | 51 | ||
53 | /* IANA assigned UDP port */ | 52 | /* IANA assigned UDP port */ |
54 | #define UDP_PORT_DEFAULT 6118 | 53 | #define UDP_PORT_DEFAULT 6118 |
@@ -158,8 +157,11 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb, | |||
158 | struct udp_media_addr *src = (struct udp_media_addr *)&b->addr.value; | 157 | struct udp_media_addr *src = (struct udp_media_addr *)&b->addr.value; |
159 | struct rtable *rt; | 158 | struct rtable *rt; |
160 | 159 | ||
161 | if (skb_headroom(skb) < UDP_MIN_HEADROOM) | 160 | if (skb_headroom(skb) < UDP_MIN_HEADROOM) { |
162 | pskb_expand_head(skb, UDP_MIN_HEADROOM, 0, GFP_ATOMIC); | 161 | err = pskb_expand_head(skb, UDP_MIN_HEADROOM, 0, GFP_ATOMIC); |
162 | if (err) | ||
163 | goto tx_error; | ||
164 | } | ||
163 | 165 | ||
164 | skb_set_inner_protocol(skb, htons(ETH_P_TIPC)); | 166 | skb_set_inner_protocol(skb, htons(ETH_P_TIPC)); |
165 | ub = rcu_dereference_rtnl(b->media_ptr); | 167 | ub = rcu_dereference_rtnl(b->media_ptr); |
@@ -180,15 +182,9 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb, | |||
180 | goto tx_error; | 182 | goto tx_error; |
181 | } | 183 | } |
182 | ttl = ip4_dst_hoplimit(&rt->dst); | 184 | ttl = ip4_dst_hoplimit(&rt->dst); |
183 | err = udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb, | 185 | udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb, src->ipv4.s_addr, |
184 | src->ipv4.s_addr, | 186 | dst->ipv4.s_addr, 0, ttl, 0, src->udp_port, |
185 | dst->ipv4.s_addr, 0, ttl, 0, | 187 | dst->udp_port, false, true); |
186 | src->udp_port, dst->udp_port, | ||
187 | false, true); | ||
188 | if (err < 0) { | ||
189 | ip_rt_put(rt); | ||
190 | goto tx_error; | ||
191 | } | ||
192 | #if IS_ENABLED(CONFIG_IPV6) | 188 | #if IS_ENABLED(CONFIG_IPV6) |
193 | } else { | 189 | } else { |
194 | struct dst_entry *ndst; | 190 | struct dst_entry *ndst; |
@@ -221,10 +217,6 @@ static int tipc_udp_recv(struct sock *sk, struct sk_buff *skb) | |||
221 | { | 217 | { |
222 | struct udp_bearer *ub; | 218 | struct udp_bearer *ub; |
223 | struct tipc_bearer *b; | 219 | struct tipc_bearer *b; |
224 | int usr = msg_user(buf_msg(skb)); | ||
225 | |||
226 | if ((usr == LINK_PROTOCOL) || (usr == NAME_DISTRIBUTOR)) | ||
227 | skb_linearize(skb); | ||
228 | 220 | ||
229 | ub = rcu_dereference_sk_user_data(sk); | 221 | ub = rcu_dereference_sk_user_data(sk); |
230 | if (!ub) { | 222 | if (!ub) { |