]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsmonitor: plug token-data leak on early daemon-startup failures
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sun, 5 Jul 2026 08:24:28 +0000 (08:24 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 5 Jul 2026 16:12:10 +0000 (09:12 -0700)
`fsmonitor_run_daemon()` allocates `state.current_token_data`
before any subordinate setup step that may fail (alias resolution,
listener/health constructors, asynchronous IPC server init). On
the successful path the listener thread takes ownership and clears
the field during its teardown, so the `done:` cleanup block sees a
NULL pointer. On every early-error path, however, control jumps
straight to `done:` with the freshly allocated token data still
referenced, and it is never freed, as Coverity flagged.

Free it at the top of `done:` and clear the pointer. The success
path is a no-op (the pointer is already NULL there); the error
paths now drop the otherwise-leaked allocation.
`fsmonitor_free_token_data()` is NULL-safe and asserts
`client_ref_count == 0`, which holds trivially here because the
IPC server has not yet begun accepting clients when these failures
occur.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fsmonitor--daemon.c

index f920cf3a8202f69b6eea2c2065babc919a4ce168..4161dd82825b4cbb69f01cb3b9bbe3f4687546f6 100644 (file)
@@ -1418,6 +1418,8 @@ static int fsmonitor_run_daemon(void)
        err = fsmonitor_run_daemon_1(&state);
 
 done:
+       fsmonitor_free_token_data(state.current_token_data);
+       state.current_token_data = NULL;
        pthread_cond_destroy(&state.cookies_cond);
        pthread_mutex_destroy(&state.main_lock);
        {