ndctl, list: fix crash when listing idle device-dax instances BZ: commit 4a934b716888d116895e96b0a48a6f5a562cedd0 Author: Dan Williams Date: Thu Sep 28 15:40:54 2017 -0700 ndctl, list: fix crash when listing idle device-dax instances The following crash results from running 'ndctl list -i' on an inactive namespace that is claimed for device-dax operation. Program received signal SIGSEGV, Segmentation fault. daxctl_dev_get_devname (dev=0x0) at libdaxctl.c:566 566 return devpath_to_devname(dev->dev_path); (gdb) bt #0 daxctl_dev_get_devname (dev=0x0) at libdaxctl.c:566 #1 0x0000555555563b39 in util_namespace_to_json at ../util/json.c:751 By definition the 'chardev' attribute for a device-dax instance can not be found if the device-dax instance is disabled, because enabling the namespace creates the child character device(s). Signed-off-by: Dan Williams diff --git a/util/json.c b/util/json.c index dac8692..d1ee351 100644 --- a/util/json.c +++ b/util/json.c @@ -747,12 +747,18 @@ struct json_object *util_namespace_to_json(struct ndctl_namespace *ndns, } else if (dax_region) { struct daxctl_dev *dev; + /* + * We can only find/list these device-dax + * details when the instance is enabled. + */ dev = daxctl_dev_get_first(dax_region); - name = daxctl_dev_get_devname(dev); - jobj = json_object_new_string(name); - if (!jobj) - goto err; - json_object_object_add(jndns, "chardev", jobj); + if (dev) { + name = daxctl_dev_get_devname(dev); + jobj = json_object_new_string(name); + if (!jobj) + goto err; + json_object_object_add(jndns, "chardev", jobj); + } } } else if (ndctl_namespace_get_type(ndns) != ND_DEVICE_NAMESPACE_IO) { ndctl_namespace_get_uuid(ndns, uuid);