On Thu, Jul 09, 2020 at 12:35:13PM +0200, mwi...@suse.com wrote:
> From: Martin Wilck <mwi...@suse.com>
> 
> We already avoid creating maps with empty WWID in coalesce_paths()
> as well as in ev_add_path(). The only code path where it's difficult
> to prove (although extremely unlikely) that we can't call
> dm_addmap(ACT_CREATE) with an empty WWID is update_path_groups()->
> reload_map(). To make the code easier to review and avoid ugly
> corner cases, simply refuse to create maps with a zero-length
> WWID.
> 

Reviewed-by: Benjamin Marzinski <bmarz...@redhat.com>

> Signed-off-by: Martin Wilck <mwi...@suse.com>
> ---
>  libmultipath/devmapper.c | 26 +++++++++++++++-----------
>  1 file changed, 15 insertions(+), 11 deletions(-)
> 
> diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
> index a177a54..fb7675c 100644
> --- a/libmultipath/devmapper.c
> +++ b/libmultipath/devmapper.c
> @@ -352,6 +352,12 @@ dm_addmap (int task, const char *target, struct 
> multipath *mpp,
>       char *prefixed_uuid = NULL;
>       uint32_t cookie = 0;
>  
> +     if (task == DM_DEVICE_CREATE && strlen(mpp->wwid) == 0) {
> +             condlog(1, "%s: refusing to create map with empty WWID",
> +                     mpp->alias);
> +             return 0;
> +     }
> +
>       /* Need to add this here to allow 0 to be passed in udev_flags */
>       udev_flags |= DM_UDEV_DISABLE_LIBRARY_FALLBACK;
>  
> @@ -368,18 +374,16 @@ dm_addmap (int task, const char *target, struct 
> multipath *mpp,
>               dm_task_set_ro(dmt);
>  
>       if (task == DM_DEVICE_CREATE) {
> -             if (strlen(mpp->wwid) > 0) {
> -                     prefixed_uuid = MALLOC(UUID_PREFIX_LEN +
> -                                            strlen(mpp->wwid) + 1);
> -                     if (!prefixed_uuid) {
> -                             condlog(0, "cannot create prefixed uuid : %s",
> -                                     strerror(errno));
> -                             goto addout;
> -                     }
> -                     sprintf(prefixed_uuid, UUID_PREFIX "%s", mpp->wwid);
> -                     if (!dm_task_set_uuid(dmt, prefixed_uuid))
> -                             goto freeout;
> +             prefixed_uuid = MALLOC(UUID_PREFIX_LEN +
> +                                    strlen(mpp->wwid) + 1);
> +             if (!prefixed_uuid) {
> +                     condlog(0, "cannot create prefixed uuid : %s",
> +                             strerror(errno));
> +                     goto addout;
>               }
> +             sprintf(prefixed_uuid, UUID_PREFIX "%s", mpp->wwid);
> +             if (!dm_task_set_uuid(dmt, prefixed_uuid))
> +                     goto freeout;
>               dm_task_skip_lockfs(dmt);
>  #ifdef LIBDM_API_FLUSH
>               dm_task_no_flush(dmt);
> -- 
> 2.26.2

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

Reply via email to