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