diff options
author | Yuri Pankov <yuri.pankov@nexenta.com> | 2017-02-22 00:01:44 +0300 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2017-03-05 17:21:02 +0000 |
commit | 25d3556849fcbe4fe5d517e1add48e0b2d585c70 (patch) | |
tree | dbc1af84aa8d60265cae1bfc263ac030ace44233 /usr/src | |
parent | 89ac1330de393e78c8b27c33453223b10d3c18da (diff) | |
download | illumos-joyent-25d3556849fcbe4fe5d517e1add48e0b2d585c70.tar.gz |
7933 libcfgadm: memory leak in do_list_common()
Reviewed by: Jan Kryl <jan.kryl@nexenta.com>
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/lib/libcfgadm/common/config_admin.c | 17 | ||||
-rw-r--r-- | usr/src/lib/libdevinfo/devinfo.c | 2 |
2 files changed, 10 insertions, 9 deletions
diff --git a/usr/src/lib/libcfgadm/common/config_admin.c b/usr/src/lib/libcfgadm/common/config_admin.c index d642fa820b..767332c631 100644 --- a/usr/src/lib/libcfgadm/common/config_admin.c +++ b/usr/src/lib/libcfgadm/common/config_admin.c @@ -2570,26 +2570,27 @@ config_err(int errnum, int err_type, char **errstring) * do_list_common - list non-SHP attachment point */ static int -do_list_common( - di_node_t node, - di_minor_t minor, - void *arg) +do_list_common(di_node_t node, di_minor_t minor, void *arg) { di_node_t rnode; di_hp_t hp; char *minor_name; + char *phys_path; - minor_name = di_minor_name(minor); + if ((minor_name = di_minor_name(minor)) == NULL) + return (DI_WALK_CONTINUE); /* * since PCIE/PCIHSHPC connectors have both hp nodes and minor nodes * created for now, we need to specifically exclude these connectors * during walking minor nodes. */ - if ((rnode = di_init(di_devfs_path(node), DINFOSUBTREE | DINFOHP)) - == DI_NODE_NIL) { + if ((phys_path = di_devfs_path(node)) == NULL) + return (DI_WALK_CONTINUE); + rnode = di_init(phys_path, DINFOSUBTREE | DINFOHP); + di_devfs_path_free(phys_path); + if (rnode == DI_NODE_NIL) return (DI_WALK_CONTINUE); - } for (hp = DI_HP_NIL; (hp = di_hp_next(rnode, hp)) != DI_HP_NIL; ) { if (strcmp(di_hp_name(hp), minor_name) == 0) { diff --git a/usr/src/lib/libdevinfo/devinfo.c b/usr/src/lib/libdevinfo/devinfo.c index 68e51960a2..678f891c90 100644 --- a/usr/src/lib/libdevinfo/devinfo.c +++ b/usr/src/lib/libdevinfo/devinfo.c @@ -1065,7 +1065,7 @@ di_driver_ops(di_node_t node) } /* - * returns the length of the path, caller must free memory + * Returns pointer to the allocated string, which must be freed by the caller. */ char * di_devfs_path(di_node_t node) |