diff options
| author | Marcel Telka <marcel@telka.sk> | 2019-11-11 07:59:33 +0100 |
|---|---|---|
| committer | Dan McDonald <danmcd@joyent.com> | 2019-11-14 11:19:43 -0500 |
| commit | f67d64d998ff666158cc5231b7e80c11c3e922e0 (patch) | |
| tree | 33d29569336d741a4fbe2df7ad27d3dd9bf42a33 | |
| parent | f0c1c263e90642997cf3e76484abec617782ddb8 (diff) | |
| download | illumos-joyent-f67d64d998ff666158cc5231b7e80c11c3e922e0.tar.gz | |
11954 rpcmod: Possible memory leak in connmgr_get()
11955 clnt_cots: kmem_free(NULL, 0) is legal
Reviewed by: Vitaliy Gusev <gusev.vitaliy@icloud.com>
Reviewed by: Andy Fiddaman <omnios@citrus-it.co.uk>
Approved by: Dan McDonald <danmcd@joyent.com>
| -rw-r--r-- | usr/src/uts/common/rpc/clnt_cots.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/usr/src/uts/common/rpc/clnt_cots.c b/usr/src/uts/common/rpc/clnt_cots.c index 0c75b6dca6..d15710d467 100644 --- a/usr/src/uts/common/rpc/clnt_cots.c +++ b/usr/src/uts/common/rpc/clnt_cots.c @@ -624,6 +624,7 @@ clnt_cots_kcreate(dev_t dev, struct netbuf *addr, int family, rpcprog_t prog, * The zalloc initialized the fields below. * p->cku_xid = 0; * p->cku_flags = 0; + * p->cku_srcaddr.buf = NULL; * p->cku_srcaddr.len = 0; * p->cku_srcaddr.maxlen = 0; */ @@ -1580,8 +1581,7 @@ clnt_cots_kinit(CLIENT *h, dev_t dev, int family, struct netbuf *addr, p->cku_cred = cred; if (p->cku_addr.maxlen < addr->len) { - if (p->cku_addr.maxlen != 0 && p->cku_addr.buf != NULL) - kmem_free(p->cku_addr.buf, p->cku_addr.maxlen); + kmem_free(p->cku_addr.buf, p->cku_addr.maxlen); p->cku_addr.buf = kmem_zalloc(addr->maxlen, KM_SLEEP); p->cku_addr.maxlen = addr->maxlen; } @@ -1934,9 +1934,7 @@ use_new_conn: * a later retry. */ if (srcaddr->len != lru_entry->x_src.len) { - if (srcaddr->len > 0) - kmem_free(srcaddr->buf, - srcaddr->maxlen); + kmem_free(srcaddr->buf, srcaddr->maxlen); ASSERT(lru_entry->x_src.len != 0); srcaddr->buf = kmem_alloc( lru_entry->x_src.len, KM_SLEEP); @@ -2442,8 +2440,7 @@ connmgr_wrapconnect( * in case of a later retry. */ if (srcaddr->len != cm_entry->x_src.len) { - if (srcaddr->maxlen > 0) - kmem_free(srcaddr->buf, srcaddr->maxlen); + kmem_free(srcaddr->buf, srcaddr->maxlen); ASSERT(cm_entry->x_src.len != 0); srcaddr->buf = kmem_alloc(cm_entry->x_src.len, KM_SLEEP); @@ -2569,10 +2566,8 @@ connmgr_close(struct cm_xprt *cm_entry) cv_destroy(&cm_entry->x_conn_cv); cv_destroy(&cm_entry->x_dis_cv); - if (cm_entry->x_server.buf != NULL) - kmem_free(cm_entry->x_server.buf, cm_entry->x_server.maxlen); - if (cm_entry->x_src.buf != NULL) - kmem_free(cm_entry->x_src.buf, cm_entry->x_src.maxlen); + kmem_free(cm_entry->x_server.buf, cm_entry->x_server.maxlen); + kmem_free(cm_entry->x_src.buf, cm_entry->x_src.maxlen); kmem_free(cm_entry, sizeof (struct cm_xprt)); } |
