diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-06-12 11:50:17 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-06-12 11:50:17 +0000 |
commit | aecb08e40876f4c921b2eafb54c43fd32677e5be (patch) | |
tree | 14e0349c4b2ae4d4a25d9a98ed11af047f192b7e | |
parent | 4c78fc3e5b0d1c38fb0b386c8f39b7f13fef4672 (diff) | |
parent | 7fa359c09493c7b56e7c3e98fccc7e5cc0f09b48 (diff) | |
download | illumos-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.c | 6 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdlether.c | 4 |
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; + } } |