diff mbox

[05/18] iio: change strncpy+truncation to strlcpy

Message ID 1531445134-19250-1-git-send-email-asmadeus@codewreck.org (mailing list archive)
State New, archived
Headers show

Commit Message

Dominique Martinet July 13, 2018, 1:25 a.m. UTC
Generated by scripts/coccinelle/misc/strncpy_truncation.cocci

Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
---

Please see https://marc.info/?l=linux-kernel&m=153144450722324&w=2 (the
first patch of the serie) for the motivation behind this patch

 drivers/iio/common/st_sensors/st_sensors_core.c | 3 +--
 drivers/iio/pressure/st_pressure_i2c.c          | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

Comments

Jonathan Cameron July 15, 2018, 10:39 a.m. UTC | #1
On Fri, 13 Jul 2018 03:25:34 +0200
Dominique Martinet <asmadeus@codewreck.org> wrote:

> Generated by scripts/coccinelle/misc/strncpy_truncation.cocci
> 
> Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>

Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.

Thanks,

Jonathan
> ---
> 
> Please see https://marc.info/?l=linux-kernel&m=153144450722324&w=2 (the
> first patch of the serie) for the motivation behind this patch
> 
>  drivers/iio/common/st_sensors/st_sensors_core.c | 3 +--
>  drivers/iio/pressure/st_pressure_i2c.c          | 3 +--
>  2 files changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
> index 57db19182e95..26fbd1bd9413 100644
> --- a/drivers/iio/common/st_sensors/st_sensors_core.c
> +++ b/drivers/iio/common/st_sensors/st_sensors_core.c
> @@ -380,8 +380,7 @@ void st_sensors_of_name_probe(struct device *dev,
>  		return;
>  
>  	/* The name from the OF match takes precedence if present */
> -	strncpy(name, of_id->data, len);
> -	name[len - 1] = '\0';
> +	strlcpy(name, of_id->data, len);
>  }
>  EXPORT_SYMBOL(st_sensors_of_name_probe);
>  #else
> diff --git a/drivers/iio/pressure/st_pressure_i2c.c b/drivers/iio/pressure/st_pressure_i2c.c
> index fbb59059e942..2026a1012012 100644
> --- a/drivers/iio/pressure/st_pressure_i2c.c
> +++ b/drivers/iio/pressure/st_pressure_i2c.c
> @@ -94,9 +94,8 @@ static int st_press_i2c_probe(struct i2c_client *client,
>  		if ((ret < 0) || (ret >= ST_PRESS_MAX))
>  			return -ENODEV;
>  
> -		strncpy(client->name, st_press_id_table[ret].name,
> +		strlcpy(client->name, st_press_id_table[ret].name,
>  				sizeof(client->name));
> -		client->name[sizeof(client->name) - 1] = '\0';
>  	} else if (!id)
>  		return -ENODEV;
>  

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dominique Martinet July 16, 2018, 11:42 a.m. UTC | #2
Jonathan Cameron wrote on Sun, Jul 15, 2018:
> On Fri, 13 Jul 2018 03:25:34 +0200
> Dominique Martinet <asmadeus@codewreck.org> wrote:
> > Generated by scripts/coccinelle/misc/strncpy_truncation.cocci
> > 
> > Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
> 
> Applied to the togreg branch of iio.git and pushed out as testing
> for the autobuilders to play with it.

Thanks!

I have been pointed out that strlcpy, unlike strncpy, will read past the
size given in the input string and thus is Badâ„¢ if the input string is
not nul terminated.

After taking the time to check I believe this should not happen as the
original name seems to come from a dentry's d_name after proper
preparation (a buffer is allocated precisely for this purpose), but it
will not hurt to wait for that version.


The second reason I was waiting is that I intended to check for each
patch if it is safe to not pad the end of the string with zeroes (to
avoid e.g. information leaks) and that seems OK as well here after a
quick check but I wouldn't trust my own eyes this late so I'll let you
be judge of that if you feel like taking v1 anyway.

Otherwise, I'll recheck properly and submit a v2 with strscpy and a
better commit message after the coccinelle script is taken for inclusion
and doing a better check but this might take a while longer.


Thanks,
Jonathan Cameron July 22, 2018, 8:13 a.m. UTC | #3
On Mon, 16 Jul 2018 13:42:06 +0200
Dominique Martinet <asmadeus@codewreck.org> wrote:

> Jonathan Cameron wrote on Sun, Jul 15, 2018:
> > On Fri, 13 Jul 2018 03:25:34 +0200
> > Dominique Martinet <asmadeus@codewreck.org> wrote:  
> > > Generated by scripts/coccinelle/misc/strncpy_truncation.cocci
> > > 
> > > Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>  
> > 
> > Applied to the togreg branch of iio.git and pushed out as testing
> > for the autobuilders to play with it.  
> 
> Thanks!
> 
> I have been pointed out that strlcpy, unlike strncpy, will read past the
> size given in the input string and thus is Badâ„¢ if the input string is
> not nul terminated.
> 
> After taking the time to check I believe this should not happen as the
> original name seems to come from a dentry's d_name after proper
> preparation (a buffer is allocated precisely for this purpose), but it
> will not hurt to wait for that version.
> 
> 
> The second reason I was waiting is that I intended to check for each
> patch if it is safe to not pad the end of the string with zeroes (to
> avoid e.g. information leaks) and that seems OK as well here after a
> quick check but I wouldn't trust my own eyes this late so I'll let you
> be judge of that if you feel like taking v1 anyway.
> 
> Otherwise, I'll recheck properly and submit a v2 with strscpy and a
> better commit message after the coccinelle script is taken for inclusion
> and doing a better check but this might take a while longer.
> 
> 
> Thanks,

In this particular case I'm fairly sure it is safe so I'll leave it as is.

Thanks,

Jonathan
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
index 57db19182e95..26fbd1bd9413 100644
--- a/drivers/iio/common/st_sensors/st_sensors_core.c
+++ b/drivers/iio/common/st_sensors/st_sensors_core.c
@@ -380,8 +380,7 @@  void st_sensors_of_name_probe(struct device *dev,
 		return;
 
 	/* The name from the OF match takes precedence if present */
-	strncpy(name, of_id->data, len);
-	name[len - 1] = '\0';
+	strlcpy(name, of_id->data, len);
 }
 EXPORT_SYMBOL(st_sensors_of_name_probe);
 #else
diff --git a/drivers/iio/pressure/st_pressure_i2c.c b/drivers/iio/pressure/st_pressure_i2c.c
index fbb59059e942..2026a1012012 100644
--- a/drivers/iio/pressure/st_pressure_i2c.c
+++ b/drivers/iio/pressure/st_pressure_i2c.c
@@ -94,9 +94,8 @@  static int st_press_i2c_probe(struct i2c_client *client,
 		if ((ret < 0) || (ret >= ST_PRESS_MAX))
 			return -ENODEV;
 
-		strncpy(client->name, st_press_id_table[ret].name,
+		strlcpy(client->name, st_press_id_table[ret].name,
 				sizeof(client->name));
-		client->name[sizeof(client->name) - 1] = '\0';
 	} else if (!id)
 		return -ENODEV;