diff mbox series

auxdisplay: use correct string length

Message ID 1515413285-40933-1-git-send-email-wangxiongfeng2@huawei.com
State Superseded
Headers show
Series auxdisplay: use correct string length | expand

Commit Message

Xiongfeng Wang Jan. 8, 2018, 12:08 p.m. UTC
From: Xiongfeng Wang <xiongfeng.wang@linaro.org>


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 <xiongfeng.wang@linaro.org>

---
 drivers/auxdisplay/panel.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

-- 
1.8.3.1

Comments

Dan Carpenter Jan. 16, 2018, 8:40 a.m. UTC | #1
[ 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
Xiongfeng Wang Jan. 16, 2018, 9:22 a.m. UTC | #2
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

> 

> .

>
diff mbox series

Patch

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;
 }