mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 14:24:11 +08:00
s390/dasd: fix string length handling
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>
This commit is contained in:
parent
1a721de848
commit
f7cf224246
@ -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
Block a user