From: Lennart Poettering Date: Wed, 15 Jun 2016 20:41:56 +0000 (+0200) Subject: sd-bus: make sure bus_map_all_properties() handle booleans right X-Git-Tag: v231.3~92 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=1443d4b2e7210724b40411b108b1e2d30063ca5d sd-bus: make sure bus_map_all_properties() handle booleans right sd-bus generally exposes bools as "int" instead of "bool" in the public API. This is relevant when unmarshaling booleans, as the relevant functions expect an int* pointer and no bool* pointer. Since sizeof(bool) is not necessarily the same as sizeof(int) this is problematic and might result in memory corruption. Let's fix this, and make sure bus_map_all_properties() handles booleans as ints, as the rest of sd-bus, and make all users of it expect the right thing. --- diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 7d71e2e1c..abc3cf38c 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -318,7 +318,7 @@ typedef struct SessionStatusInfo { char *seat; char *tty; char *display; - bool remote; + int remote; char *remote_host; char *remote_user; char *service; @@ -332,7 +332,7 @@ typedef struct SessionStatusInfo { typedef struct UserStatusInfo { uid_t uid; - bool linger; + int linger; char *name; struct dual_timestamp timestamp; char *state; diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index 12b091ceb..ebfe2255f 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -1052,7 +1052,7 @@ static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_ case SD_BUS_TYPE_BOOLEAN: { unsigned b; - bool *p = userdata; + int *p = userdata; r = sd_bus_message_read_basic(m, type, &b); if (r < 0)