linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dominique Martinet <asmadeus@codewreck.org>
To: Himanshu Jha <himanshujha199640@gmail.com>,
	Julia Lawall <julia.lawall@lip6.fr>
Cc: "Michal Marek" <michal.lkml@markovi.net>,
	"Nicolas Palix" <nicolas.palix@imag.fr>,
	linux-kernel@vger.kernel.org, cocci@systeme.lip6.fr,
	"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
	yamada.masahiro@socionext.com
Subject: Re: [Cocci] [PATCH 01/18] coccinelle: change strncpy+truncation to strlcpy
Date: Fri, 13 Jul 2018 18:11:38 +0200	[thread overview]
Message-ID: <20180713161138.GA17418@nautica> (raw)
In-Reply-To: <alpine.DEB.2.20.1807130647460.3063@hadrien> <20180713091412.GA11250@himanshu-Vostro-3559>

Himanshu Jha wrote on Fri, Jul 13, 2018:
> Try this:
> 
> $ spatch -D patch --sp-file strlcopy.cocci --very-quiet drivers/net/wireless/ti/wl1251/acx.c
> 
> ---------------------------------------------------------------------
> virtual patch
> 
> @depends on patch@
> expression dest, src, sz; 
> identifier f;
> @@
> 
> (
> - strncpy(
> + strlcpy(
>   dest, src, sizeof(sz));
> - dest[sizeof(sz) - 1] = '\0';
> |
> - strncpy(
> + strlcpy(
>   dest, src, f); 
> - dest[f - 1] = '\0';
> )
> ---------------------------------------------------------------------
> 
> This eliminates that case because expression is generic metavariable and
> it somehow matched whole "min(len, sizeof(...)..", so it better to
> divide the rules as done above to be more specific about the matching
> pattern.
> 
> I thought to replace "identifier f" with "constant F" but that misses
> few cases.

My first test started with 'constant sz' as well and I found expression
to be better.
If I understand this correctly, it just makes sure not to match the
'min(...)' expression so the problem doesn't arise, but it's not really
a solution as it is really a chance that this comment comes here for
this more complex expression.
I'd rather just advise to pay attention to comments and drop the
confidence level

> Also, it is advised to put a space affer '+/-'

Ok, thanks

Julia Lawall wrote on Fri, Jul 13, 2018:
> For the file drivers/net/wireless/ti/wl1251/acx.c, the following keeps the
> comment before the buf update and moves the strlcpy call below it.  It
> does however drop the comment just before the original call to strncpy.

Nice, doing it in two passes does the trick; it even keeps the comment
before strncpy if there was no comment in between.

I'm sorry to write that after being provided with such a nice
work-around though, now that I'm a bit less tired I've had a look at the
comments again and it does not make sense to keep the second comment as
is -- the whole point of using strlcpy (or now strscpy as per feedback
elsewhere) is that the string will be null terminated properly after the
call, so I'll stick to the original version.


I also see the position does not seem to be useful for the patch phase,
spatch automatically only applies only to what was matched earlier in
report mode?

>>> +-strncpy@p
>>> ++strlcpy
>>> +        (dest, src, sz);
>>
>> This also came from the example I picked, but if this does not make a
>> difference as it sounds like I will update to that.
>
> Probably not removing something just to add it back would be a good
> idea.

Actually playing with your example made me realize that removing and
re-adding argument does fix the indentation issue in the original code I
had noticed for mptctl, so it might actually unexpectedly be a good idea
to go in the opposite direction and make coccinelle remove/add arguments
in the general case (e.g. if strncpy and strlcpy hadn't been the same
length)

The jury is still out for this one :)


Thanks for all the feedbacks,
-- 
Dominique Martinet

  parent reply	other threads:[~2018-07-13 16:11 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-13  1:14 [PATCH 01/18] coccinelle: change strncpy+truncation to strlcpy Dominique Martinet
2018-07-13  1:25 ` [PATCH 02/18] block/aoenet: " Dominique Martinet
2018-07-13 14:16   ` Jens Axboe
2018-07-13 15:31     ` Dominique Martinet
2018-07-13  1:25 ` [PATCH 03/18] drm_property: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 04/18] nouveau: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 05/18] iio: " Dominique Martinet
2018-07-15 10:39   ` Jonathan Cameron
2018-07-16 11:42     ` Dominique Martinet
2018-07-22  8:13       ` Jonathan Cameron
2018-07-13  1:25 ` [PATCH 06/18] mptctl: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 07/18] hisilicon: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 08/18] myricom: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 09/18] qlogic/qed: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 10/18] brcmsmac: " Dominique Martinet
2018-07-13  7:19   ` Arend van Spriel
2018-07-13  1:25 ` [PATCH 11/18] wireless/ti: " Dominique Martinet
2018-07-13  7:38   ` Greg Kroah-Hartman
2018-07-13  7:47     ` Arend van Spriel
2018-07-13  8:13       ` Dominique Martinet
2018-07-13 18:56     ` Rustad, Mark D
2018-07-27  9:19     ` Kalle Valo
2018-07-13  1:25 ` [PATCH 12/18] test_power: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 13/18] ibmvscsi: " Dominique Martinet
2018-07-13  1:25 ` [PATCH 14/18] kdb_support: " Dominique Martinet
2018-07-13 10:33   ` Daniel Thompson
2018-07-13 15:18     ` Dominique Martinet
2018-07-16  8:23       ` Daniel Thompson
2018-07-13  1:26 ` [PATCH 15/18] blktrace: " Dominique Martinet
2019-03-15  1:37   ` Steven Rostedt
2019-03-15  2:01     ` Jens Axboe
2019-03-15  6:30       ` Dominique Martinet
2019-03-15 14:29         ` Jens Axboe
2018-07-13  1:26 ` [PATCH 16/18] tools/accounting: " Dominique Martinet
2018-07-13  1:26 ` [PATCH 17/18] perf: " Dominique Martinet
2018-07-13  1:26 ` [PATCH 18/18] cpupower: " Dominique Martinet
2018-07-24 16:31   ` Shuah Khan
2018-08-14 15:45   ` Daniel Díaz
2018-08-14 19:27     ` Dominique Martinet
2018-08-20 14:27       ` Shuah Khan
2018-07-13  7:44 ` [Cocci] [PATCH 01/18] coccinelle: " Himanshu Jha
2018-07-13  8:00   ` Dominique Martinet
2018-07-13  9:14     ` Himanshu Jha
2018-07-13  9:44       ` Julia Lawall
2018-07-13 10:21         ` Himanshu Jha
2018-07-13 10:50           ` Julia Lawall
2018-07-13 16:11       ` Dominique Martinet [this message]
2018-07-14  8:12 ` [PATCH v2] coccinelle: strncpy+truncation by strscpy Dominique Martinet
2018-07-14 11:54   ` Julia Lawall
     [not found]     ` <alpine.DEB.2.20.1807140743550.3356@hadrien>
2018-07-14 13:08       ` Dominique Martinet
2018-07-14 20:36         ` Julia Lawall
2018-07-14 14:34   ` [v2] Coccinelle: Replace strncpy() + truncation by strscpy() SF Markus Elfring
2018-07-20  0:36   ` [PATCH v3] coccinelle: suggest replacing strncpy+truncation by strscpy Dominique Martinet
2018-07-20  5:33     ` Julia Lawall
2018-07-20  5:40       ` Dominique Martinet
2018-07-20  5:49         ` Julia Lawall
2018-07-20  5:57           ` Dominique Martinet
2018-07-20  6:03             ` Julia Lawall
2018-07-20 11:00           ` [v3] Coccinelle: " SF Markus Elfring
2018-07-20  9:40     ` SF Markus Elfring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180713161138.GA17418@nautica \
    --to=asmadeus@codewreck.org \
    --cc=cocci@systeme.lip6.fr \
    --cc=himanshujha199640@gmail.com \
    --cc=julia.lawall@lip6.fr \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=nicolas.palix@imag.fr \
    --cc=ville.syrjala@linux.intel.com \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).