Commit c3d8d60e authored by David S. Miller's avatar David S. Miller

Merge branch 'tipc-buffer-reassignment-fixes'

Parthasarathy Bhuvaragan says:

====================
tipc: buffer reassignment fixes

This series contains fixes for buffer reassignments and a context imbalance.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 551143d8 991ca84d
...@@ -479,13 +479,14 @@ bool tipc_msg_make_bundle(struct sk_buff **skb, struct tipc_msg *msg, ...@@ -479,13 +479,14 @@ bool tipc_msg_make_bundle(struct sk_buff **skb, struct tipc_msg *msg,
bool tipc_msg_reverse(u32 own_node, struct sk_buff **skb, int err) bool tipc_msg_reverse(u32 own_node, struct sk_buff **skb, int err)
{ {
struct sk_buff *_skb = *skb; struct sk_buff *_skb = *skb;
struct tipc_msg *hdr = buf_msg(_skb); struct tipc_msg *hdr;
struct tipc_msg ohdr; struct tipc_msg ohdr;
int dlen = min_t(uint, msg_data_sz(hdr), MAX_FORWARD_SIZE); int dlen;
if (skb_linearize(_skb)) if (skb_linearize(_skb))
goto exit; goto exit;
hdr = buf_msg(_skb); hdr = buf_msg(_skb);
dlen = min_t(uint, msg_data_sz(hdr), MAX_FORWARD_SIZE);
if (msg_dest_droppable(hdr)) if (msg_dest_droppable(hdr))
goto exit; goto exit;
if (msg_errcode(hdr)) if (msg_errcode(hdr))
...@@ -511,6 +512,8 @@ bool tipc_msg_reverse(u32 own_node, struct sk_buff **skb, int err) ...@@ -511,6 +512,8 @@ bool tipc_msg_reverse(u32 own_node, struct sk_buff **skb, int err)
pskb_expand_head(_skb, BUF_HEADROOM, BUF_TAILROOM, GFP_ATOMIC)) pskb_expand_head(_skb, BUF_HEADROOM, BUF_TAILROOM, GFP_ATOMIC))
goto exit; goto exit;
/* reassign after skb header modifications */
hdr = buf_msg(_skb);
/* Now reverse the concerned fields */ /* Now reverse the concerned fields */
msg_set_errcode(hdr, err); msg_set_errcode(hdr, err);
msg_set_non_seq(hdr, 0); msg_set_non_seq(hdr, 0);
......
...@@ -1126,8 +1126,8 @@ int tipc_node_get_linkname(struct net *net, u32 bearer_id, u32 addr, ...@@ -1126,8 +1126,8 @@ int tipc_node_get_linkname(struct net *net, u32 bearer_id, u32 addr,
strncpy(linkname, tipc_link_name(link), len); strncpy(linkname, tipc_link_name(link), len);
err = 0; err = 0;
} }
exit:
tipc_node_read_unlock(node); tipc_node_read_unlock(node);
exit:
tipc_node_put(node); tipc_node_put(node);
return err; return err;
} }
...@@ -1557,6 +1557,8 @@ void tipc_rcv(struct net *net, struct sk_buff *skb, struct tipc_bearer *b) ...@@ -1557,6 +1557,8 @@ void tipc_rcv(struct net *net, struct sk_buff *skb, struct tipc_bearer *b)
/* Check/update node state before receiving */ /* Check/update node state before receiving */
if (unlikely(skb)) { if (unlikely(skb)) {
if (unlikely(skb_linearize(skb)))
goto discard;
tipc_node_write_lock(n); tipc_node_write_lock(n);
if (tipc_node_check_state(n, skb, bearer_id, &xmitq)) { if (tipc_node_check_state(n, skb, bearer_id, &xmitq)) {
if (le->link) { if (le->link) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment