linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kent Gibson <warthog618@gmail.com>
To: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
	bgolaszewski@baylibre.com, linus.walleij@linaro.org,
	andy.shevchenko@gmail.com, arnd@arndb.de
Cc: Kent Gibson <warthog618@gmail.com>, kernel test robot <lkp@intel.com>
Subject: [PATCH v10 02/20] gpiolib: cdev: replace strncpy() with strscpy()
Date: Mon, 28 Sep 2020 08:27:49 +0800	[thread overview]
Message-ID: <20200928002807.12146-3-warthog618@gmail.com> (raw)
In-Reply-To: <20200928002807.12146-1-warthog618@gmail.com>

Replace usage of strncpy() with strscpy() to remove -Wstringop-truncation
warnings.

The structures being populated are zeroed, to prevent stack leakage as
they are returned to userspace, so strscpy() performs the equivalent
function without the warnings.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Kent Gibson <warthog618@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
---

The memset in gpio_desc_to_lineinfo(), in conjunction with the strscpy,
is necessary as strncpy zero pads the remainder of the destination.
It also guarantees that the info cannot leak kernel stack to userspace.
This is useful here, but is even more important for the v2 info, that
this function is changed to generate in a subsequent patch, as that
struct contains padding and attribute arrays that also need to be
initialised.

 drivers/gpio/gpiolib-cdev.c | 23 +++++++----------------
 1 file changed, 7 insertions(+), 16 deletions(-)

diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c
index 81ce2020f17b..86679397d09c 100644
--- a/drivers/gpio/gpiolib-cdev.c
+++ b/drivers/gpio/gpiolib-cdev.c
@@ -752,6 +752,7 @@ static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
 	bool ok_for_pinctrl;
 	unsigned long flags;
 
+	memset(info, 0, sizeof(*info));
 	info->line_offset = gpio_chip_hwgpio(desc);
 
 	/*
@@ -766,19 +767,11 @@ static void gpio_desc_to_lineinfo(struct gpio_desc *desc,
 
 	spin_lock_irqsave(&gpio_lock, flags);
 
-	if (desc->name) {
-		strncpy(info->name, desc->name, sizeof(info->name));
-		info->name[sizeof(info->name) - 1] = '\0';
-	} else {
-		info->name[0] = '\0';
-	}
+	if (desc->name)
+		strscpy(info->name, desc->name, sizeof(info->name));
 
-	if (desc->label) {
-		strncpy(info->consumer, desc->label, sizeof(info->consumer));
-		info->consumer[sizeof(info->consumer) - 1] = '\0';
-	} else {
-		info->consumer[0] = '\0';
-	}
+	if (desc->label)
+		strscpy(info->consumer, desc->label, sizeof(info->consumer));
 
 	/*
 	 * Userspace only need to know that the kernel is using this GPIO so
@@ -842,12 +835,10 @@ static long gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 
 		memset(&chipinfo, 0, sizeof(chipinfo));
 
-		strncpy(chipinfo.name, dev_name(&gdev->dev),
+		strscpy(chipinfo.name, dev_name(&gdev->dev),
 			sizeof(chipinfo.name));
-		chipinfo.name[sizeof(chipinfo.name)-1] = '\0';
-		strncpy(chipinfo.label, gdev->label,
+		strscpy(chipinfo.label, gdev->label,
 			sizeof(chipinfo.label));
-		chipinfo.label[sizeof(chipinfo.label)-1] = '\0';
 		chipinfo.lines = gdev->ngpio;
 		if (copy_to_user(ip, &chipinfo, sizeof(chipinfo)))
 			return -EFAULT;
-- 
2.28.0


  parent reply	other threads:[~2020-09-28  0:29 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-28  0:27 [PATCH v10 00/20] gpio: cdev: add uAPI v2 Kent Gibson
2020-09-28  0:27 ` [PATCH v10 01/20] gpiolib: cdev: gpio_desc_to_lineinfo() should set info offset Kent Gibson
2020-09-28  0:27 ` Kent Gibson [this message]
2020-09-28  0:27 ` [PATCH v10 03/20] gpio: uapi: define GPIO_MAX_NAME_SIZE for array sizes Kent Gibson
2020-09-28  0:27 ` [PATCH v10 04/20] gpio: uapi: define uAPI v2 Kent Gibson
2020-09-28  0:27 ` [PATCH v10 05/20] gpiolib: make cdev a build option Kent Gibson
2020-09-28  0:27 ` [PATCH v10 06/20] gpiolib: add build option for CDEV v1 ABI Kent Gibson
2020-09-28  0:27 ` [PATCH v10 07/20] gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL Kent Gibson
2020-09-28  0:27 ` [PATCH v10 08/20] gpiolib: cdev: support GPIO_V2_GET_LINEINFO_IOCTL and GPIO_V2_GET_LINEINFO_WATCH_IOCTL Kent Gibson
2020-09-28  0:27 ` [PATCH v10 09/20] gpiolib: cdev: support edge detection for uAPI v2 Kent Gibson
2020-09-28  0:27 ` [PATCH v10 10/20] gpiolib: cdev: support GPIO_V2_LINE_SET_CONFIG_IOCTL Kent Gibson
2020-09-28  0:27 ` [PATCH v10 11/20] gpiolib: cdev: support GPIO_V2_LINE_SET_VALUES_IOCTL Kent Gibson
2020-09-28  0:27 ` [PATCH v10 12/20] gpiolib: cdev: support setting debounce Kent Gibson
2020-09-28  0:28 ` [PATCH v10 13/20] gpio: uapi: document uAPI v1 as deprecated Kent Gibson
2020-09-28  0:28 ` [PATCH v10 14/20] tools: gpio: port lsgpio to v2 uAPI Kent Gibson
2020-09-28  0:28 ` [PATCH v10 15/20] tools: gpio: port gpio-watch " Kent Gibson
2020-09-28  0:28 ` [PATCH v10 16/20] tools: gpio: rename nlines to num_lines Kent Gibson
2020-09-28  0:28 ` [PATCH v10 17/20] tools: gpio: port gpio-hammer to v2 uAPI Kent Gibson
2020-09-28  0:28 ` [PATCH v10 18/20] tools: gpio: port gpio-event-mon " Kent Gibson
2020-09-28  0:28 ` [PATCH v10 19/20] tools: gpio: add multi-line monitoring to gpio-event-mon Kent Gibson
2020-09-28  0:28 ` [PATCH v10 20/20] tools: gpio: add debounce support " Kent Gibson
2020-09-29 15:13 ` [PATCH v10 00/20] gpio: cdev: add uAPI v2 Bartosz Golaszewski
2020-09-29 16:22   ` Andy Shevchenko

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=20200928002807.12146-3-warthog618@gmail.com \
    --to=warthog618@gmail.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=arnd@arndb.de \
    --cc=bgolaszewski@baylibre.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.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).