[dm-devel] [PATCH] libmultipath: Don't chop const strings

Christophe Varoqui christophe.varoqui at opensvc.com
Thu Feb 13 21:22:44 UTC 2014


Applied,
thanks.

On Wed, Feb 12, 2014 at 5:21 PM, Benjamin Marzinski <bmarzins at redhat.com> wrote:
> multipath was chopping sysfs attr strings in order to make sure that
> ending whitespace didn't cause them to overflow their buffer. However
> those strings were const strings. This patch makes multipath check how
> much of the string length is ending whitespace, so that it can tell if
> it will really overflow the buffer without chopping the const string.
>
> Signed-off-by: Benjamin Marzinski <bmarzins at redhat.com>
> ---
>  libmultipath/discovery.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
> index 228ffd3..a6ff658 100644
> --- a/libmultipath/discovery.c
> +++ b/libmultipath/discovery.c
> @@ -4,6 +4,7 @@
>   * Copyright (c) 2005 Mike Anderson
>   */
>  #include <stdio.h>
> +#include <ctype.h>
>  #include <unistd.h>
>  #include <fcntl.h>
>  #include <sys/ioctl.h>
> @@ -143,6 +144,7 @@ path_discovery (vector pathvec, struct config * conf, int flag)
>  extern ssize_t                                                         \
>  sysfs_get_##fname (struct udev_device * udev, char * buff, size_t len) \
>  {                                                                      \
> +       int l;                                                  \
>         const char * attr;                                              \
>         const char * devname;                                           \
>                                                                         \
> @@ -157,12 +159,14 @@ sysfs_get_##fname (struct udev_device * udev, char * buff, size_t len)    \
>                         devname, #fname);                               \
>                 return -ENXIO;                                          \
>         }                                                               \
> -       if (strchop(attr) > len) {                                      \
> +       for (l = strlen(attr); l >= 1 && isspace(attr[l-1]); l--);      \
> +       if (l > len) {                                                  \
>                 condlog(3, "%s: overflow in attribute %s",              \
>                         devname, #fname);                               \
>                 return -EINVAL;                                         \
>         }                                                               \
> -       return strlcpy(buff, attr, len);                                \
> +       strlcpy(buff, attr, len);                                       \
> +       return strchop(buff);                                           \
>  }
>
>  declare_sysfs_get_str(devtype);
> --
> 1.8.4.2
>
> --
> dm-devel mailing list
> dm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel




More information about the dm-devel mailing list