[dm-devel] [PATCH v2 1/3] Fix potential null pointer dereference

Martin Wilck mwilck at suse.com
Fri Nov 19 14:16:06 UTC 2021


On Fri, 2021-11-19 at 16:56 +0800, lixiaokeng wrote:
> udev_device_* may return NULL, check it.
> 
> Signed-off-by: Lixiaokeng <lixiaokeng at huawei.com>
> ---
>  libmultipath/discovery.c    |  8 +++++---
>  libmultipath/foreign/nvme.c |  4 +++-
>  libmultipath/util.c         | 10 +++++++++-
>  3 files changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
> index f25fe9e3..07ebe7d5 100644
> --- a/libmultipath/discovery.c
> +++ b/libmultipath/discovery.c
> 
> diff --git a/libmultipath/util.c b/libmultipath/util.c
> index ea858409..3d036e19 100644
> --- a/libmultipath/util.c
> +++ b/libmultipath/util.c
> @@ -168,6 +168,7 @@ size_t strlcat(char * restrict dst, const char *
> restrict src, size_t size)
>  int devt2devname(char *devname, int devname_len, const char *devt)
>  {
>         struct udev_device *u_dev;
> +       const char * dev_name;
>         int r;
> 
>         if (!devname || !devname_len || !devt)
> @@ -178,7 +179,14 @@ int devt2devname(char *devname, int devname_len,
> const char *devt)
>                 condlog(0, "\"%s\": invalid major/minor numbers, not
> found in sysfs", devt);
>                 return 1;
>         }
> -       r = strlcpy(devname, udev_device_get_sysname(u_dev),
> devname_len);
> +
> +       dev_name = udev_device_get_sysname(u_dev);
> +       if (!dev_name) {
> +               condlog(2, "\"%s\": fail to get sysname\n", devt);
> +               udev_device_unref(u_dev);
> +               return 1;
> +       }
> +       r = strlcpy(devname, dev_name, devname_len);

No condlog() here, please. The only caller, sysfs_check_holders(),
already logs an error from devt2devname().

Martin








More information about the dm-devel mailing list