From c39fc2a9bfdfae041b8801dfe4ac33c60543f4d0 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 13 Jan 2016 14:09:55 +0300 Subject: [PATCH] user_data2: always set *foo to user data Say you have: if (copy_from_user(&foo, src, sizeof(foo))) ... Before if "foo" was not a struct we would set *foo to user data, but if it was a struct then we would set all the members foo->bar, foo->baz to user data. Now we set all the members but we also set *foo as well. The reason is that if we cast foo so we have different member names then we need to assume those members are user data. Signed-off-by: Dan Carpenter --- check_user_data2.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/check_user_data2.c b/check_user_data2.c index 615ad8f1..3d91574e 100644 --- a/check_user_data2.c +++ b/check_user_data2.c @@ -182,6 +182,8 @@ static void tag_as_user_data(struct expression *expr) if (type->type == SYM_STRUCT) { if (expr->type != EXPR_PREOP || expr->op != '&') expr = deref_expression(expr); + else + set_state_expr(my_id, deref_expression(expr), alloc_estate_whole(&ulong_ctype)); tag_struct_members(type, expr); } } -- 2.11.4.GIT