summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2020-06-12 11:50:17 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2020-06-12 11:50:17 +0000
commitaecb08e40876f4c921b2eafb54c43fd32677e5be (patch)
tree14e0349c4b2ae4d4a25d9a98ed11af047f192b7e
parent4c78fc3e5b0d1c38fb0b386c8f39b7f13fef4672 (diff)
parent7fa359c09493c7b56e7c3e98fccc7e5cc0f09b48 (diff)
downloadillumos-joyent-aecb08e40876f4c921b2eafb54c43fd32677e5be.tar.gz
[illumos-gate merge]
commit 7fa359c09493c7b56e7c3e98fccc7e5cc0f09b48 12820 failure in dladm_ether_info() can lead to a double free
-rw-r--r--usr/src/cmd/dladm/dladm.c6
-rw-r--r--usr/src/lib/libdladm/common/libdlether.c4
2 files changed, 6 insertions, 4 deletions
diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c
index a69b3da081..c59926be94 100644
--- a/usr/src/cmd/dladm/dladm.c
+++ b/usr/src/cmd/dladm/dladm.c
@@ -7857,8 +7857,9 @@ show_etherprop(dladm_handle_t dh, datalink_id_t linkid, void *arg)
}
status = dladm_ether_info(dh, linkid, &eattr);
- if (status != DLADM_STATUS_OK)
- goto cleanup;
+ if (status != DLADM_STATUS_OK) {
+ return (DLADM_WALK_CONTINUE);
+ }
(void) strlcpy(ebuf.eth_ptype, "current", sizeof (ebuf.eth_ptype));
@@ -7880,7 +7881,6 @@ show_etherprop(dladm_handle_t dh, datalink_id_t linkid, void *arg)
if (statep->es_extended)
show_ether_xprop(arg, &eattr);
-cleanup:
dladm_ether_info_done(&eattr);
return (DLADM_WALK_CONTINUE);
}
diff --git a/usr/src/lib/libdladm/common/libdlether.c b/usr/src/lib/libdladm/common/libdlether.c
index 4e3a7ead4c..2914174f62 100644
--- a/usr/src/lib/libdladm/common/libdlether.c
+++ b/usr/src/lib/libdladm/common/libdlether.c
@@ -375,6 +375,8 @@ dladm_ether_info_done(dladm_ether_info_t *eattr)
{
int i;
- for (i = CURRENT; i <= PEERADV; i++)
+ for (i = CURRENT; i <= PEERADV; i++) {
free(eattr->lei_attr[i].le_spdx);
+ eattr->lei_attr[i].le_spdx = NULL;
+ }
}