On Fri, May 27, 2022 at 10:27:37AM +0800, Wu Guanghao wrote: > We got a segfault when we test multipath + iscsi. > > (gdb) bt > #0 __strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:74 > #1 0x00007f694306cd23 in __GI___strdup (s=0x0) at strdup.c:41 > #2 0x00007f69433a147c in dm_get_map (name=0x55d4bc090320 "3600140537cde137ea8c43d8a971462c7", > size=size@entry=0x55d4bc0270d8, outparams=outparams@entry=0x7f6941add640) at devmapper.c:688 > #3 0x00007f69433cbbdf in update_multipath_table (mpp=mpp@entry=0x55d4bc026f30, > pathvec=pathvec@entry=0x55d4bc063990, flags=flags@entry=0) at structs_vec.c:426 > #4 0x00007f69433cbfe5 in update_multipath_strings (mpp=0x55d4bc026f30, pathvec=0x55d4bc063990) > at structs_vec.c:526 > #5 0x000055d4bb52e03e in check_path (vecs=0x55d4bbfad760, pp=0x7f692402d270, ticks=<optimized out>) > at main.c:2280 > #6 0x000055d4bb52f3e2 in checkerloop (ap=0x55d4bbfad760) at main.c:2542 > #7 0x00007f694305b3ba in start_thread (arg=<optimized out>) at pthread_create.c:443 > #8 0x00007f69430ddb40 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 > (gdb) f 2 > #2 0x00007f69433a147c in dm_get_map (name=0x55d4bc090320 "3600140537cde137ea8c43d8a971462c7", > size=size@entry=0x55d4bc0270d8, outparams=outparams@entry=0x7f6941add640) at devmapper.c:688 > 688 *outparams = strdup(params); > (gdb) l > 683 *size = length; > 684 > 685 if (!outparams) > 686 r = DMP_OK; > 687 else { > 688 *outparams = strdup(params); > 689 r = *outparams ? DMP_OK : DMP_ERR; > 690 } > 691 > 692 out: > (gdb) p params > $1 = 0x0 > > If can't found target, we should goto out > > Signed-off-by: Wu Guanghao <wuguanghao3@xxxxxxxxxx> Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > --- > libmultipath/devmapper.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c > index 2507f77f..450b17ef 100644 > --- a/libmultipath/devmapper.c > +++ b/libmultipath/devmapper.c > @@ -682,8 +682,8 @@ int dm_get_map(const char *name, unsigned long long *size, char **outparams) > r = DMP_NOT_FOUND; > /* Fetch 1st target */ > if (dm_get_next_target(dmt, NULL, &start, &length, > - &target_type, ¶ms) != NULL) > - /* more than one target */ > + &target_type, ¶ms) != NULL || !params) > + /* more than one target or not found target */ > goto out; > > if (size) > -- > 2.27.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel