* [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
@ 2021-01-11 20:06 Denis Efremov
2021-01-11 20:23 ` Julia Lawall
0 siblings, 1 reply; 7+ messages in thread
From: Denis Efremov @ 2021-01-11 20:06 UTC (permalink / raw)
To: Coccinelle
Hi,
Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
My pattern:
@exists@
identifier rta, param, key, keylen;
position p;
@@
otx_cpt_aead_cbc_aes_sha_setkey(...,
unsigned char *key, unsigned int keylen)
{
...
* if (RTA_PAYLOAD(rta) < sizeof(*param))@p
goto badkey;
...
* key += RTA_ALIGN(rta->rta_len);
* keylen -= RTA_ALIGN(rta->rta_len);
...
}
$ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
init_defs_builtins: /usr/lib64/coccinelle/standard.h
minus: parse error:
File "test.cocci", line 13, column 9, charpos = 219
around = 'RTA_ALIGN',
whole content = * key += RTA_ALIGN(rta->rta_len);
What can I do to match RTA_ALIGN(...) lines?
Thanks,
Denis
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
2021-01-11 20:06 [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)? Denis Efremov
@ 2021-01-11 20:23 ` Julia Lawall
2021-01-11 20:32 ` Denis Efremov
0 siblings, 1 reply; 7+ messages in thread
From: Julia Lawall @ 2021-01-11 20:23 UTC (permalink / raw)
To: Denis Efremov; +Cc: Coccinelle
On Mon, 11 Jan 2021, Denis Efremov wrote:
> Hi,
>
> Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
> drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
>
> My pattern:
> @exists@
> identifier rta, param, key, keylen;
> position p;
> @@
>
> otx_cpt_aead_cbc_aes_sha_setkey(...,
> unsigned char *key, unsigned int keylen)
> {
> ...
> * if (RTA_PAYLOAD(rta) < sizeof(*param))@p
> goto badkey;
> ...
> * key += RTA_ALIGN(rta->rta_len);
> * keylen -= RTA_ALIGN(rta->rta_len);
> ...
> }
>
> $ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
> init_defs_builtins: /usr/lib64/coccinelle/standard.h
> minus: parse error:
> File "test.cocci", line 13, column 9, charpos = 219
> around = 'RTA_ALIGN',
> whole content = * key += RTA_ALIGN(rta->rta_len);
>
>
> What can I do to match RTA_ALIGN(...) lines?
I don't understand the problem. I took your rule and your command line,
and everything was fine.
julia
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
2021-01-11 20:23 ` Julia Lawall
@ 2021-01-11 20:32 ` Denis Efremov
2021-01-11 20:40 ` Julia Lawall
0 siblings, 1 reply; 7+ messages in thread
From: Denis Efremov @ 2021-01-11 20:32 UTC (permalink / raw)
To: Julia Lawall; +Cc: Coccinelle
On 1/11/21 11:23 PM, Julia Lawall wrote:
>
>
> On Mon, 11 Jan 2021, Denis Efremov wrote:
>
>> Hi,
>>
>> Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
>> drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
>>
>> My pattern:
>> @exists@
>> identifier rta, param, key, keylen;
>> position p;
>> @@
>>
>> otx_cpt_aead_cbc_aes_sha_setkey(...,
>> unsigned char *key, unsigned int keylen)
>> {
>> ...
>> * if (RTA_PAYLOAD(rta) < sizeof(*param))@p
>> goto badkey;
>> ...
>> * key += RTA_ALIGN(rta->rta_len);
>> * keylen -= RTA_ALIGN(rta->rta_len);
>> ...
>> }
>>
>> $ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
>> init_defs_builtins: /usr/lib64/coccinelle/standard.h
>> minus: parse error:
>> File "test.cocci", line 13, column 9, charpos = 219
>> around = 'RTA_ALIGN',
>> whole content = * key += RTA_ALIGN(rta->rta_len);
>>
>>
>> What can I do to match RTA_ALIGN(...) lines?
>
> I don't understand the problem. I took your rule and your command line,
> and everything was fine.
I use version:
spatch version 1.0.8-gc1dbb4f-dirty compiled with OCaml version 4.11.1
Flags passed to the configure script: --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-python=/usr/bin/python3 --with-menhir=/usr/bin/menhir
OCaml scripting support: yes
Python scripting support: yes
Syntax of regular expressions: PCRE
Maybe parsing error is fixed in new versions?
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
2021-01-11 20:32 ` Denis Efremov
@ 2021-01-11 20:40 ` Julia Lawall
2021-01-11 20:49 ` Denis Efremov
0 siblings, 1 reply; 7+ messages in thread
From: Julia Lawall @ 2021-01-11 20:40 UTC (permalink / raw)
To: Denis Efremov; +Cc: Coccinelle
On Mon, 11 Jan 2021, Denis Efremov wrote:
>
>
> On 1/11/21 11:23 PM, Julia Lawall wrote:
> >
> >
> > On Mon, 11 Jan 2021, Denis Efremov wrote:
> >
> >> Hi,
> >>
> >> Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
> >> drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
> >>
> >> My pattern:
> >> @exists@
> >> identifier rta, param, key, keylen;
> >> position p;
> >> @@
> >>
> >> otx_cpt_aead_cbc_aes_sha_setkey(...,
> >> unsigned char *key, unsigned int keylen)
> >> {
> >> ...
> >> * if (RTA_PAYLOAD(rta) < sizeof(*param))@p
> >> goto badkey;
> >> ...
> >> * key += RTA_ALIGN(rta->rta_len);
> >> * keylen -= RTA_ALIGN(rta->rta_len);
> >> ...
> >> }
> >>
> >> $ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
> >> init_defs_builtins: /usr/lib64/coccinelle/standard.h
> >> minus: parse error:
> >> File "test.cocci", line 13, column 9, charpos = 219
> >> around = 'RTA_ALIGN',
> >> whole content = * key += RTA_ALIGN(rta->rta_len);
> >>
> >>
> >> What can I do to match RTA_ALIGN(...) lines?
> >
> > I don't understand the problem. I took your rule and your command line,
> > and everything was fine.
>
> I use version:
> spatch version 1.0.8-gc1dbb4f-dirty compiled with OCaml version 4.11.1
> Flags passed to the configure script: --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-python=/usr/bin/python3 --with-menhir=/usr/bin/menhir
> OCaml scripting support: yes
> Python scripting support: yes
> Syntax of regular expressions: PCRE
>
> Maybe parsing error is fixed in new versions?
I can't imagine what would cause a parsing error here. I don't see what
could be special about RTA_ALIGN. Normally Coccinelle doesn't even know
that it is a macro. Maybe you can try to simplify the semantic patch a
little bit and see if there is some change that causes the problem to
disappear? Does the problem disappear if you use a name other than
RTA_ALIGN?
julia
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
2021-01-11 20:40 ` Julia Lawall
@ 2021-01-11 20:49 ` Denis Efremov
2021-01-11 20:59 ` Julia Lawall
0 siblings, 1 reply; 7+ messages in thread
From: Denis Efremov @ 2021-01-11 20:49 UTC (permalink / raw)
To: Julia Lawall; +Cc: Coccinelle
On 1/11/21 11:40 PM, Julia Lawall wrote:
>
>
> On Mon, 11 Jan 2021, Denis Efremov wrote:
>
>>
>>
>> On 1/11/21 11:23 PM, Julia Lawall wrote:
>>>
>>>
>>> On Mon, 11 Jan 2021, Denis Efremov wrote:
>>>
>>>> Hi,
>>>>
>>>> Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
>>>> drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
>>>>
>>>> My pattern:
>>>> @exists@
>>>> identifier rta, param, key, keylen;
>>>> position p;
>>>> @@
>>>>
>>>> otx_cpt_aead_cbc_aes_sha_setkey(...,
>>>> unsigned char *key, unsigned int keylen)
>>>> {
>>>> ...
>>>> * if (RTA_PAYLOAD(rta) < sizeof(*param))@p
>>>> goto badkey;
>>>> ...
>>>> * key += RTA_ALIGN(rta->rta_len);
>>>> * keylen -= RTA_ALIGN(rta->rta_len);
>>>> ...
>>>> }
>>>>
>>>> $ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
>>>> init_defs_builtins: /usr/lib64/coccinelle/standard.h
>>>> minus: parse error:
>>>> File "test.cocci", line 13, column 9, charpos = 219
>>>> around = 'RTA_ALIGN',
>>>> whole content = * key += RTA_ALIGN(rta->rta_len);
>>>>
>>>>
>>>> What can I do to match RTA_ALIGN(...) lines?
>>>
>>> I don't understand the problem. I took your rule and your command line,
>>> and everything was fine.
>>
>> I use version:
>> spatch version 1.0.8-gc1dbb4f-dirty compiled with OCaml version 4.11.1
>> Flags passed to the configure script: --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-python=/usr/bin/python3 --with-menhir=/usr/bin/menhir
>> OCaml scripting support: yes
>> Python scripting support: yes
>> Syntax of regular expressions: PCRE
>>
>> Maybe parsing error is fixed in new versions?
>
> I can't imagine what would cause a parsing error here. I don't see what
> could be special about RTA_ALIGN. Normally Coccinelle doesn't even know
> that it is a macro. Maybe you can try to simplify the semantic patch a
> little bit and see if there is some change that causes the problem to
> disappear? Does the problem disappear if you use a name other than
> RTA_ALIGN?
Changing:
key += RTA_ALIGN(rta->rta_len);
to:
key = RTA_ALIGN(rta->rta_len);
makes the parsing error disappear.
Using aop instead of += leads to the same parsing error:
assignment operator aop;
key aop RTA_ALIGN(rta->rta_len);
init_defs_builtins: /usr/lib64/coccinelle/standard.h
minus: parse error:
File "test.cocci", line 14, column 10, charpos = 245
around = 'RTA_ALIGN',
whole content = * key aop RTA_ALIGN(rta->rta_len);
Denis
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
2021-01-11 20:49 ` Denis Efremov
@ 2021-01-11 20:59 ` Julia Lawall
2021-01-11 21:12 ` Denis Efremov
0 siblings, 1 reply; 7+ messages in thread
From: Julia Lawall @ 2021-01-11 20:59 UTC (permalink / raw)
To: Denis Efremov; +Cc: Coccinelle
On Mon, 11 Jan 2021, Denis Efremov wrote:
>
>
> On 1/11/21 11:40 PM, Julia Lawall wrote:
> >
> >
> > On Mon, 11 Jan 2021, Denis Efremov wrote:
> >
> >>
> >>
> >> On 1/11/21 11:23 PM, Julia Lawall wrote:
> >>>
> >>>
> >>> On Mon, 11 Jan 2021, Denis Efremov wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
> >>>> drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
> >>>>
> >>>> My pattern:
> >>>> @exists@
> >>>> identifier rta, param, key, keylen;
> >>>> position p;
> >>>> @@
> >>>>
> >>>> otx_cpt_aead_cbc_aes_sha_setkey(...,
> >>>> unsigned char *key, unsigned int keylen)
> >>>> {
> >>>> ...
> >>>> * if (RTA_PAYLOAD(rta) < sizeof(*param))@p
> >>>> goto badkey;
> >>>> ...
> >>>> * key += RTA_ALIGN(rta->rta_len);
> >>>> * keylen -= RTA_ALIGN(rta->rta_len);
> >>>> ...
> >>>> }
> >>>>
> >>>> $ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
> >>>> init_defs_builtins: /usr/lib64/coccinelle/standard.h
> >>>> minus: parse error:
> >>>> File "test.cocci", line 13, column 9, charpos = 219
> >>>> around = 'RTA_ALIGN',
> >>>> whole content = * key += RTA_ALIGN(rta->rta_len);
> >>>>
> >>>>
> >>>> What can I do to match RTA_ALIGN(...) lines?
> >>>
> >>> I don't understand the problem. I took your rule and your command line,
> >>> and everything was fine.
> >>
> >> I use version:
> >> spatch version 1.0.8-gc1dbb4f-dirty compiled with OCaml version 4.11.1
> >> Flags passed to the configure script: --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-python=/usr/bin/python3 --with-menhir=/usr/bin/menhir
> >> OCaml scripting support: yes
> >> Python scripting support: yes
> >> Syntax of regular expressions: PCRE
> >>
> >> Maybe parsing error is fixed in new versions?
> >
> > I can't imagine what would cause a parsing error here. I don't see what
> > could be special about RTA_ALIGN. Normally Coccinelle doesn't even know
> > that it is a macro. Maybe you can try to simplify the semantic patch a
> > little bit and see if there is some change that causes the problem to
> > disappear? Does the problem disappear if you use a name other than
> > RTA_ALIGN?
>
> Changing:
> key += RTA_ALIGN(rta->rta_len);
> to:
> key = RTA_ALIGN(rta->rta_len);
>
> makes the parsing error disappear.
>
> Using aop instead of += leads to the same parsing error:
> assignment operator aop;
> key aop RTA_ALIGN(rta->rta_len);
> init_defs_builtins: /usr/lib64/coccinelle/standard.h
> minus: parse error:
> File "test.cocci", line 14, column 10, charpos = 245
> around = 'RTA_ALIGN',
> whole content = * key aop RTA_ALIGN(rta->rta_len);
I assume not, but does spatch --parse-cocci test.cocci work?
julia
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)?
2021-01-11 20:59 ` Julia Lawall
@ 2021-01-11 21:12 ` Denis Efremov
0 siblings, 0 replies; 7+ messages in thread
From: Denis Efremov @ 2021-01-11 21:12 UTC (permalink / raw)
To: Julia Lawall; +Cc: Coccinelle
On 1/11/21 11:59 PM, Julia Lawall wrote:
>
>
> On Mon, 11 Jan 2021, Denis Efremov wrote:
>
>>
>>
>> On 1/11/21 11:40 PM, Julia Lawall wrote:
>>>
>>>
>>> On Mon, 11 Jan 2021, Denis Efremov wrote:
>>>
>>>>
>>>>
>>>> On 1/11/21 11:23 PM, Julia Lawall wrote:
>>>>>
>>>>>
>>>>> On Mon, 11 Jan 2021, Denis Efremov wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Let's suppose I want to match otx_cpt_aead_cbc_aes_sha_setkey() function from
>>>>>> drivers/crypto/marvell/octeontx/otx_cptvf_algs.c file (linux kernel).
>>>>>>
>>>>>> My pattern:
>>>>>> @exists@
>>>>>> identifier rta, param, key, keylen;
>>>>>> position p;
>>>>>> @@
>>>>>>
>>>>>> otx_cpt_aead_cbc_aes_sha_setkey(...,
>>>>>> unsigned char *key, unsigned int keylen)
>>>>>> {
>>>>>> ...
>>>>>> * if (RTA_PAYLOAD(rta) < sizeof(*param))@p
>>>>>> goto badkey;
>>>>>> ...
>>>>>> * key += RTA_ALIGN(rta->rta_len);
>>>>>> * keylen -= RTA_ALIGN(rta->rta_len);
>>>>>> ...
>>>>>> }
>>>>>>
>>>>>> $ spatch --no-includes --include-headers --cocci-file test.cocci drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
>>>>>> init_defs_builtins: /usr/lib64/coccinelle/standard.h
>>>>>> minus: parse error:
>>>>>> File "test.cocci", line 13, column 9, charpos = 219
>>>>>> around = 'RTA_ALIGN',
>>>>>> whole content = * key += RTA_ALIGN(rta->rta_len);
>>>>>>
>>>>>>
>>>>>> What can I do to match RTA_ALIGN(...) lines?
>>>>>
>>>>> I don't understand the problem. I took your rule and your command line,
>>>>> and everything was fine.
>>>>
>>>> I use version:
>>>> spatch version 1.0.8-gc1dbb4f-dirty compiled with OCaml version 4.11.1
>>>> Flags passed to the configure script: --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-python=/usr/bin/python3 --with-menhir=/usr/bin/menhir
>>>> OCaml scripting support: yes
>>>> Python scripting support: yes
>>>> Syntax of regular expressions: PCRE
>>>>
>>>> Maybe parsing error is fixed in new versions?
>>>
>>> I can't imagine what would cause a parsing error here. I don't see what
>>> could be special about RTA_ALIGN. Normally Coccinelle doesn't even know
>>> that it is a macro. Maybe you can try to simplify the semantic patch a
>>> little bit and see if there is some change that causes the problem to
>>> disappear? Does the problem disappear if you use a name other than
>>> RTA_ALIGN?
>>
>> Changing:
>> key += RTA_ALIGN(rta->rta_len);
>> to:
>> key = RTA_ALIGN(rta->rta_len);
>>
>> makes the parsing error disappear.
>>
>> Using aop instead of += leads to the same parsing error:
>> assignment operator aop;
>> key aop RTA_ALIGN(rta->rta_len);
>> init_defs_builtins: /usr/lib64/coccinelle/standard.h
>> minus: parse error:
>> File "test.cocci", line 14, column 10, charpos = 245
>> around = 'RTA_ALIGN',
>> whole content = * key aop RTA_ALIGN(rta->rta_len);
>
> I assume not, but does spatch --parse-cocci test.cocci work?
Works with "key =" pattern, with "key +=" or "key aop" doesn't.
The errors are the same:
spatch --parse-cocci test.cocci
init_defs_builtins: /usr/lib64/coccinelle/standard.h
minus: parse error:
File "test.cocci", line 13, column 9, charpos = 219
around = 'RTA_ALIGN',
whole content = * key += RTA_ALIGN(rta->rta_len);
Denis
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-01-11 21:12 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-11 20:06 [Cocci] How to match function-like macro calls, e.g. RTA_ALIGN(rta->rta_len)? Denis Efremov
2021-01-11 20:23 ` Julia Lawall
2021-01-11 20:32 ` Denis Efremov
2021-01-11 20:40 ` Julia Lawall
2021-01-11 20:49 ` Denis Efremov
2021-01-11 20:59 ` Julia Lawall
2021-01-11 21:12 ` Denis Efremov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.