From 7bf2fcb6e3eba9a8af5ceb2ccd30147931ffa70c Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Mon, 6 Jan 2020 23:56:59 +0100 Subject: [PATCH] Fix Coverity CID 265222, guard init_request::data member Signed-off-by: Joachim Nilsson --- src/api.c | 3 +++ src/finit.h | 4 +++- src/initctl.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/api.c b/src/api.c index 5576608d..6679b1ec 100644 --- a/src/api.c +++ b/src/api.c @@ -275,6 +275,9 @@ static void api_cb(uev_t *w, void *arg, int events) break; } + /* Make sure no API using init_request::data can be abused */ + rq.data_guard = 0; + if (rq.magic != INIT_MAGIC || len != sizeof(rq)) { _e("Invalid initctl request"); break; diff --git a/src/finit.h b/src/finit.h index 57b34c4b..683aa3b1 100644 --- a/src/finit.h +++ b/src/finit.h @@ -84,12 +84,14 @@ #define INIT_CMD_NACK 254 #define INIT_CMD_ACK 255 +/* Traditionally aligned on 384 bytes */ struct init_request { int magic; /* Magic number */ int cmd; /* What kind of request */ int runlevel; /* Runlevel to change to */ int sleeptime; /* Time between TERM and KILL */ - char data[368]; + char data[367]; + char data_guard; /* Forced to '\0' by Finit */ }; extern int runlevel; diff --git a/src/initctl.c b/src/initctl.c index 3dc4dfa8..43195ff7 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -204,7 +204,7 @@ static void show_cond_one(const char *_conds) static int do_cond_magic(char op, char *cond) { - char event[368]; /* sizeof(init_request.data) */ + char event[367]; /* sizeof(init_request.data) */ if (!cond || strlen(cond) < 1) return 1;