From 85e373a37d6061e3e62dd96e38cf8abc2cf96225 Mon Sep 17 00:00:00 2001 From: Daniel Mack Date: Wed, 22 Oct 2014 11:49:05 +0200 Subject: [PATCH] test: use kdbus_msg_dump() to check for message integrity Make kdbus_msg_dump() return an error in case there's anything wrong with the message. Return such errors from kdbus_msg_recv(). We currently fail with notifications. Signed-off-by: Daniel Mack --- test/kdbus-util.c | 16 +++++++++++++--- test/kdbus-util.h | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/test/kdbus-util.c b/test/kdbus-util.c index 2eef0e7..c05c211 100644 --- a/test/kdbus-util.c +++ b/test/kdbus-util.c @@ -465,13 +465,14 @@ static char *msg_id(uint64_t id, char *buf) return buf; } -void kdbus_msg_dump(const struct kdbus_conn *conn, const struct kdbus_msg *msg) +int kdbus_msg_dump(const struct kdbus_conn *conn, const struct kdbus_msg *msg) { const struct kdbus_item *item = msg->items; char buf_src[32]; char buf_dst[32]; uint64_t timeout = 0; uint64_t cookie_reply = 0; + int ret = 0; if (msg->flags & KDBUS_MSG_FLAGS_EXPECT_REPLY) timeout = msg->timeout_ns; @@ -490,6 +491,7 @@ void kdbus_msg_dump(const struct kdbus_conn *conn, const struct kdbus_msg *msg) if (item->size < KDBUS_ITEM_HEADER_SIZE) { kdbus_printf(" +%s (%llu bytes) invalid data record\n", enum_MSG(item->type), item->size); + ret = -EINVAL; break; } @@ -677,10 +679,14 @@ void kdbus_msg_dump(const struct kdbus_conn *conn, const struct kdbus_msg *msg) } } - if ((char *)item - ((char *)msg + msg->size) >= 8) + if ((char *)item - ((char *)msg + msg->size) >= 8) { kdbus_printf("invalid padding at end of message\n"); + ret = -EINVAL; + } kdbus_printf("\n"); + + return ret; } void kdbus_msg_free(struct kdbus_msg *msg) @@ -724,7 +730,11 @@ int kdbus_msg_recv(struct kdbus_conn *conn, } msg = (struct kdbus_msg *)(conn->buf + recv.offset); - kdbus_msg_dump(conn, msg); + ret = kdbus_msg_dump(conn, msg); + if (ret < 0) { + kdbus_msg_free(msg); + return ret; + } if (msg_out) { *msg_out = msg; diff --git a/test/kdbus-util.h b/test/kdbus-util.h index 962620b..6dc2623 100644 --- a/test/kdbus-util.h +++ b/test/kdbus-util.h @@ -106,8 +106,8 @@ int kdbus_msg_recv(struct kdbus_conn *conn, int kdbus_msg_recv_poll(struct kdbus_conn *conn, int timeout_ms, struct kdbus_msg **msg_out, uint64_t *offset); int kdbus_free(const struct kdbus_conn *conn, uint64_t offset); -void kdbus_msg_dump(const struct kdbus_conn *conn, - const struct kdbus_msg *msg); +int kdbus_msg_dump(const struct kdbus_conn *conn, + const struct kdbus_msg *msg); int kdbus_create_bus(int control_fd, const char *name, char **path); int kdbus_msg_send(const struct kdbus_conn *conn, const char *name, uint64_t cookie, uint64_t flags, uint64_t timeout, -- 2.34.1