From a1d5f94fd564c736e2a4cb5bd52ade382c3efbe6 Mon Sep 17 00:00:00 2001 From: David Rheinsberg Date: Tue, 17 Oct 2023 11:56:32 +0200 Subject: [PATCH] bus/driver: send correct fd-count with credentials Fix the GetConnectionCredentials() API to send the correct number of FDs with a message. We have to predict the number of FDs since we write message headers before their body. This should be fine to predict, though. Signed-off-by: David Rheinsberg --- src/bus/driver.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bus/driver.c b/src/bus/driver.c index 4a9a3b7f..6fff07a6 100644 --- a/src/bus/driver.c +++ b/src/bus/driver.c @@ -1438,7 +1438,7 @@ static int driver_method_get_connection_credentials(Peer *peer, const char *path DriverCredentials cred = DRIVER_CREDENTIALS_NULL; Peer *connection = NULL; const char *name; - size_t n_fds = 0; + size_t n_fds = 0, n_fds_expected; int r; c_dvar_read(in_v, "(s)", &name); @@ -1453,14 +1453,15 @@ static int driver_method_get_connection_credentials(Peer *peer, const char *path return DRIVER_E_PEER_NOT_FOUND; } - driver_write_reply_header(out_v, peer, serial, driver_type_out_apsv, n_fds); + driver_fetch_credentials(peer->bus, connection, &cred); + n_fds_expected = (cred.pid_fd >= 0) ? 1 : 0; + driver_write_reply_header(out_v, peer, serial, driver_type_out_apsv, n_fds_expected); c_dvar_write(out_v, "("); - driver_fetch_credentials(peer->bus, connection, &cred); driver_append_credentials(out_v, &cred, &n_fds); c_dvar_write(out_v, ")"); - c_assert(n_fds == 0 || n_fds == 1); + c_assert(n_fds == n_fds_expected); if (n_fds == 1) r = driver_send_reply_with_fds(peer, out_v, serial, &cred.pid_fd, n_fds);