* Re: [v6] coccinelle: semantic code search for missing put_device()
[not found] <HK0PR02MB36344E2B29CEB195892F6420B2610@HK0PR02MB3634.apcprd02.prod.outlook.com>
@ 2019-02-16 18:39 ` Markus Elfring
[not found] ` <HK0PR02MB3634E4B3441651D4F7737399B2620@HK0PR02MB3634.apcprd02.prod.outlook.com>
2019-02-17 9:50 ` [PATCH v6] coccinelle: semantic code search for missing put_device() Markus Elfring
1 sibling, 1 reply; 11+ messages in thread
From: Markus Elfring @ 2019-02-16 18:39 UTC (permalink / raw)
To: Wen Yang, Julia Lawall, Gilles Muller, Nicolas Palix,
Michal Marek
Cc: kernel-janitors, linux-kernel, cocci, Cheng Shengyu, Wen Yang
> In a function, for a local variable obtained by of_find_device_by_node(),
I got a software understanding where such a variable can not be obtained
from this function call.
The return value (like a pointer in this use case) can be stored there.
> v6:
> - to be double sure, replace &id->dev with (T)(&id->dev).
The support for data type casts is another interesting extension for
this source code analysis approach.
Further adjustments might become possible at other places of the presented SmPL script
after specific clarifications of previously mentioned implementation details.
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: 答复: [v6] coccinelle: semantic code =?UTF-8?Q?_search_for_missing_p
[not found] ` <HK0PR02MB3634E4B3441651D4F7737399B2620@HK0PR02MB3634.apcprd02.prod.outlook.com>
@ 2019-02-17 7:42 ` Markus Elfring
0 siblings, 0 replies; 11+ messages in thread
From: Markus Elfring @ 2019-02-17 7:42 UTC (permalink / raw)
To: Wen Yang, Julia Lawall
Cc: Michal Marek, kernel-janitors, Nicolas Palix, linux-kernel, cocci,
Cheng Shengyu, Wen Yang
> But please also refer to the examples of coccinelle, such as:
> http://coccinelle.lip6.fr/rules/kmalloc.html
> and
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/coccinelle/free/pci_free_consistent.cocci
These scripts for the semantic patch language show some software design possibilities.
They contain implementation details which can be also worth for additional
development considerations.
Will systematic refactoring become more interesting?
> You will find that there are differences between coccinelle and c.
Would you like to discuss any of them further?
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v6] coccinelle: semantic code search for missing put_device()
[not found] <HK0PR02MB36344E2B29CEB195892F6420B2610@HK0PR02MB3634.apcprd02.prod.outlook.com>
2019-02-16 18:39 ` [v6] coccinelle: semantic code search for missing put_device() Markus Elfring
@ 2019-02-17 9:50 ` Markus Elfring
2019-02-17 11:37 ` Julia Lawall
1 sibling, 1 reply; 11+ messages in thread
From: Markus Elfring @ 2019-02-17 9:50 UTC (permalink / raw)
To: Wen Yang, Julia Lawall
Cc: Michal Marek, kernel-janitors, Nicolas Palix, LKML, Coccinelle,
Cheng Shengyu, Wen Yang
> +@search exists@
> +local idexpression id;
> +expression x,e,e1;
> +position p1,p2;
> +type T,T1,T2;
> +@@
> +
> +id = of_find_device_by_node@p1(x)
> +... when != e = id
I suggest to increase your software development attention also for
another implementation detail.
Source code analysis triggers challenges for safe data flow handling.
the semantic patch language supports search specifications for
the exclusion of specific assignments.
Does this SmPL code contain a questionable order for the source
and target metavariables?
Can the following variant be more appropriate?
+ ... when != id = e
> +if (id = NULL || ...) { ... return ...; }
> +... when != put_device(&id->dev)
> + when != platform_device_put(id)
> + when != of_dev_put(id)
> + when != if (id) { ... put_device(&id->dev) ... }
> + when != e1 = (T)id
Would you like to avoid that the return value from the shown function call
gets overwritten in the variable before it was used once at least
(when a bit of extra C code is tolerated before a null pointer check)?
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v6] coccinelle: semantic code search for missing put_device()
2019-02-17 9:50 ` [PATCH v6] coccinelle: semantic code search for missing put_device() Markus Elfring
@ 2019-02-17 11:37 ` Julia Lawall
2019-02-17 11:42 ` Markus Elfring
0 siblings, 1 reply; 11+ messages in thread
From: Julia Lawall @ 2019-02-17 11:37 UTC (permalink / raw)
To: Markus Elfring
Cc: kernel-janitors, Michal Marek, Wen Yang, Nicolas Palix, LKML,
Coccinelle, Cheng Shengyu, Wen Yang
On Sun, 17 Feb 2019, Markus Elfring wrote:
> > +@search exists@
> > +local idexpression id;
> > +expression x,e,e1;
> > +position p1,p2;
> > +type T,T1,T2;
> > +@@
> > +
> > +id = of_find_device_by_node@p1(x)
> > +... when != e = id
>
> I suggest to increase your software development attention also for
> another implementation detail.
> Source code analysis triggers challenges for safe data flow handling.
> the semantic patch language supports search specifications for
> the exclusion of specific assignments.
>
> Does this SmPL code contain a questionable order for the source
> and target metavariables?
> Can the following variant be more appropriate?
>
> + ... when != id = e
This is possible, but I think unlikely.
>
>
> > +if (id = NULL || ...) { ... return ...; }
> > +... when != put_device(&id->dev)
> > + when != platform_device_put(id)
> > + when != of_dev_put(id)
> > + when != if (id) { ... put_device(&id->dev) ... }
> > + when != e1 = (T)id
>
> Would you like to avoid that the return value from the shown function call
> gets overwritten in the variable before it was used once at least
> (when a bit of extra C code is tolerated before a null pointer check)?
Indeed there should be a put then too, but again, it seems unlikely.
julia
>
> Regards,
> Markus
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v6] coccinelle: semantic code search for missing put_device()
2019-02-17 11:37 ` Julia Lawall
@ 2019-02-17 11:42 ` Markus Elfring
2019-02-17 11:48 ` Julia Lawall
0 siblings, 1 reply; 11+ messages in thread
From: Markus Elfring @ 2019-02-17 11:42 UTC (permalink / raw)
To: Julia Lawall, Wen Yang
Cc: Michal Marek, kernel-janitors, Nicolas Palix, LKML, Coccinelle,
Cheng Shengyu, Wen Yang
>>> +@search exists@
>>> +local idexpression id;
>>> +expression x,e,e1;
>>> +position p1,p2;
>>> +type T,T1,T2;
>>> +@@
>>> +
>>> +id = of_find_device_by_node@p1(x)
>>> +... when != e = id
>>
>> I suggest to increase your software development attention also for
>> another implementation detail.
>> Source code analysis triggers challenges for safe data flow handling.
>> the semantic patch language supports search specifications for
>> the exclusion of specific assignments.
>>
>> Does this SmPL code contain a questionable order for the source
>> and target metavariables?
>> Can the following variant be more appropriate?
>>
>> + ... when != id = e
>
> This is possible, but I think unlikely.
Would you dare to interpret my update suggestion (reordering of two identifiers)
as a required SmPL script correction?
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v6] coccinelle: semantic code search for missing put_device()
2019-02-17 11:42 ` Markus Elfring
@ 2019-02-17 11:48 ` Julia Lawall
2019-02-17 12:00 ` [v6] " Markus Elfring
0 siblings, 1 reply; 11+ messages in thread
From: Julia Lawall @ 2019-02-17 11:48 UTC (permalink / raw)
To: Markus Elfring
Cc: kernel-janitors, Michal Marek, Wen Yang, Nicolas Palix, LKML,
Coccinelle, Cheng Shengyu, Wen Yang
On Sun, 17 Feb 2019, Markus Elfring wrote:
> >>> +@search exists@
> >>> +local idexpression id;
> >>> +expression x,e,e1;
> >>> +position p1,p2;
> >>> +type T,T1,T2;
> >>> +@@
> >>> +
> >>> +id = of_find_device_by_node@p1(x)
> >>> +... when != e = id
> >>
> >> I suggest to increase your software development attention also for
> >> another implementation detail.
> >> Source code analysis triggers challenges for safe data flow handling.
> >> the semantic patch language supports search specifications for
> >> the exclusion of specific assignments.
> >>
> >> Does this SmPL code contain a questionable order for the source
> >> and target metavariables?
> >> Can the following variant be more appropriate?
> >>
> >> + ... when != id = e
> >
> > This is possible, but I think unlikely.
>
> Would you dare to interpret my update suggestion (reordering of two identifiers)
> as a required SmPL script correction?
I didn't suggest to reorder anything. Both are needed.
And, no I don't consider it to be a required suggestion. In practice,
reassigning such a variable is very unlikely.
julia
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [v6] coccinelle: semantic code search for missing put_device()
2019-02-17 11:48 ` Julia Lawall
@ 2019-02-17 12:00 ` Markus Elfring
2019-02-17 12:05 ` Julia Lawall
0 siblings, 1 reply; 11+ messages in thread
From: Markus Elfring @ 2019-02-17 12:00 UTC (permalink / raw)
To: Julia Lawall
Cc: kernel-janitors, Michal Marek, Wen Yang, Nicolas Palix, LKML,
Coccinelle, Cheng Shengyu, Wen Yang
>> Would you dare to interpret my update suggestion (reordering of two identifiers)
>> as a required SmPL script correction?
>
> I didn't suggest to reorder anything.
This is obvious according to your acknowledgement for the sixth version
of this evolving SmPL script.
> Both are needed.
If you would insist on the specification of such an assignment exclusion
for a SmPL ellipsis:
Can we agree on a correct order?
> And, no I don't consider it to be a required suggestion.
Have we got a different view about an implementation detail at this place?
> In practice, reassigning such a variable is very unlikely.
This can be.
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [v6] coccinelle: semantic code search for missing put_device()
2019-02-17 12:00 ` [v6] " Markus Elfring
@ 2019-02-17 12:05 ` Julia Lawall
2019-02-17 12:20 ` Markus Elfring
0 siblings, 1 reply; 11+ messages in thread
From: Julia Lawall @ 2019-02-17 12:05 UTC (permalink / raw)
To: Markus Elfring
Cc: kernel-janitors, Michal Marek, Wen Yang, Nicolas Palix, LKML,
Coccinelle, Cheng Shengyu, Wen Yang
On Sun, 17 Feb 2019, Markus Elfring wrote:
> >> Would you dare to interpret my update suggestion (reordering of two identifiers)
> >> as a required SmPL script correction?
> >
> > I didn't suggest to reorder anything.
>
> This is obvious according to your acknowledgement for the sixth version
> of this evolving SmPL script.
>
>
> > Both are needed.
>
> If you would insist on the specification of such an assignment exclusion
> for a SmPL ellipsis:
> Can we agree on a correct order?
I don't get your point. There is no correct order. Each order expresses
something different. The order that is currently in the semantic patch is
the one that is more likely in practice.
julia
>
>
> > And, no I don't consider it to be a required suggestion.
>
> Have we got a different view about an implementation detail at this place?
>
>
> > In practice, reassigning such a variable is very unlikely.
>
> This can be.
>
> Regards,
> Markus
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [v6] coccinelle: semantic code search for missing put_device()
2019-02-17 12:05 ` Julia Lawall
@ 2019-02-17 12:20 ` Markus Elfring
2019-02-17 12:52 ` Julia Lawall
0 siblings, 1 reply; 11+ messages in thread
From: Markus Elfring @ 2019-02-17 12:20 UTC (permalink / raw)
To: Julia Lawall, Wen Yang
Cc: Michal Marek, kernel-janitors, Nicolas Palix, LKML, Coccinelle,
Cheng Shengyu, Wen Yang
>> If you would insist on the specification of such an assignment exclusion
>> for a SmPL ellipsis:
>> Can we agree on a correct order?
>
> I don't get your point.
I propose to take another closer look at a bit of SmPL code.
> There is no correct order.
I have got an other software development view here.
> Each order expresses something different.
I agree to this information.
> The order that is currently in the semantic patch is the one
> that is more likely in practice.
Please check once more.
…
+@search exists@
+local idexpression id;
+expression x,e,e1;
+position p1,p2;
…
+@@
+
+id = of_find_device_by_node@p1(x)
+... when != e = id
…
Or:
…
+ ... when != id = e
…
Which SmPL specification will achieve the desired software behaviour?
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [v6] coccinelle: semantic code search for missing put_device()
2019-02-17 12:20 ` Markus Elfring
@ 2019-02-17 12:52 ` Julia Lawall
2019-02-17 13:14 ` Markus Elfring
0 siblings, 1 reply; 11+ messages in thread
From: Julia Lawall @ 2019-02-17 12:52 UTC (permalink / raw)
To: Markus Elfring
Cc: kernel-janitors, Michal Marek, Wen Yang, Nicolas Palix, LKML,
Coccinelle, Cheng Shengyu, Wen Yang
[-- Attachment #1: Type: text/plain, Size: 1183 bytes --]
On Sun, 17 Feb 2019, Markus Elfring wrote:
> >> If you would insist on the specification of such an assignment exclusion
> >> for a SmPL ellipsis:
> >> Can we agree on a correct order?
> >
> > I don't get your point.
>
> I propose to take another closer look at a bit of SmPL code.
>
>
> > There is no correct order.
>
> I have got an other software development view here.
>
>
> > Each order expresses something different.
>
> I agree to this information.
>
>
> > The order that is currently in the semantic patch is the one
> > that is more likely in practice.
>
> Please check once more.
>
> …
> +@search exists@
> +local idexpression id;
> +expression x,e,e1;
> +position p1,p2;
> …
> +@@
> +
> +id = of_find_device_by_node@p1(x)
> +... when != e = id
> …
>
> Or:
>
> …
> + ... when != id = e
> …
>
>
> Which SmPL specification will achieve the desired software behaviour?
The desired behavior is to check whether the allocated value is saved in
some other variable (typically a structure field) and thus it doesn't need
to be freed just because the original local variable goes out of scope at
the end of the function. when != e = id achieves this behavior.
julia
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [v6] coccinelle: semantic code search for missing put_device()
2019-02-17 12:52 ` Julia Lawall
@ 2019-02-17 13:14 ` Markus Elfring
0 siblings, 0 replies; 11+ messages in thread
From: Markus Elfring @ 2019-02-17 13:14 UTC (permalink / raw)
To: Julia Lawall, Wen Yang
Cc: Michal Marek, kernel-janitors, Nicolas Palix, LKML, Coccinelle,
Cheng Shengyu, Wen Yang
>> …
>> +@search exists@
>> +local idexpression id;
>> +expression x,e,e1;
>> +position p1,p2;
>> …
>> +@@
>> +
>> +id = of_find_device_by_node@p1(x)
>> +... when != e = id
>> …
>>
>> Or:
>>
>> …
>> + ... when != id = e
>> …
>>
>>
>> Which SmPL specification will achieve the desired software behaviour?
>
> The desired behavior is to check whether the allocated value is saved in
> some other variable (typically a structure field) and thus it doesn't need
> to be freed just because the original local variable goes out of scope at
> the end of the function.
I find this description reasonable to some degree.
(I am unsure if a programmer would like to fiddle with return value storage
in a data structure member from a local variable.)
> when != e = id achieves this behavior.
I can not agree to this view completely because of the meaning that is connected
with these variable identifiers.
Both metavariables share the kind “expression”. So I can imagine
that there is an intersection for the source code match possibility.
But one was intentionally restricted to the kind “local idexpression” so far.
Which data element should not get reassigned here (before a corresponding
null pointer check)?
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2019-02-17 13:14 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <HK0PR02MB36344E2B29CEB195892F6420B2610@HK0PR02MB3634.apcprd02.prod.outlook.com>
2019-02-16 18:39 ` [v6] coccinelle: semantic code search for missing put_device() Markus Elfring
[not found] ` <HK0PR02MB3634E4B3441651D4F7737399B2620@HK0PR02MB3634.apcprd02.prod.outlook.com>
2019-02-17 7:42 ` 答复: [v6] coccinelle: semantic code =?UTF-8?Q?_search_for_missing_p Markus Elfring
2019-02-17 9:50 ` [PATCH v6] coccinelle: semantic code search for missing put_device() Markus Elfring
2019-02-17 11:37 ` Julia Lawall
2019-02-17 11:42 ` Markus Elfring
2019-02-17 11:48 ` Julia Lawall
2019-02-17 12:00 ` [v6] " Markus Elfring
2019-02-17 12:05 ` Julia Lawall
2019-02-17 12:20 ` Markus Elfring
2019-02-17 12:52 ` Julia Lawall
2019-02-17 13:14 ` Markus Elfring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox