| From 81df022b688d43d2a3667518b2f755d384397910 Mon Sep 17 00:00:00 2001 |
| From: Martin Wilck <mwilck@suse.com> |
| Date: Mon, 27 Nov 2017 23:47:35 +0100 |
| Subject: scsi: scsi_devinfo: cleanly zero-pad devinfo strings |
| |
| From: Martin Wilck <mwilck@suse.com> |
| |
| commit 81df022b688d43d2a3667518b2f755d384397910 upstream. |
| |
| Cleanly fill memory for "vendor" and "model" with 0-bytes for the |
| "compatible" case rather than adding only a single 0 byte. This |
| simplifies the devinfo code a a bit, and avoids mistakes in other places |
| of the code (not in current upstream, but we had one such mistake in the |
| SUSE kernel). |
| |
| [mkp: applied by hand and added braces] |
| |
| Signed-off-by: Martin Wilck <mwilck@suse.com> |
| Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/scsi_devinfo.c | 22 +++++++--------------- |
| 1 file changed, 7 insertions(+), 15 deletions(-) |
| |
| --- a/drivers/scsi/scsi_devinfo.c |
| +++ b/drivers/scsi/scsi_devinfo.c |
| @@ -33,7 +33,6 @@ struct scsi_dev_info_list_table { |
| }; |
| |
| |
| -static const char spaces[] = " "; /* 16 of them */ |
| static unsigned scsi_default_dev_flags; |
| static LIST_HEAD(scsi_dev_info_list); |
| static char scsi_dev_flags[256]; |
| @@ -290,20 +289,13 @@ static void scsi_strcpy_devinfo(char *na |
| size_t from_length; |
| |
| from_length = strlen(from); |
| - strncpy(to, from, min(to_length, from_length)); |
| - if (from_length < to_length) { |
| - if (compatible) { |
| - /* |
| - * NUL terminate the string if it is short. |
| - */ |
| - to[from_length] = '\0'; |
| - } else { |
| - /* |
| - * space pad the string if it is short. |
| - */ |
| - strncpy(&to[from_length], spaces, |
| - to_length - from_length); |
| - } |
| + /* this zero-pads the destination */ |
| + strncpy(to, from, to_length); |
| + if (from_length < to_length && !compatible) { |
| + /* |
| + * space pad the string if it is short. |
| + */ |
| + memset(&to[from_length], ' ', to_length - from_length); |
| } |
| if (from_length > to_length) |
| printk(KERN_WARNING "%s: %s string '%s' is too long\n", |