cocci.inria.fr archive mirror
 help / color / mirror / Atom feed
From: asmadeus@codewreck.org (Dominique Martinet)
To: cocci@systeme.lip6.fr
Subject: [Cocci] [PATCH 01/18] coccinelle: change strncpy+truncation to strlcpy
Date: Fri, 13 Jul 2018 03:14:43 +0200	[thread overview]
Message-ID: <1531444483-17338-1-git-send-email-asmadeus@codewreck.org> (raw)

Besides being simpler, using strlcpy instead of strncpy+truncation
fixes part of the following class of new gcc warnings:

    drivers/gpu/drm/i915/intel_tv.c: In function ?intel_tv_get_modes?:
    drivers/gpu/drm/i915/intel_tv.c:1358:3: error: ?strncpy? specified bound 32 equals
    destination size [-Werror=stringop-truncation]
       strncpy(mode_ptr->name, input->name, DRM_DISPLAY_MODE_LEN);
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors

Note that this is not a proper fix for this warning (and not all of the
occurences give the warning either - the strings are not always static).
The warning was intended to have developers check the return code of
strncpy and act in case of truncation (print a warning, abort the
function or something similar if the original string was not nul
terminated); the change to strlcpy only works because gcc does not
handle the function the same way.

Suggested-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
---

Running this fixes 30 occurences of the problem in 17 different
components of the kernel, and while the produced patches are fairly
straight-forward I'm not sure who I should expect to pick this up as
it is sent as a series.
I expect each maintainer will pick their share of the patchs if they
agree with it and the rest will just be dropped?

 .../coccinelle/misc/strncpy_truncation.cocci  | 41 +++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 scripts/coccinelle/misc/strncpy_truncation.cocci

diff --git a/scripts/coccinelle/misc/strncpy_truncation.cocci b/scripts/coccinelle/misc/strncpy_truncation.cocci
new file mode 100644
index 000000000000..28b5c2a290ac
--- /dev/null
+++ b/scripts/coccinelle/misc/strncpy_truncation.cocci
@@ -0,0 +1,41 @@
+/// Use strlcpy rather than strncpy(dest,..,sz) + dest[sz-1] = '\0'
+///
+// Confidence: High
+// Comments:
+// Options: --no-includes --include-headers
+
+virtual patch
+virtual context
+virtual report
+virtual org
+
+ at r@
+expression dest, src, sz;
+position p;
+@@
+
+strncpy at p(dest, src, sz);
+dest[sz - 1] = '\0';
+
+ at script:python depends on org@
+p << r.p;
+@@
+
+cocci.print_main("strncpy followed by truncation can be strlcpy",p)
+
+ at script:python depends on report@
+p << r.p;
+@@
+
+msg = "SUGGESTION: strncpy followed by truncation can be strlcpy"
+coccilib.report.print_report(p[0],msg)
+
+ at ok depends on patch@
+expression r.dest, r.src, r.sz;
+position r.p;
+@@
+
+-strncpy@p(
++strlcpy(
+  dest, src, sz);
+-dest[sz - 1] = '\0';
-- 
2.17.1

             reply	other threads:[~2018-07-13  1:14 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-13  1:14 Dominique Martinet [this message]
2018-07-13  7:44 ` [Cocci] [PATCH 01/18] coccinelle: change strncpy+truncation to strlcpy 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
     [not found]       ` <5e93dba5-1a57-ee59-e714-17a80b3fb031@users.sourceforge.net>
2018-07-13 16:42         ` [Cocci] Coccinelle: " Himanshu Jha
     [not found]           ` <d6fac368-bb43-f53c-0f58-b25a81156a4e@users.sourceforge.net>
2018-07-13 18:41             ` [Cocci] Coccinelle: Development challenges around software profiling Himanshu Jha
     [not found]               ` <536adc42-1680-e4be-bfee-7d01c37a239d@users.sourceforge.net>
2018-07-13 20:26                 ` Himanshu Jha
     [not found]     ` <a35ae0ee-13d2-7ac8-99a4-488069983154@users.sourceforge.net>
2018-07-14  9:16       ` [Cocci] [01/18] coccinelle: change strncpy+truncation to strlcpy Dominique Martinet
2018-07-14 11:41         ` Julia Lawall
     [not found] ` <4b9986b2-957a-081a-038e-afc5acf0bfdd@users.sourceforge.net>
2018-07-13 15:25   ` [Cocci] Coccinelle: " Dominique Martinet
2018-07-13 15:28     ` Julia Lawall
2018-07-14  8:12 ` [Cocci] [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-20  0:36   ` [Cocci] [PATCH v3] coccinelle: suggest replacing " 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

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=1531444483-17338-1-git-send-email-asmadeus@codewreck.org \
    --to=asmadeus@codewreck.org \
    --cc=cocci@systeme.lip6.fr \
    /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).