2018-01-08 12:02:55

by Xiongfeng Wang

[permalink] [raw]
Subject: [PATCH] auxdisplay: use correct string length

From: Xiongfeng Wang <[email protected]>

gcc-8 reports

drivers/auxdisplay/panel.c: In function 'panel_attach':
./include/linux/string.h:245:9: warning: '__builtin_strncpy' specified
bound 12 equals destination size [-Wstringop-truncation]

We need one less byte or call strlcpy() to make it a nul-terminated
string.

Signed-off-by: Xiongfeng Wang <[email protected]>
---
drivers/auxdisplay/panel.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/auxdisplay/panel.c b/drivers/auxdisplay/panel.c
index ea7869c..f8344e4 100644
--- a/drivers/auxdisplay/panel.c
+++ b/drivers/auxdisplay/panel.c
@@ -1506,10 +1506,10 @@ static struct logical_input *panel_bind_key(const char *name, const char *press,
key->rise_time = 1;
key->fall_time = 1;

- strncpy(key->u.kbd.press_str, press, sizeof(key->u.kbd.press_str));
- strncpy(key->u.kbd.repeat_str, repeat, sizeof(key->u.kbd.repeat_str));
+ strncpy(key->u.kbd.press_str, press, sizeof(key->u.kbd.press_str) - 1);
+ strncpy(key->u.kbd.repeat_str, repeat, sizeof(key->u.kbd.repeat_str) - 1);
strncpy(key->u.kbd.release_str, release,
- sizeof(key->u.kbd.release_str));
+ sizeof(key->u.kbd.release_str - 1));
list_add(&key->list, &logical_inputs);
return key;
}
--
1.8.3.1


2018-01-16 08:41:13

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH] auxdisplay: use correct string length

[ The kbuild robot is being tweaked so the actual warnings are missing
but it's easy enough to guess what it was - dan ]

Hi Xiongfeng,

Thank you for the patch! Perhaps something to improve:

url: https://github.com/0day-ci/linux/commits/Xiongfeng-Wang/auxdisplay-use-correct-string-length/20180110-180916

# https://github.com/0day-ci/linux/commit/eab240fbc00377bf3e18428b401e651bd6296da0
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout eab240fbc00377bf3e18428b401e651bd6296da0
vim +1512 drivers/auxdisplay/panel.c

7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1483
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1484 /* tries to bind a key to the signal name <name>. The key will send the
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1485 * strings <press>, <repeat>, <release> for these respective events.
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1486 * Returns the pointer to the new key if ok, NULL if the key could not be bound.
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1487 */
36d2041a3 drivers/staging/panel/panel.c Peter Huewe 2013-02-15 1488 static struct logical_input *panel_bind_key(const char *name, const char *press,
36d2041a3 drivers/staging/panel/panel.c Peter Huewe 2013-02-15 1489 const char *repeat,
36d2041a3 drivers/staging/panel/panel.c Peter Huewe 2013-02-15 1490 const char *release)
698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1491 {
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1492 struct logical_input *key;
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1493
fdf4a4948 drivers/staging/panel/panel.c Dominique van den Broeck 2014-05-21 1494 key = kzalloc(sizeof(*key), GFP_KERNEL);
eb073a9bf drivers/staging/panel/panel.c Toshiaki Yamane 2012-07-12 1495 if (!key)
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1496 return NULL;
eb073a9bf drivers/staging/panel/panel.c Toshiaki Yamane 2012-07-12 1497
698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1498 if (!input_name2mask(name, &key->mask, &key->value, &scan_mask_i,
cb46f472c drivers/staging/panel/panel.c Kulikov Vasiliy 2010-07-12 1499 &scan_mask_o)) {
cb46f472c drivers/staging/panel/panel.c Kulikov Vasiliy 2010-07-12 1500 kfree(key);
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1501 return NULL;
cb46f472c drivers/staging/panel/panel.c Kulikov Vasiliy 2010-07-12 1502 }
698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1503
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1504 key->type = INPUT_TYPE_KBD;
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1505 key->state = INPUT_ST_LOW;
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1506 key->rise_time = 1;
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1507 key->fall_time = 1;
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1508
eab240fbc drivers/auxdisplay/panel.c Xiongfeng Wang 2018-01-08 1509 strncpy(key->u.kbd.press_str, press, sizeof(key->u.kbd.press_str) - 1);
eab240fbc drivers/auxdisplay/panel.c Xiongfeng Wang 2018-01-08 1510 strncpy(key->u.kbd.repeat_str, repeat, sizeof(key->u.kbd.repeat_str) - 1);
698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1511 strncpy(key->u.kbd.release_str, release,
eab240fbc drivers/auxdisplay/panel.c Xiongfeng Wang 2018-01-08 @1512 sizeof(key->u.kbd.release_str - 1));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The " - 1" shouldn't be inside the sizeof(). It should be:

sizeof(key->u.kbd.release_str) - 1);

7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1513 list_add(&key->list, &logical_inputs);
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1514 return key;
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1515 }
7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1516

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

2018-01-16 09:22:50

by Xiongfeng Wang

[permalink] [raw]
Subject: Re: [PATCH] auxdisplay: use correct string length



On 2018/1/16 16:40, Dan Carpenter wrote:
> [ The kbuild robot is being tweaked so the actual warnings are missing
> but it's easy enough to guess what it was - dan ]
>
> Hi Xiongfeng,
>
> Thank you for the patch! Perhaps something to improve:
>
> url: https://github.com/0day-ci/linux/commits/Xiongfeng-Wang/auxdisplay-use-correct-string-length/20180110-180916
>
> # https://github.com/0day-ci/linux/commit/eab240fbc00377bf3e18428b401e651bd6296da0
> git remote add linux-review https://github.com/0day-ci/linux
> git remote update linux-review
> git checkout eab240fbc00377bf3e18428b401e651bd6296da0
> vim +1512 drivers/auxdisplay/panel.c
>
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1483
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1484 /* tries to bind a key to the signal name <name>. The key will send the
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1485 * strings <press>, <repeat>, <release> for these respective events.
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1486 * Returns the pointer to the new key if ok, NULL if the key could not be bound.
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1487 */
> 36d2041a3 drivers/staging/panel/panel.c Peter Huewe 2013-02-15 1488 static struct logical_input *panel_bind_key(const char *name, const char *press,
> 36d2041a3 drivers/staging/panel/panel.c Peter Huewe 2013-02-15 1489 const char *repeat,
> 36d2041a3 drivers/staging/panel/panel.c Peter Huewe 2013-02-15 1490 const char *release)
> 698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1491 {
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1492 struct logical_input *key;
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1493
> fdf4a4948 drivers/staging/panel/panel.c Dominique van den Broeck 2014-05-21 1494 key = kzalloc(sizeof(*key), GFP_KERNEL);
> eb073a9bf drivers/staging/panel/panel.c Toshiaki Yamane 2012-07-12 1495 if (!key)
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1496 return NULL;
> eb073a9bf drivers/staging/panel/panel.c Toshiaki Yamane 2012-07-12 1497
> 698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1498 if (!input_name2mask(name, &key->mask, &key->value, &scan_mask_i,
> cb46f472c drivers/staging/panel/panel.c Kulikov Vasiliy 2010-07-12 1499 &scan_mask_o)) {
> cb46f472c drivers/staging/panel/panel.c Kulikov Vasiliy 2010-07-12 1500 kfree(key);
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1501 return NULL;
> cb46f472c drivers/staging/panel/panel.c Kulikov Vasiliy 2010-07-12 1502 }
> 698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1503
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1504 key->type = INPUT_TYPE_KBD;
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1505 key->state = INPUT_ST_LOW;
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1506 key->rise_time = 1;
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1507 key->fall_time = 1;
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1508
> eab240fbc drivers/auxdisplay/panel.c Xiongfeng Wang 2018-01-08 1509 strncpy(key->u.kbd.press_str, press, sizeof(key->u.kbd.press_str) - 1);
> eab240fbc drivers/auxdisplay/panel.c Xiongfeng Wang 2018-01-08 1510 strncpy(key->u.kbd.repeat_str, repeat, sizeof(key->u.kbd.repeat_str) - 1);
> 698b1515f drivers/staging/panel/panel.c Willy Tarreau 2008-11-22 1511 strncpy(key->u.kbd.release_str, release,
> eab240fbc drivers/auxdisplay/panel.c Xiongfeng Wang 2018-01-08 @1512 sizeof(key->u.kbd.release_str - 1));
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> The " - 1" shouldn't be inside the sizeof(). It should be:
>
> sizeof(key->u.kbd.release_str) - 1);

Sure, thanks. I will change it in another version.

>
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1513 list_add(&key->list, &logical_inputs);
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1514 return key;
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1515 }
> 7005b5845 drivers/staging/panel/panel.c Willy Tarreau 2008-11-13 1516
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
>
> .
>