From ff1b9d4250597471cd93600ae45c5c65e766d3ef Mon Sep 17 00:00:00 2001 From: JJL772 Date: Wed, 21 Jul 2021 17:02:12 -0700 Subject: [PATCH] Fix potential memory leak on error In osdThread.c for POSIX if pthread_create_key fails In iocLogServer.c if fdmgr_init returns NULL In dbBkpt.c if semaphore creation fails while adding a bp to a lockset In devSiSoftCallback.c if linked record is not found --- modules/database/src/ioc/db/dbBkpt.c | 1 + modules/database/src/std/dev/devSiSoftCallback.c | 1 + modules/libcom/src/log/iocLogServer.c | 1 + modules/libcom/src/osi/os/posix/osdThread.c | 4 +++- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/database/src/ioc/db/dbBkpt.c b/modules/database/src/ioc/db/dbBkpt.c index 18a357ebe..a32ebab4e 100644 --- a/modules/database/src/ioc/db/dbBkpt.c +++ b/modules/database/src/ioc/db/dbBkpt.c @@ -331,6 +331,7 @@ long dbb(const char *record_name) if (pnode->ex_sem == NULL) { printf(" BKPT> Out of memory\n"); dbScanUnlock(precord); + free(pnode); epicsMutexUnlock(bkpt_stack_sem); return(1); } diff --git a/modules/database/src/std/dev/devSiSoftCallback.c b/modules/database/src/std/dev/devSiSoftCallback.c index 85ec4fcad..f52d595c1 100644 --- a/modules/database/src/std/dev/devSiSoftCallback.c +++ b/modules/database/src/std/dev/devSiSoftCallback.c @@ -108,6 +108,7 @@ static long add_record(dbCommon *pcommon) recGblRecordError(status, (void *)prec, "devSiSoftCallback (add_record) linked record not found"); + free(pdevPvt); return status; } diff --git a/modules/libcom/src/log/iocLogServer.c b/modules/libcom/src/log/iocLogServer.c index 732316196..08f9eca5f 100644 --- a/modules/libcom/src/log/iocLogServer.c +++ b/modules/libcom/src/log/iocLogServer.c @@ -113,6 +113,7 @@ int main(void) pserver->pfdctx = (void *) fdmgr_init(); if (!pserver->pfdctx) { + free(pserver); fprintf(stderr, "iocLogServer: %s\n", strerror(errno)); return IOCLS_ERROR; } diff --git a/modules/libcom/src/osi/os/posix/osdThread.c b/modules/libcom/src/osi/os/posix/osdThread.c index 541408fad..664804738 100644 --- a/modules/libcom/src/osi/os/posix/osdThread.c +++ b/modules/libcom/src/osi/os/posix/osdThread.c @@ -956,8 +956,10 @@ LIBCOM_API epicsThreadPrivateId epicsStdCall epicsThreadPrivateCreate(void) return NULL; status = pthread_key_create(key,0); checkStatus(status,"pthread_key_create epicsThreadPrivateCreate"); - if(status) + if(status) { + free(key); return NULL; + } return((epicsThreadPrivateId)key); }