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 Levonint 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