On Wed, 10 Mar 2010, Wolfram Sang wrote:

> Hello,
> 
> I'd need another explanation, please :) Still using this script:
> 
> ===
> 
> @@
> type T;
> identifier client, data;
> @@
> 
> // Check if function uses clientdata
> (
>         i2c_set_clientdata(client, data);
> |
>         data = i2c_get_clientdata(client);
> |
>         T data = i2c_get_clientdata(client);
> )
> // Anything inbetween
>         ...
> // Check if clientdata gets NULLed before data is freed
> (
>         i2c_set_clientdata(client, NULL);
>         ...
>         kfree(data);
> |
> +       i2c_set_clientdata(client, NULL);
>         kfree(data);
>         ...
> -       i2c_set_clientdata(client, NULL);
> |
> +       i2c_set_clientdata(client, NULL);
> ?       kfree(data);
> )
> 
> ===
> 
> In general, this works well and finds ~100 occurences, but I get a roughly a
> dozen inconsistent control-flow paths when applying this patch to the drivers/
> directory. Trying to figure out what is causing this, I just checked
> drivers/media/radio/radio-tea5764.c. I found '-show_trying' and it told me the
> problem is in tea5764_i2c_probe() which is what I expected, too. I also found
> '-allow_inconsistent_paths' which gave me the patch I wanted (but I don't want
> to use this function unless I know better what it does).

The problem is that the semantic patch is modifying the code that is in 
front of the kfree, at the label errfr.  This label is reachable from the 
top of your function, at the various occurrences of goto errfr, which 
occur before the call to i2c_set_clientdata that appears at the beginning 
of your semantic patch.  That label is also reachable from code that 
follows the call to i2c_set_clientdata.  Perhaps in this case you don't 
care, if setting data to NULL doesn't harm anything.  The more elegant 
thing though would be for the i2c_set_clientdata(client, NULL); not to be 
right before the kfree but to be right before the label errfr.  But 
Coccinelle is not clever enough to do that by itself, so it just points 
out the problem.

In this case, I don't really see a good solution.  You may as well fix it 
by hand.

julia
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to