From 25bb459e3976bff35c86a65887f01ce4a779a3dc Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Sat, 13 Nov 2021 19:07:59 +0000 Subject: [PATCH 1/3] journal-remote: more handling of sd_event_source_set_enabled failures But avoid clobbering the return value if it works CID#1465793 CID#1465794 --- src/journal-remote/journal-remote.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index 0539d4d0bf..9fd6a23076 100644 --- a/src/journal-remote/journal-remote.c +++ b/src/journal-remote/journal-remote.c @@ -429,9 +429,14 @@ static int dispatch_raw_source_until_block(sd_event_source *event, sd_event_source_ref(event); r = journal_remote_handle_raw_source(event, source->importer.fd, EPOLLIN, journal_remote_server_global); - if (r != 1) + if (r != 1) { + int k; + /* No more data for now */ - sd_event_source_set_enabled(event, SD_EVENT_OFF); + k = sd_event_source_set_enabled(event, SD_EVENT_OFF); + if (k < 0) + r = k; + } sd_event_source_unref(event); @@ -449,10 +454,15 @@ static int dispatch_raw_source_event(sd_event_source *event, assert(source->buffer_event); r = journal_remote_handle_raw_source(event, fd, EPOLLIN, journal_remote_server_global); - if (r == 1) + if (r == 1) { + int k; + /* Might have more data. We need to rerun the handler * until we are sure the buffer is exhausted. */ - sd_event_source_set_enabled(source->buffer_event, SD_EVENT_ON); + k = sd_event_source_set_enabled(source->buffer_event, SD_EVENT_ON); + if (k < 0) + r = k; + } return r; } From 0a040e64199adf55dae85db12fbe8e9795f86a39 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Sat, 13 Nov 2021 19:11:28 +0000 Subject: [PATCH 2/3] sd-event: one more assert when turning off an event source CID#1465866 --- src/libsystemd/sd-event/sd-event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c index 37efe3f425..f9e2be155e 100644 --- a/src/libsystemd/sd-event/sd-event.c +++ b/src/libsystemd/sd-event/sd-event.c @@ -2959,7 +2959,7 @@ static int event_source_leave_ratelimit(sd_event_source *s, bool run_callback) { if (s->n_ref == 0) source_free(s); else if (r < 0) - sd_event_source_set_enabled(s, SD_EVENT_OFF); + assert_se(sd_event_source_set_enabled(s, SD_EVENT_OFF) >= 0); return 1; } From b798490f772e85289b4056734558f121788de523 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Sun, 14 Nov 2021 01:28:42 +0000 Subject: [PATCH 3/3] test-strxcpyx: check result of snprintf --- src/test/test-strxcpyx.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/test/test-strxcpyx.c b/src/test/test-strxcpyx.c index 4b6d8ebce3..c68fe3c064 100644 --- a/src/test/test-strxcpyx.c +++ b/src/test/test-strxcpyx.c @@ -83,10 +83,13 @@ static void test_sd_event_code_migration(void) { char c[100 * DECIMAL_STR_MAX(unsigned) + 1], *p; unsigned i; size_t l; - int o; + int o, r; - for (i = o = 0; i < 100; i++) - o += snprintf(&b[o], sizeof(b) - o, "%u ", i); + for (i = o = 0; i < 100; i++) { + r = snprintf(&b[o], sizeof(b) - o, "%u ", i); + assert_se(r >= 0 && r < (int) sizeof(b) - o); + o += r; + } p = c; l = sizeof(c);