Skip to content

Commit 3ff917f

Browse files
martin-gpyigaw
authored andcommitted
nvme: fix segfault at nvme_match_devname()
Passing the character device as an argument to nvme list-subsys can result in a segfault at nvme_match_devname() as seen in the below gdb stack trace: (gdb) where nvme_ctrl_get_name (c=0x0) at ../libnvme/src/nvme/tree.c:1085 0x000000000040e800 in nvme_match_devname (devname=0xf910df0 "0\342\220\017", ns=0x7ffd1ed57703) at ../nvme.c:3462 0x000000000040e853 in nvme_match_device_filter (s=0x0, c=0xf90dbe0, ns=0x0, f_args=0x30) at ../nvme.c:3471 (gdb) This is because nvme_ns_get_ctrl() can return a NULL for multipathed ns devices. Fix the same. Fixes: 51bc794 ("nvme: allow char dev filter for show-topology and list-subsys commands") Signed-off-by: Martin George <marting@netapp.com>
1 parent f8c53e8 commit 3ff917f

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

nvme.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3458,8 +3458,10 @@ static int create_ns(int argc, char **argv, struct command *acmd, struct plugin
34583458

34593459
static bool nvme_match_devname(char *devname, nvme_ns_t ns)
34603460
{
3461+
nvme_ctrl_t c = nvme_ns_get_ctrl(ns);
3462+
34613463
if (!strcmp(devname, nvme_ns_get_name(ns)) ||
3462-
!strcmp(devname, nvme_ctrl_get_name(nvme_ns_get_ctrl(ns))) ||
3464+
(c && !strcmp(devname, nvme_ctrl_get_name(c))) ||
34633465
!strcmp(devname, nvme_ns_get_generic_name(ns)))
34643466
return true;
34653467

0 commit comments

Comments
 (0)