1 #include "check_debug.h" 2 3 int copy_from_user(void *dest, void *src, int size); 4 5 struct ear { 6 int x, y; 7 }; 8 9 void *src; 10 int returns_user_data(void) 11 { 12 int x; 13 14 copy_from_user(&x, src, sizeof(int)); 15 return x; 16 } 17 18 struct ear *dest; 19 struct ear *returns_user_member(void) 20 { 21 copy_from_user(&dest->x, src, sizeof(int)); 22 return dest; 23 } 24 void test(void) 25 { 26 struct ear *p; 27 int x; 28 29 x = returns_user_data(); 30 __smatch_user_rl(x); 31 p = returns_user_member(); 32 __smatch_user_rl(p); 33 __smatch_user_rl(p->x); 34 } 35 36 /* 37 * check-name: smatch user data #4 38 * check-command: smatch -p=kernel -I.. sm_user_data4.c 39 * 40 * check-output-start 41 sm_user_data4.c:30 test() user rl: 'x' = 's32min-s32max' 42 sm_user_data4.c:32 test() user rl: 'p' = '' 43 sm_user_data4.c:33 test() user rl: 'p->x' = 's32min-s32max' 44 * check-output-end 45 */