From f3c8e16ea59b9e02249da313c4d0b39a7c6c0afc Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Thu, 2 Jun 2016 15:52:34 +0000 Subject: [PATCH] taskqueue: plug a leak in _taskqueue_create While here make some style fixes and postpone the sprintf so that it is only done when the function can no longer fail. CID: 1356041 --- sys/kern/subr_taskqueue.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sys/kern/subr_taskqueue.c b/sys/kern/subr_taskqueue.c index 00cb46f88b28..4be29f583ee5 100644 --- a/sys/kern/subr_taskqueue.c +++ b/sys/kern/subr_taskqueue.c @@ -130,14 +130,16 @@ _taskqueue_create(const char *name, int mflags, char *tq_name; tq_name = malloc(TASKQUEUE_NAMELEN, M_TASKQUEUE, mflags | M_ZERO); - if (!tq_name) + if (tq_name == NULL) return (NULL); - snprintf(tq_name, TASKQUEUE_NAMELEN, "%s", (name) ? name : "taskqueue"); - queue = malloc(sizeof(struct taskqueue), M_TASKQUEUE, mflags | M_ZERO); - if (!queue) + if (queue == NULL) { + free(tq_name, M_TASKQUEUE); return (NULL); + } + + snprintf(tq_name, TASKQUEUE_NAMELEN, "%s", (name) ? name : "taskqueue"); STAILQ_INIT(&queue->tq_queue); TAILQ_INIT(&queue->tq_active);