Miroslav Franc 424e85
From: Arnd Bergmann <arnd@arndb.de>
Miroslav Franc 424e85
Date: Wed, 17 Apr 2019 18:29:13 +0200
Miroslav Franc 424e85
Subject: s390: ctcm: fix ctcm_new_device error return code
Miroslav Franc 424e85
Git-commit: 27b141fc234a3670d21bd742c35d7205d03cbb3a
Miroslav Franc 424e85
Patch-mainline: v5.1-rc7
Miroslav Franc 424e85
References: git-fixes bsc#1211361
Miroslav Franc 424e85
Miroslav Franc 424e85
clang points out that the return code from this function is
Miroslav Franc 424e85
undefined for one of the error paths:
Miroslav Franc 424e85
Miroslav Franc 424e85
../drivers/s390/net/ctcm_main.c:1595:7: warning: variable 'result' is used uninitialized whenever 'if' condition is true
Miroslav Franc 424e85
      [-Wsometimes-uninitialized]
Miroslav Franc 424e85
                if (priv->channel[direction] == NULL) {
Miroslav Franc 424e85
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Miroslav Franc 424e85
../drivers/s390/net/ctcm_main.c:1638:9: note: uninitialized use occurs here
Miroslav Franc 424e85
        return result;
Miroslav Franc 424e85
               ^~~~~~
Miroslav Franc 424e85
../drivers/s390/net/ctcm_main.c:1595:3: note: remove the 'if' if its condition is always false
Miroslav Franc 424e85
                if (priv->channel[direction] == NULL) {
Miroslav Franc 424e85
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Miroslav Franc 424e85
../drivers/s390/net/ctcm_main.c:1539:12: note: initialize the variable 'result' to silence this warning
Miroslav Franc 424e85
        int result;
Miroslav Franc 424e85
                  ^
Miroslav Franc 424e85
Miroslav Franc 424e85
Make it return -ENODEV here, as in the related failure cases.
Miroslav Franc 424e85
gcc has a known bug in underreporting some of these warnings
Miroslav Franc 424e85
when it has already eliminated the assignment of the return code
Miroslav Franc 424e85
based on some earlier optimization step.
Miroslav Franc 424e85
Miroslav Franc 424e85
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Miroslav Franc 424e85
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Miroslav Franc 424e85
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Miroslav Franc 424e85
Signed-off-by: David S. Miller <davem@davemloft.net>
Miroslav Franc 424e85
Acked-by: Miroslav Franc <mfranc@suse.cz>
Miroslav Franc 424e85
---
Miroslav Franc 424e85
 drivers/s390/net/ctcm_main.c | 1 +
Miroslav Franc 424e85
 1 file changed, 1 insertion(+)
Miroslav Franc 424e85
Miroslav Franc 424e85
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c
Miroslav Franc 424e85
index 7617d21cb296..f63c5c871d3d 100644
Miroslav Franc 424e85
--- a/drivers/s390/net/ctcm_main.c
Miroslav Franc 424e85
+++ b/drivers/s390/net/ctcm_main.c
Miroslav Franc 424e85
@@ -1595,6 +1595,7 @@ static int ctcm_new_device(struct ccwgroup_device *cgdev)
Miroslav Franc 424e85
 		if (priv->channel[direction] == NULL) {
Miroslav Franc 424e85
 			if (direction == CTCM_WRITE)
Miroslav Franc 424e85
 				channel_free(priv->channel[CTCM_READ]);
Miroslav Franc 424e85
+			result = -ENODEV;
Miroslav Franc 424e85
 			goto out_dev;
Miroslav Franc 424e85
 		}
Miroslav Franc 424e85
 		priv->channel[direction]->netdev = dev;
Miroslav Franc 424e85