From c2806a8c1d6b775fb73516ef62b9f66e7cc00310 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 19 Aug 2026 01:22:52 +0900 Subject: [PATCH] journal: do not accept multiple requests to sync journal per varlink connection Otherwise, previously allocated SyncReq object will be leaked, and the latest SyncReq object will be freed multiple times. --- src/journal/journald-varlink.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/journal/journald-varlink.c b/src/journal/journald-varlink.c index fb0d463c4f..cbadbca777 100644 --- a/src/journal/journald-varlink.c +++ b/src/journal/journald-varlink.c @@ -40,11 +40,17 @@ static int vl_method_synchronize(sd_varlink *link, sd_json_variant *parameters, {} }; - Manager *m = ASSERT_PTR(userdata); int r; assert(link); + /* Here, userdata may not be a pointer to the Manager object. Obtain the manager from the server. */ + Manager *m = ASSERT_PTR(sd_varlink_server_get_userdata(sd_varlink_get_server(link))); + + /* The varlink connection already requested to sync journals. Refusing. */ + if (sd_varlink_get_userdata(link) != m) + return -EBUSY; + r = sd_varlink_dispatch(link, parameters, dispatch_table, &offline); if (r != 0) return r;