From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] mfd: db8500: avoid uninitialized variable reference
Date: Thu, 28 Jan 2016 11:15:53 +0000 [thread overview]
Message-ID: <20160128111553.GN3368@x1> (raw)
In-Reply-To: <1453737752-1960326-1-git-send-email-arnd@arndb.de>
On Mon, 25 Jan 2016, Arnd Bergmann wrote:
> The prcmu_config_clkout() function ensures that the 'clkout' argument
> can only be '0' or '1' using an appropriate BUG_ON(), so the compiler
> should know that the div_mask, mask, and bits variables are always
> initialized later on. However, it doesn't understand this in gcc-5.2
> and produces a false positive warning instead:
>
> drivers/mfd/db8500-prcmu.c: In function 'prcmu_config_clkout':
> drivers/mfd/db8500-prcmu.c:762:10: error: 'div_mask' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> if (val & div_mask) {
> ^
> drivers/mfd/db8500-prcmu.c:769:13: error: 'mask' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> if ((val & mask & ~div_mask) != bits) {
> ^
> drivers/mfd/db8500-prcmu.c:757:7: error: 'bits' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>
> Replacing the switch() statement with an equivalent if() lets
> gcc figure this out reliably and avoids the warnings.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> drivers/mfd/db8500-prcmu.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
Applied, thanks.
> diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
> index 12099b09a9a7..c0a86aeb1733 100644
> --- a/drivers/mfd/db8500-prcmu.c
> +++ b/drivers/mfd/db8500-prcmu.c
> @@ -739,20 +739,17 @@ int prcmu_config_clkout(u8 clkout, u8 source, u8 div)
> if (!div && !requests[clkout])
> return -EINVAL;
>
> - switch (clkout) {
> - case 0:
> + if (clkout == 0) {
> div_mask = PRCM_CLKOCR_CLKODIV0_MASK;
> mask = (PRCM_CLKOCR_CLKODIV0_MASK | PRCM_CLKOCR_CLKOSEL0_MASK);
> bits = ((source << PRCM_CLKOCR_CLKOSEL0_SHIFT) |
> (div << PRCM_CLKOCR_CLKODIV0_SHIFT));
> - break;
> - case 1:
> + } else {
> div_mask = PRCM_CLKOCR_CLKODIV1_MASK;
> mask = (PRCM_CLKOCR_CLKODIV1_MASK | PRCM_CLKOCR_CLKOSEL1_MASK |
> PRCM_CLKOCR_CLK1TYPE);
> bits = ((source << PRCM_CLKOCR_CLKOSEL1_SHIFT) |
> (div << PRCM_CLKOCR_CLKODIV1_SHIFT));
> - break;
> }
> bits &= mask;
>
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
WARNING: multiple messages have this Message-ID (diff)
From: Lee Jones <lee.jones@linaro.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-arm-kernel@lists.infradead.org,
Linus Walleij <linus.walleij@linaro.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mfd: db8500: avoid uninitialized variable reference
Date: Thu, 28 Jan 2016 11:15:53 +0000 [thread overview]
Message-ID: <20160128111553.GN3368@x1> (raw)
In-Reply-To: <1453737752-1960326-1-git-send-email-arnd@arndb.de>
On Mon, 25 Jan 2016, Arnd Bergmann wrote:
> The prcmu_config_clkout() function ensures that the 'clkout' argument
> can only be '0' or '1' using an appropriate BUG_ON(), so the compiler
> should know that the div_mask, mask, and bits variables are always
> initialized later on. However, it doesn't understand this in gcc-5.2
> and produces a false positive warning instead:
>
> drivers/mfd/db8500-prcmu.c: In function 'prcmu_config_clkout':
> drivers/mfd/db8500-prcmu.c:762:10: error: 'div_mask' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> if (val & div_mask) {
> ^
> drivers/mfd/db8500-prcmu.c:769:13: error: 'mask' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> if ((val & mask & ~div_mask) != bits) {
> ^
> drivers/mfd/db8500-prcmu.c:757:7: error: 'bits' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>
> Replacing the switch() statement with an equivalent if() lets
> gcc figure this out reliably and avoids the warnings.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> drivers/mfd/db8500-prcmu.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
Applied, thanks.
> diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
> index 12099b09a9a7..c0a86aeb1733 100644
> --- a/drivers/mfd/db8500-prcmu.c
> +++ b/drivers/mfd/db8500-prcmu.c
> @@ -739,20 +739,17 @@ int prcmu_config_clkout(u8 clkout, u8 source, u8 div)
> if (!div && !requests[clkout])
> return -EINVAL;
>
> - switch (clkout) {
> - case 0:
> + if (clkout == 0) {
> div_mask = PRCM_CLKOCR_CLKODIV0_MASK;
> mask = (PRCM_CLKOCR_CLKODIV0_MASK | PRCM_CLKOCR_CLKOSEL0_MASK);
> bits = ((source << PRCM_CLKOCR_CLKOSEL0_SHIFT) |
> (div << PRCM_CLKOCR_CLKODIV0_SHIFT));
> - break;
> - case 1:
> + } else {
> div_mask = PRCM_CLKOCR_CLKODIV1_MASK;
> mask = (PRCM_CLKOCR_CLKODIV1_MASK | PRCM_CLKOCR_CLKOSEL1_MASK |
> PRCM_CLKOCR_CLK1TYPE);
> bits = ((source << PRCM_CLKOCR_CLKOSEL1_SHIFT) |
> (div << PRCM_CLKOCR_CLKODIV1_SHIFT));
> - break;
> }
> bits &= mask;
>
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
next prev parent reply other threads:[~2016-01-28 11:15 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-25 16:02 [PATCH] mfd: db8500: avoid uninitialized variable reference Arnd Bergmann
2016-01-25 16:02 ` Arnd Bergmann
2016-01-28 10:37 ` Linus Walleij
2016-01-28 10:37 ` Linus Walleij
2016-01-28 11:15 ` Lee Jones [this message]
2016-01-28 11:15 ` Lee Jones
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=20160128111553.GN3368@x1 \
--to=lee.jones@linaro.org \
--cc=linux-arm-kernel@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.