mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
perf cs-etm: Fix thread leaks on trace queue init failure
cs_etm__init_traceid_queue() allocates the frontend and decode threads,
if a later allocation fails, the error path does not drop thread
reference that was already acquired.
Release both thread pointers with thread__zput() on the error path, so
does not leak thread references or leave stale pointers behind.
Fixes: 951ccccdc7 ("perf cs-etm: Only track threads instead of PID and TIDs")
Reviewed-by: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
3ec1248747
commit
50cd0d54f1
|
|
@ -645,6 +645,8 @@ static int cs_etm__init_traceid_queue(struct cs_etm_queue *etmq,
|
|||
queue->tid);
|
||||
tidq->decode_thread = machine__findnew_thread(&etm->session->machines.host, -1,
|
||||
queue->tid);
|
||||
if (!tidq->frontend_thread || !tidq->decode_thread)
|
||||
goto out;
|
||||
|
||||
tidq->packet = zalloc(sizeof(struct cs_etm_packet));
|
||||
if (!tidq->packet)
|
||||
|
|
@ -679,6 +681,8 @@ static int cs_etm__init_traceid_queue(struct cs_etm_queue *etmq,
|
|||
zfree(&tidq->prev_packet);
|
||||
zfree(&tidq->packet);
|
||||
out:
|
||||
thread__zput(tidq->frontend_thread);
|
||||
thread__zput(tidq->decode_thread);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user