linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: subashab@codeaurora.org, patchwork-bot+netdevbpf@kernel.org
Cc: stranche@codeaurora.org, davem@davemloft.net, kuba@kernel.org,
	ndesaulniers@google.com, sharathv@codeaurora.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	clang-built-linux@googlegroups.com
Subject: Re: [PATCH net-next] net: ethernet: rmnet: Restructure if checks to avoid uninitialized warning
Date: Fri, 4 Jun 2021 09:54:02 -0700	[thread overview]
Message-ID: <2145e27f-c8b3-ef4b-793a-841cb2f7e60f@kernel.org> (raw)
In-Reply-To: <1f6f8246f0cd477c0b1e2b88b4ec825a@codeaurora.org>

Hi Subash,

On 6/3/2021 10:15 PM, subashab@codeaurora.org wrote:
> On 2021-06-03 16:40, patchwork-bot+netdevbpf@kernel.org wrote:
>> Hello:
>>
>> This patch was applied to netdev/net-next.git (refs/heads/master):
>>
>> On Thu,  3 Jun 2021 10:34:10 -0700 you wrote:
>>> Clang warns that proto in rmnet_map_v5_checksum_uplink_packet() might be
>>> used uninitialized:
>>>
>>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:283:14: warning:
>>> variable 'proto' is used uninitialized whenever 'if' condition is false
>>> [-Wsometimes-uninitialized]
>>>                 } else if (skb->protocol == htons(ETH_P_IPV6)) {
>>>                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:295:36: note:
>>> uninitialized use occurs here
>>>                 check = rmnet_map_get_csum_field(proto, trans);
>>>                                                  ^~~~~
>>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:283:10: note:
>>> remove the 'if' if its condition is always true
>>>                 } else if (skb->protocol == htons(ETH_P_IPV6)) {
>>>                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:270:11: note:
>>> initialize the variable 'proto' to silence this warning
>>>                 u8 proto;
>>>                         ^
>>>                          = '\0'
>>> 1 warning generated.
>>>
>>> [...]
>>
>> Here is the summary with links:
>>   - [net-next] net: ethernet: rmnet: Restructure if checks to avoid
>> uninitialized warning
>>     https://git.kernel.org/netdev/net-next/c/118de6106735
>>
>> You are awesome, thank you!
>> -- 
>> Deet-doot-dot, I am a bot.
>> https://korg.docs.kernel.org/patchwork/pwbot.html
> 
> Hi Nathan
> 
> Can you tell why CLANG detected this error.
> Does it require a bug fix.

As far as I understand it, clang does not remember the conditions of 
previous if statements when generating this warning. Basically:

void bar(int x)
{
}

int foo(int a, int b)
{
	int x;

	if (!a && !b)
		goto out;

	if (a)
		x = 1;
	else if (b)
		x = 2;

	bar(x);

out:
	return 0;
}

clang will warn that x is uninitialized when neither of the second if 
statement's conditions are true, even though we as humans know that is 
not possible due to the first if statement. I am guessing this has 
something to do with how clang generates its control flow graphs. While 
this is a false positive, I do not personally see this as a bug in the 
compiler. The code is more clear to both the compiler and humans if it 
is written as:

	if (a)
		x = 1;
	else if (b)
		x = 2;
	else
		goto out;

Cheers,
Nathan

      reply	other threads:[~2021-06-04 16:54 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-03 17:34 [PATCH net-next] net: ethernet: rmnet: Restructure if checks to avoid uninitialized warning Nathan Chancellor
2021-06-03 22:40 ` patchwork-bot+netdevbpf
2021-06-04  5:15   ` subashab
2021-06-04 16:54     ` Nathan Chancellor [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2145e27f-c8b3-ef4b-793a-841cb2f7e60f@kernel.org \
    --to=nathan@kernel.org \
    --cc=clang-built-linux@googlegroups.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=netdev@vger.kernel.org \
    --cc=patchwork-bot+netdevbpf@kernel.org \
    --cc=sharathv@codeaurora.org \
    --cc=stranche@codeaurora.org \
    --cc=subashab@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).