1*1f5207b7SJohn Levon 
2*1f5207b7SJohn Levon void kfree(void *);
3*1f5207b7SJohn Levon 
4*1f5207b7SJohn Levon struct net_device {
5*1f5207b7SJohn Levon 	char *name;
6*1f5207b7SJohn Levon };
7*1f5207b7SJohn Levon 
func(void)8*1f5207b7SJohn Levon void func(void)
9*1f5207b7SJohn Levon {
10*1f5207b7SJohn Levon 	struct net_device dev;
11*1f5207b7SJohn Levon 	struct net_device *dev2 = &dev;
12*1f5207b7SJohn Levon 	struct net_device **dev3 = &dev2;
13*1f5207b7SJohn Levon 	struct net_device *deva[10];
14*1f5207b7SJohn Levon 	struct net_device **devb[10];
15*1f5207b7SJohn Levon 	struct net_device ***devc = devb;
16*1f5207b7SJohn Levon 
17*1f5207b7SJohn Levon 	kfree(dev2);
18*1f5207b7SJohn Levon 	kfree(dev3);
19*1f5207b7SJohn Levon 	kfree(deva[0]);
20*1f5207b7SJohn Levon 	kfree(devb[0]);
21*1f5207b7SJohn Levon 	kfree(devc[0]);
22*1f5207b7SJohn Levon }
23*1f5207b7SJohn Levon /*
24*1f5207b7SJohn Levon  * check-name: free_netdev() vs kfree()
25*1f5207b7SJohn Levon  * check-command: smatch -p=kernel sm_netdevice.c
26*1f5207b7SJohn Levon  *
27*1f5207b7SJohn Levon  * check-output-start
28*1f5207b7SJohn Levon sm_netdevice.c:17 func() error: use free_netdev() here instead of kfree(dev2)
29*1f5207b7SJohn Levon sm_netdevice.c:19 func() error: use free_netdev() here instead of kfree(deva[0])
30*1f5207b7SJohn Levon  * check-output-end
31*1f5207b7SJohn Levon  */
32