1*1f5207b7SJohn Levon #include "check_debug.h"
2*1f5207b7SJohn Levon 
3*1f5207b7SJohn Levon struct sk_buff {
4*1f5207b7SJohn Levon 	unsigned char *head, *data;
5*1f5207b7SJohn Levon 	unsigned short network_header;
6*1f5207b7SJohn Levon };
7*1f5207b7SJohn Levon 
8*1f5207b7SJohn Levon struct foo {
9*1f5207b7SJohn Levon 	int a, b, c;
10*1f5207b7SJohn Levon };
11*1f5207b7SJohn Levon 
frob(struct sk_buff * skb)12*1f5207b7SJohn Levon int frob(struct sk_buff *skb)
13*1f5207b7SJohn Levon {
14*1f5207b7SJohn Levon 	struct foo *p;
15*1f5207b7SJohn Levon 
16*1f5207b7SJohn Levon 	p = skb->data + sizeof(int) * 2;
17*1f5207b7SJohn Levon 	__smatch_user_rl(p->a);
18*1f5207b7SJohn Levon 
19*1f5207b7SJohn Levon 	return 0;
20*1f5207b7SJohn Levon }
21*1f5207b7SJohn Levon 
22*1f5207b7SJohn Levon /*
23*1f5207b7SJohn Levon  * check-name: smatch: userdata from skb #3
24*1f5207b7SJohn Levon  * check-command: smatch -p=kernel -I.. sm_skb3.c
25*1f5207b7SJohn Levon  *
26*1f5207b7SJohn Levon  * check-output-start
27*1f5207b7SJohn Levon sm_skb3.c:17 frob() user rl: 'p->a' = 's32min-s32max'
28*1f5207b7SJohn Levon  * check-output-end
29*1f5207b7SJohn Levon  */
30