[net] s390: ctcm: fix ctcm_new_device error return code

Message ID 20190417162913.90238-1-jwi@linux.ibm.com
State New
Headers show
Series
  • [net] s390: ctcm: fix ctcm_new_device error return code
Related show

Commit Message

Julian Wiedmann April 17, 2019, 4:29 p.m.
From: Arnd Bergmann <arnd@arndb.de>


clang points out that the return code from this function is
undefined for one of the error paths:

../drivers/s390/net/ctcm_main.c:1595:7: warning: variable 'result' is used uninitialized whenever 'if' condition is true
      [-Wsometimes-uninitialized]
                if (priv->channel[direction] == NULL) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/s390/net/ctcm_main.c:1638:9: note: uninitialized use occurs here
        return result;
               ^~~~~~
../drivers/s390/net/ctcm_main.c:1595:3: note: remove the 'if' if its condition is always false
                if (priv->channel[direction] == NULL) {
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../drivers/s390/net/ctcm_main.c:1539:12: note: initialize the variable 'result' to silence this warning
        int result;
                  ^

Make it return -ENODEV here, as in the related failure cases.
gcc has a known bug in underreporting some of these warnings
when it has already eliminated the assignment of the return code
based on some earlier optimization step.

Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>

---
 drivers/s390/net/ctcm_main.c | 1 +
 1 file changed, 1 insertion(+)

-- 
2.16.4

Comments

David Miller April 18, 2019, 6:25 a.m. | #1
From: Julian Wiedmann <jwi@linux.ibm.com>

Date: Wed, 17 Apr 2019 18:29:13 +0200

> From: Arnd Bergmann <arnd@arndb.de>

> 

> clang points out that the return code from this function is

> undefined for one of the error paths:

> 

> ../drivers/s390/net/ctcm_main.c:1595:7: warning: variable 'result' is used uninitialized whenever 'if' condition is true

>       [-Wsometimes-uninitialized]

>                 if (priv->channel[direction] == NULL) {

>                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> ../drivers/s390/net/ctcm_main.c:1638:9: note: uninitialized use occurs here

>         return result;

>                ^~~~~~

> ../drivers/s390/net/ctcm_main.c:1595:3: note: remove the 'if' if its condition is always false

>                 if (priv->channel[direction] == NULL) {

>                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> ../drivers/s390/net/ctcm_main.c:1539:12: note: initialize the variable 'result' to silence this warning

>         int result;

>                   ^

> 

> Make it return -ENODEV here, as in the related failure cases.

> gcc has a known bug in underreporting some of these warnings

> when it has already eliminated the assignment of the return code

> based on some earlier optimization step.

> 

> Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>


Applied.

Patch

diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c
index 7617d21cb296..f63c5c871d3d 100644
--- a/drivers/s390/net/ctcm_main.c
+++ b/drivers/s390/net/ctcm_main.c
@@ -1595,6 +1595,7 @@  static int ctcm_new_device(struct ccwgroup_device *cgdev)
 		if (priv->channel[direction] == NULL) {
 			if (direction == CTCM_WRITE)
 				channel_free(priv->channel[CTCM_READ]);
+			result = -ENODEV;
 			goto out_dev;
 		}
 		priv->channel[direction]->netdev = dev;