On Wed, 2020-07-01 at 17:39 -0500, Benjamin Marzinski wrote:
> dev_loss_tmo is a u32 value. However the kernel sysfs code prints it
> as
> a signed integer. This means that if dev_loss_tmo is above INT_MAX,
> the
> sysfs value will be a negative number. Parsing this was causing
> sysfs_set_rport_tmo() to fail.
> 
> Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com>

Thanks for catching this. I think it can be fixed simpler, because 
strtoul() parses negative values just fine. See below.

Regards,
Martin

>From 16eca9b0f340a13fee0c28ae52dffa578193f015 Mon Sep 17 00:00:00 2001
From: Benjamin Marzinski <bmarz...@redhat.com>
Date: Wed, 1 Jul 2020 17:39:33 -0500
Subject: [PATCH] libmultipath: fix sysfs dev_loss_tmo parsing

dev_loss_tmo is a u32 value. However the kernel sysfs code prints it as
a signed integer. This means that if dev_loss_tmo is above INT_MAX, the
sysfs value will be a negative number. Parsing this was causing
sysfs_set_rport_tmo() to fail.

Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com>
Signed-off-by: Martin Wilck <mwi...@suse.com>
---
 libmultipath/discovery.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
index 1d542ea..3c9803a 100644
--- a/libmultipath/discovery.c
+++ b/libmultipath/discovery.c
@@ -581,7 +581,7 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp)
        struct udev_device *rport_dev = NULL;
        char value[16], *eptr;
        char rport_id[32];
-       unsigned long long tmo = 0;
+       unsigned int tmo;
        int ret;
 
        sprintf(rport_id, "rport-%d:%d-%d",
@@ -605,8 +605,8 @@ sysfs_set_rport_tmo(struct multipath *mpp, struct path *pp)
                        "error %d", rport_id, -ret);
                goto out;
        }
-       tmo = strtoull(value, &eptr, 0);
-       if (value == eptr || tmo == ULLONG_MAX) {
+       tmo = strtoul(value, &eptr, 0);
+       if (value == eptr) {
                condlog(0, "%s: Cannot parse dev_loss_tmo "
                        "attribute '%s'", rport_id, value);
                goto out;
-- 
2.26.2


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to