summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorRyan Zezeski <rpz@joyent.com>2020-06-28 08:01:52 -0600
committerRobert Mustacchi <rm@fingolfin.org>2020-07-01 18:41:41 -0700
commitdaa7e8a345b2e0424e612017e8ead2e97b0f7f37 (patch)
treebe81d2ca39782d86b954e8c35280044e117d222b /usr/src
parent4ebabf216cc42b93907be4a8b051040e2e9a3597 (diff)
downloadillumos-joyent-daa7e8a345b2e0424e612017e8ead2e97b0f7f37.tar.gz
12905 drv_ioc_prop_common could leak memory and holds
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Reviewed by: Igor Kozhukhov <igor@dilos.org> Reviewed by: Paul Winder <paul@winders.demon.co.uk> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Robert Mustacchi <rm@fingolfin.org>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/dld/dld_drv.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/usr/src/uts/common/io/dld/dld_drv.c b/usr/src/uts/common/io/dld/dld_drv.c
index cfe0f78415..eca17349c3 100644
--- a/usr/src/uts/common/io/dld/dld_drv.c
+++ b/usr/src/uts/common/io/dld/dld_drv.c
@@ -717,8 +717,18 @@ drv_ioc_prop_common(dld_ioc_macprop_t *prop, intptr_t arg, boolean_t set,
else
err = drv_ioc_clrap(linkid);
} else {
- if (kprop->pr_valsize == 0)
- return (ENOBUFS);
+ /*
+ * You might think that the earlier call to
+ * mac_prop_check_size() should catch this but
+ * it can't. The autopush prop uses 0 as a
+ * sentinel value to clear the prop. This
+ * check ensures we don't allow a get with a
+ * valsize of 0.
+ */
+ if (kprop->pr_valsize == 0) {
+ err = ENOBUFS;
+ goto done;
+ }
kprop->pr_perm_flags = MAC_PROP_PERM_RW;
err = drv_ioc_getap(linkid, dlap);