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