1 #include "check_debug.h" 2 3 int frob(void); 4 #define get_user(x, y) ({ int __val_gu = frob(); x = __val_gu; 0; }) 5 6 void func(void) 7 { 8 int *user_ptr; 9 int foo, bar; 10 unsigned int x; 11 12 get_user(foo, user_ptr); 13 bar = foo + 1; 14 15 get_user(bar, user_ptr); 16 if (bar > foo) 17 bar = foo; 18 foo = bar * 8; 19 20 get_user(x, user_ptr); 21 if (x > foo) 22 x = foo; 23 foo = x * 8; 24 25 get_user(x, user_ptr); 26 foo = x * 8; 27 } 28 /* 29 * check-name: smatch get_user() #1 30 * check-command: smatch -p=kernel -I.. sm_get_user1.c 31 * 32 * check-output-start 33 sm_get_user1.c:13 func() warn: check for integer over/underflow 'foo' 34 sm_get_user1.c:18 func() warn: check for integer underflow 'bar' 35 sm_get_user1.c:26 func() warn: check for integer overflow 'x' 36 * check-output-end 37 */ 38