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
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to