diff options
author | San Mehat <san@google.com> | 2009-05-14 14:54:22 -0700 |
---|---|---|
committer | San Mehat <san@google.com> | 2009-05-14 15:08:04 -0700 |
commit | c83cd879d45e667fbb4763f18c908928ee9d67d8 (patch) | |
tree | 938b1fa73b95efdf25325ab5a93dc744c7235e98 /init | |
parent | 54a1eb7677a10c1591ba48562ae480cd71721bf6 (diff) | |
download | system_core-c83cd879d45e667fbb4763f18c908928ee9d67d8.zip system_core-c83cd879d45e667fbb4763f18c908928ee9d67d8.tar.gz system_core-c83cd879d45e667fbb4763f18c908928ee9d67d8.tar.bz2 |
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 <san@google.com>
Diffstat (limited to 'init')
-rw-r--r-- | init/init.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/init/init.h b/init/init.h index c9363da..b93eb50 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); |