sd-bus: add asserts for message size overflow safety

Coverity flags arithmetic in BUS_MESSAGE_SIZE(),
BUS_MESSAGE_BODY_BEGIN() and message_from_header() as potential
overflows. The values are validated at message creation time, but
add asserts to make the invariants explicit for static analyzers.

CID#1548023
CID#1548030
CID#1548046

Follow-up for 6629161f82
This commit is contained in:
Luca Boccassi
2026-03-30 09:37:31 +01:00
parent 56df6e5669
commit 55354d5930
2 changed files with 7 additions and 0 deletions
+2
View File
@@ -362,6 +362,8 @@ static int message_from_header(
if (label) {
label_sz = strlen(label);
/* Silence static analyzers */
assert(label_sz <= SIZE_MAX - ALIGN(sizeof(sd_bus_message)) - 1);
a += label_sz + 1;
}
+5
View File
@@ -153,6 +153,9 @@ static inline uint64_t BUS_MESSAGE_COOKIE(sd_bus_message *m) {
}
static inline size_t BUS_MESSAGE_SIZE(sd_bus_message *m) {
/* Silence static analyzers */
assert(ALIGN8(m->fields_size) <= SIZE_MAX - sizeof(BusMessageHeader));
assert(m->body_size <= SIZE_MAX - sizeof(BusMessageHeader) - ALIGN8(m->fields_size));
return
sizeof(BusMessageHeader) +
ALIGN8(m->fields_size) +
@@ -160,6 +163,8 @@ static inline size_t BUS_MESSAGE_SIZE(sd_bus_message *m) {
}
static inline size_t BUS_MESSAGE_BODY_BEGIN(sd_bus_message *m) {
/* Silence static analyzers */
assert(ALIGN8(m->fields_size) <= SIZE_MAX - sizeof(BusMessageHeader));
return
sizeof(BusMessageHeader) +
ALIGN8(m->fields_size);