net/smc: fix invalid return code in smcd_new_buf_create()
authorKarsten Graul <kgraul@linux.ibm.com>
Wed, 14 Oct 2020 17:43:29 +0000 (19:43 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 15 Oct 2020 16:54:43 +0000 (09:54 -0700)
smc_ism_register_dmb() returns error codes set by the ISM driver which
are not guaranteed to be negative or in the errno range. Such values
would not be handled by ERR_PTR() and finally the return code will be
used as a memory address.
Fix that by using a valid negative errno value with ERR_PTR().

Fixes: 72b7f6c48708 ("net/smc: unique reason code for exceeded max dmb count")
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/smc/smc_core.c

index 7c0e4fac9748db06fe05e7b1c2af8b1e1642dfe0..59cc99fec2a257879093a22ab98496095bacfdc0 100644 (file)
@@ -1616,7 +1616,8 @@ static struct smc_buf_desc *smcd_new_buf_create(struct smc_link_group *lgr,
                rc = smc_ism_register_dmb(lgr, bufsize, buf_desc);
                if (rc) {
                        kfree(buf_desc);
-                       return (rc == -ENOMEM) ? ERR_PTR(-EAGAIN) : ERR_PTR(rc);
+                       return (rc == -ENOMEM) ? ERR_PTR(-EAGAIN) :
+                                                ERR_PTR(-EIO);
                }
                buf_desc->pages = virt_to_page(buf_desc->cpu_addr);
                /* CDC header stored in buf. So, pretend it was smaller */