[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190322161244.GG21978@archlinux-ryzen>
Date: Fri, 22 Mar 2019 09:12:44 -0700
From: Nathan Chancellor <natechancellor@...il.com>
To: Arnd Bergmann <arnd@...db.de>
Cc: Jon Maloy <jon.maloy@...csson.com>,
Ying Xue <ying.xue@...driver.com>,
"David S. Miller" <davem@...emloft.net>,
clang-built-linux@...glegroups.com,
Nick Desaulniers <ndesaulniers@...gle.com>,
Tuong Lien <tuong.t.lien@...tech.com.au>,
LUU Duc Canh <canh.d.luu@...tech.com.au>,
Tung Nguyen <tung.q.nguyen@...tech.com.au>,
GhantaKrishnamurthy MohanKrishna
<mohan.krishna.ghanta.krishnamurthy@...csson.com>,
netdev@...r.kernel.org, tipc-discussion@...ts.sourceforge.net,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] tipc: avoid a clang -Wuninitialized warning
On Fri, Mar 22, 2019 at 03:18:13PM +0100, Arnd Bergmann wrote:
> clang notices that we pass 'maddr' into the tipc_bearer_xmit() function
> without having initialized it first:
>
> net/tipc/node.c:831:6: error: variable 'maddr' is used uninitialized whenever 'if' condition is false
> [-Werror,-Wsometimes-uninitialized]
> 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;
> ^
> = NULL
>
> This is harmless because it won't use 'maddr' if the
> queue is empty, but it's better to make that explicit
> and not even call the function in that case.
>
> As clang is able to inline the check, it then notices that
> the code is safe.
>
> Signed-off-by: Arnd Bergmann <arnd@...db.de>
Thanks for looking into this and fixing it!
Reviewed-by: Nathan Chancellor <natechancellor@...il.com>
> ---
> net/tipc/node.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/net/tipc/node.c b/net/tipc/node.c
> index 2dc4919ab23c..ca4cafd00a38 100644
> --- a/net/tipc/node.c
> +++ b/net/tipc/node.c
> @@ -844,7 +844,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.0
>
Powered by blists - more mailing lists