From 859a28767926e9ff8f62f0cc76976eb6d1e52d47 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 14 Aug 2012 10:48:41 +0300 Subject: [PATCH] user_data: syscalls are a source of user data All the data passed to a syscall is user data. Signed-off-by: Dan Carpenter --- check_user_data.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/check_user_data.c b/check_user_data.c index f0b6c0f3..25de7a70 100644 --- a/check_user_data.c +++ b/check_user_data.c @@ -125,6 +125,22 @@ void set_param_user_data(const char *name, struct symbol *sym, char *key, char * set_state(my_id, fullname, sym, &user_data); } +static void match_syscall_definition(struct symbol *sym) +{ + struct symbol *arg; + char *macro; + + macro = get_macro_name(sym->pos); + if (!macro) + return; + if (strncmp("SYSCALL_DEFINE", macro, strlen("SYSCALL_DEFINE"))) + return; + + FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) { + set_state(my_id, arg->ident->name, arg, &user_data); + } END_FOR_EACH_PTR(arg); +} + static void match_condition(struct expression *expr) { switch (expr->op) { @@ -302,6 +318,7 @@ void check_user_data(int id) return; my_id = id; add_definition_db_callback(set_param_user_data, USER_DATA); + add_hook(&match_syscall_definition, FUNC_DEF_HOOK); add_hook(match_call_assignment, CALL_ASSIGNMENT_HOOK); add_hook(&match_condition, CONDITION_HOOK); add_hook(&match_assign, ASSIGNMENT_HOOK); -- 2.11.4.GIT