s390/dasd: fix string length handling
commitf7cf224246
upstream. Building dasd_eckd.o with latest clang reveals this bug: CC drivers/s390/block/dasd_eckd.o drivers/s390/block/dasd_eckd.c:1082:3: warning: 'snprintf' will always be truncated; specified size is 1, but format string expands to at least 11 [-Wfortify-source] 1082 | snprintf(print_uid, sizeof(*print_uid), | ^ drivers/s390/block/dasd_eckd.c:1087:3: warning: 'snprintf' will always be truncated; specified size is 1, but format string expands to at least 10 [-Wfortify-source] 1087 | snprintf(print_uid, sizeof(*print_uid), | ^ Fix this by moving and using the existing UID_STRLEN for the arrays that are being written to. Also rename UID_STRLEN to DASD_UID_STRLEN to clarify its scope. Fixes:23596961b4
("s390/dasd: split up dasd_eckd_read_conf") Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Tested-by: Nick Desaulniers <ndesaulniers@google.com> # build Reported-by: Nathan Chancellor <nathan@kernel.org> Closes: https://github.com/ClangBuiltLinux/linux/issues/1923 Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Link: https://lore.kernel.org/r/20230828153142.2843753-2-hca@linux.ibm.com Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
812736446c
commit
90819a4a91
|
@ -1378,16 +1378,12 @@ static ssize_t dasd_vendor_show(struct device *dev,
|
|||
|
||||
static DEVICE_ATTR(vendor, 0444, dasd_vendor_show, NULL);
|
||||
|
||||
#define UID_STRLEN ( /* vendor */ 3 + 1 + /* serial */ 14 + 1 +\
|
||||
/* SSID */ 4 + 1 + /* unit addr */ 2 + 1 +\
|
||||
/* vduit */ 32 + 1)
|
||||
|
||||
static ssize_t
|
||||
dasd_uid_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
char uid_string[DASD_UID_STRLEN];
|
||||
struct dasd_device *device;
|
||||
struct dasd_uid uid;
|
||||
char uid_string[UID_STRLEN];
|
||||
char ua_string[3];
|
||||
|
||||
device = dasd_device_from_cdev(to_ccwdev(dev));
|
||||
|
|
|
@ -1079,12 +1079,12 @@ static void dasd_eckd_get_uid_string(struct dasd_conf *conf,
|
|||
|
||||
create_uid(conf, &uid);
|
||||
if (strlen(uid.vduit) > 0)
|
||||
snprintf(print_uid, sizeof(*print_uid),
|
||||
snprintf(print_uid, DASD_UID_STRLEN,
|
||||
"%s.%s.%04x.%02x.%s",
|
||||
uid.vendor, uid.serial, uid.ssid,
|
||||
uid.real_unit_addr, uid.vduit);
|
||||
else
|
||||
snprintf(print_uid, sizeof(*print_uid),
|
||||
snprintf(print_uid, DASD_UID_STRLEN,
|
||||
"%s.%s.%04x.%02x",
|
||||
uid.vendor, uid.serial, uid.ssid,
|
||||
uid.real_unit_addr);
|
||||
|
@ -1093,8 +1093,8 @@ static void dasd_eckd_get_uid_string(struct dasd_conf *conf,
|
|||
static int dasd_eckd_check_cabling(struct dasd_device *device,
|
||||
void *conf_data, __u8 lpm)
|
||||
{
|
||||
char print_path_uid[DASD_UID_STRLEN], print_device_uid[DASD_UID_STRLEN];
|
||||
struct dasd_eckd_private *private = device->private;
|
||||
char print_path_uid[60], print_device_uid[60];
|
||||
struct dasd_conf path_conf;
|
||||
|
||||
path_conf.data = conf_data;
|
||||
|
@ -1293,9 +1293,9 @@ static void dasd_eckd_path_available_action(struct dasd_device *device,
|
|||
__u8 path_rcd_buf[DASD_ECKD_RCD_DATA_SIZE];
|
||||
__u8 lpm, opm, npm, ppm, epm, hpfpm, cablepm;
|
||||
struct dasd_conf_data *conf_data;
|
||||
char print_uid[DASD_UID_STRLEN];
|
||||
struct dasd_conf path_conf;
|
||||
unsigned long flags;
|
||||
char print_uid[60];
|
||||
int rc, pos;
|
||||
|
||||
opm = 0;
|
||||
|
@ -5855,8 +5855,8 @@ static void dasd_eckd_dump_sense(struct dasd_device *device,
|
|||
static int dasd_eckd_reload_device(struct dasd_device *device)
|
||||
{
|
||||
struct dasd_eckd_private *private = device->private;
|
||||
char print_uid[DASD_UID_STRLEN];
|
||||
int rc, old_base;
|
||||
char print_uid[60];
|
||||
struct dasd_uid uid;
|
||||
unsigned long flags;
|
||||
|
||||
|
|
|
@ -259,6 +259,10 @@ struct dasd_uid {
|
|||
char vduit[33];
|
||||
};
|
||||
|
||||
#define DASD_UID_STRLEN ( /* vendor */ 3 + 1 + /* serial */ 14 + 1 + \
|
||||
/* SSID */ 4 + 1 + /* unit addr */ 2 + 1 + \
|
||||
/* vduit */ 32 + 1)
|
||||
|
||||
/*
|
||||
* PPRC Status data
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue