xref: /illumos-gate/usr/src/tools/smatch/src/validation/sm_get_user1.c (revision 45ede40b2394db7967e59f19288fae9b62efd4aa)
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