| From b6b97f4e7e19b667ce8eb682d2a1be9696db211e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 22 Mar 2019 15:03:51 +0100 |
| Subject: tipc: tipc clang warning |
| |
| From: Jon Maloy <jon.maloy@ericsson.com> |
| |
| [ Upstream commit 737889efe9713a0f20a75fd0de952841d9275e6b ] |
| |
| When checking the code with clang -Wsometimes-uninitialized we get the |
| following warning: |
| |
| if (!tipc_link_is_establishing(l)) { |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| net/tipc/node.c:847:46: note: uninitialized use occurs here |
| tipc_bearer_xmit(n->net, bearer_id, &xmitq, maddr); |
| |
| net/tipc/node.c:831:2: note: remove the 'if' if its condition is always |
| true |
| if (!tipc_link_is_establishing(l)) { |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| net/tipc/node.c:821:31: note: initialize the variable 'maddr' to silence |
| this warning |
| struct tipc_media_addr *maddr; |
| |
| We fix this by initializing 'maddr' to NULL. For the matter of clarity, |
| we also test if 'xmitq' is non-empty before we use it and 'maddr' |
| further down in the function. It will never happen that 'xmitq' is non- |
| empty at the same time as 'maddr' is NULL, so this is a sufficient test. |
| |
| Fixes: 598411d70f85 ("tipc: make resetting of links non-atomic") |
| Reported-by: Nathan Chancellor <natechancellor@gmail.com> |
| Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/tipc/node.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| diff --git a/net/tipc/node.c b/net/tipc/node.c |
| index db8fbc076e1a5..fe7b0ad1d6f32 100644 |
| --- a/net/tipc/node.c |
| +++ b/net/tipc/node.c |
| @@ -688,10 +688,10 @@ static void __tipc_node_link_down(struct tipc_node *n, int *bearer_id, |
| static void tipc_node_link_down(struct tipc_node *n, int bearer_id, bool delete) |
| { |
| struct tipc_link_entry *le = &n->links[bearer_id]; |
| + struct tipc_media_addr *maddr = NULL; |
| struct tipc_link *l = le->link; |
| - struct tipc_media_addr *maddr; |
| - struct sk_buff_head xmitq; |
| int old_bearer_id = bearer_id; |
| + struct sk_buff_head xmitq; |
| |
| if (!l) |
| return; |
| @@ -713,7 +713,8 @@ static void tipc_node_link_down(struct tipc_node *n, int bearer_id, bool delete) |
| tipc_node_write_unlock(n); |
| if (delete) |
| tipc_mon_remove_peer(n->net, n->addr, old_bearer_id); |
| - tipc_bearer_xmit(n->net, bearer_id, &xmitq, maddr); |
| + if (!skb_queue_empty(&xmitq)) |
| + tipc_bearer_xmit(n->net, bearer_id, &xmitq, maddr); |
| tipc_sk_rcv(n->net, &le->inputq); |
| } |
| |
| -- |
| 2.20.1 |
| |