diff mbox series

gpio: gpio-xilinx: Check return value of of_property_read_u32

Message ID 20220617051921.3801832-1-srinivas.neeli@xilinx.com
State New
Headers show
Series gpio: gpio-xilinx: Check return value of of_property_read_u32 | expand

Commit Message

Srinivas Neeli June 17, 2022, 5:19 a.m. UTC
In five different instances the return value of "of_property_read_u32"
API was neither captured nor checked.

Fixed it by capturing the return value and then checking for any error.

Signed-off-by: Srinivas Neeli <srinivas.neeli@xilinx.com>
Addresses-Coverity: "check_return"
---
 drivers/gpio/gpio-xilinx.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

Comments

Michal Simek June 20, 2022, 6:26 a.m. UTC | #1
Hi Andy,

On 6/17/22 18:02, Andy Shevchenko wrote:
> 
> 
> On Fri, Jun 17, 2022 at 7:20 AM Srinivas Neeli
> <srinivas.neeli@xilinx.com> wrote:
>>
>> In five different instances the return value of "of_property_read_u32"
>> API was neither captured nor checked.
>>
>> Fixed it by capturing the return value and then checking for any error.
>>
>> Signed-off-by: Srinivas Neeli <srinivas.neeli@xilinx.com>
>> Addresses-Coverity: "check_return"
> 
> I think the best course of action here is to go and fix Coverity while
> marking these as false positives.
> 
> To the idea of castings -- this is not good style and (many?)
> maintainers in kernel do not accept such "workaround" for fixing
> broken tool.

Let's wait for Linus what he will say about it.
I can't see nothing wrong about declaring that I am intentionally ignoring 
return code.

Thanks,
Michal
Linus Walleij June 28, 2022, 12:27 p.m. UTC | #2
On Mon, Jun 20, 2022 at 8:26 AM Michal Simek <michal.simek@amd.com> wrote:
> On 6/17/22 18:02, Andy Shevchenko wrote:
> > On Fri, Jun 17, 2022 at 7:20 AM Srinivas Neeli
> > <srinivas.neeli@xilinx.com> wrote:
> >>
> >> In five different instances the return value of "of_property_read_u32"
> >> API was neither captured nor checked.
> >>
> >> Fixed it by capturing the return value and then checking for any error.
> >>
> >> Signed-off-by: Srinivas Neeli <srinivas.neeli@xilinx.com>
> >> Addresses-Coverity: "check_return"
> >
> > I think the best course of action here is to go and fix Coverity while
> > marking these as false positives.
> >
> > To the idea of castings -- this is not good style and (many?)
> > maintainers in kernel do not accept such "workaround" for fixing
> > broken tool.
>
> Let's wait for Linus what he will say about it.
> I can't see nothing wrong about declaring that I am intentionally ignoring
> return code.

I don't think this patch should be applied.

The problem with static analysis is that such tools have no feeling
for context at all, and in this case the context makes it pretty
clear why it is safe to ignore these return values.

But we need to adopt the tool to the code not adopt the code to
the tool.

Yours,
Linus Walleij
diff mbox series

Patch

diff --git a/drivers/gpio/gpio-xilinx.c b/drivers/gpio/gpio-xilinx.c
index b6d3a57e27ed..268c7b0e481d 100644
--- a/drivers/gpio/gpio-xilinx.c
+++ b/drivers/gpio/gpio-xilinx.c
@@ -570,7 +570,8 @@  static int xgpio_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, chip);
 
 	/* First, check if the device is dual-channel */
-	of_property_read_u32(np, "xlnx,is-dual", &is_dual);
+	if (of_property_read_u32(np, "xlnx,is-dual", &is_dual))
+		is_dual = 0;
 
 	/* Setup defaults */
 	memset32(width, 0, ARRAY_SIZE(width));
@@ -578,14 +579,18 @@  static int xgpio_probe(struct platform_device *pdev)
 	memset32(dir, 0xFFFFFFFF, ARRAY_SIZE(dir));
 
 	/* Update GPIO state shadow register with default value */
-	of_property_read_u32(np, "xlnx,dout-default", &state[0]);
-	of_property_read_u32(np, "xlnx,dout-default-2", &state[1]);
+	if (of_property_read_u32(np, "xlnx,dout-default", &state[0]))
+		state[0] = 0x0;
+	if (of_property_read_u32(np, "xlnx,dout-default-2", &state[1]))
+		state[1] = 0x0;
 
 	bitmap_from_arr32(chip->state, state, 64);
 
 	/* Update GPIO direction shadow register with default value */
-	of_property_read_u32(np, "xlnx,tri-default", &dir[0]);
-	of_property_read_u32(np, "xlnx,tri-default-2", &dir[1]);
+	if (of_property_read_u32(np, "xlnx,tri-default", &dir[0]))
+		dir[0] = 0xFFFFFFFF;
+	if (of_property_read_u32(np, "xlnx,tri-default-2", &dir[1]))
+		dir[1] = 0xFFFFFFFF;
 
 	bitmap_from_arr32(chip->dir, dir, 64);