[dm-devel] [PATCH 5/5] libmultipath: Fix overflow in sysfs_get_str()

Hannes Reinecke hare at suse.de
Tue Dec 17 07:04:08 UTC 2013


sysfs_get_str() should first do a strchop() before comparing the
returned string length with the provided buffer. Otherwise we might
incur a false positive as the overflowing bits might be occupied
by spaces, which will be removed later on.

Signed-off-by: Hannes Reinecke <hare at suse.de>
---
 libmultipath/discovery.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
index b7470f8..228ffd3 100644
--- a/libmultipath/discovery.c
+++ b/libmultipath/discovery.c
@@ -157,13 +157,12 @@ sysfs_get_##fname (struct udev_device * udev, char * buff, size_t len)	\
 			devname, #fname);				\
 		return -ENXIO;						\
 	}								\
-	if (strlen(attr) > len) {					\
+	if (strchop(attr) > len) {					\
 		condlog(3, "%s: overflow in attribute %s",		\
 			devname, #fname);				\
 		return -EINVAL;						\
 	}								\
-	strlcpy(buff, attr, len);					\
-	return strchop(buff);						\
+	return strlcpy(buff, attr, len);				\
 }
 
 declare_sysfs_get_str(devtype);
-- 
1.7.12.4




More information about the dm-devel mailing list