From c83cd879d45e667fbb4763f18c908928ee9d67d8 Mon Sep 17 00:00:00 2001 From: San Mehat Date: Thu, 14 May 2009 14:54:22 -0700 Subject: init: Fix heap corruption for services with arguments The 'args' array *must* be the last entry in the structure. This fixes a longstanding issue (apparently since tc3) where a service with an argument would corrupt the heap. The more arguments, the more corruption :|. This will probably also end up making key-code bound services more reliable (ie: bugreports triggered via the keyboard) Signed-off-by: San Mehat --- init/init.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'init') diff --git a/init/init.h b/init/init.h index c9363daf..b93eb50a 100644 --- a/init/init.h +++ b/init/init.h @@ -137,15 +137,17 @@ struct service { struct socketinfo *sockets; struct svcenvinfo *envvars; - int nargs; - char *args[1]; struct action onrestart; /* Actions to execute on restart. */ /* keycodes for triggering this service via /dev/keychord */ int *keycodes; int nkeycodes; int keychord_id; -}; + + int nargs; + /* "MUST BE AT THE END OF THE STRUCT" */ + char *args[1]; +}; /* ^-------'args' MUST be at the end of this struct! */ int parse_config_file(const char *fn); -- cgit v1.2.3