aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/udp_media.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/udp_media.c')
-rw-r--r--net/tipc/udp_media.c24
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) {