udev/scsi-id: various typing refactorings
This commit is contained in:
@@ -24,7 +24,7 @@ struct scsi_ioctl_command {
|
||||
* as this is a nice value for some devices, especially some of the usb
|
||||
* mass storage devices.
|
||||
*/
|
||||
#define SCSI_INQ_BUFF_LEN 254
|
||||
#define SCSI_INQ_BUFF_LEN 254U
|
||||
|
||||
/*
|
||||
* SCSI INQUIRY vendor and model (really product) lengths.
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
#pragma once
|
||||
|
||||
#include "basic-forward.h"
|
||||
|
||||
/*
|
||||
* Copyright © IBM Corp. 2003
|
||||
*/
|
||||
@@ -50,7 +52,7 @@ struct scsi_id_device {
|
||||
|
||||
int scsi_std_inquiry(struct scsi_id_device *dev_scsi, const char *devname);
|
||||
int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
|
||||
int page_code, int len);
|
||||
int page_code, size_t len);
|
||||
|
||||
/*
|
||||
* Page code values.
|
||||
|
||||
@@ -81,7 +81,7 @@ static const struct scsi_id_search_values id_search_list[] = {
|
||||
#define SG_ERR_CAT_OTHER 99 /* Some other error/warning */
|
||||
|
||||
static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
char *serial, char *serial_short, int max_len);
|
||||
char *serial, char *serial_short, size_t max_len);
|
||||
|
||||
static int sg_err_category_new(int scsi_status, int msg_status, int
|
||||
host_status, int driver_status, const
|
||||
@@ -419,12 +419,12 @@ static int append_vendor_model(
|
||||
* serial number.
|
||||
*/
|
||||
static int check_fill_0x83_id(struct scsi_id_device *dev_scsi,
|
||||
unsigned char *page_83,
|
||||
uint8_t *page_83,
|
||||
const struct scsi_id_search_values
|
||||
*id_search, char *serial, char *serial_short,
|
||||
int max_len, char *wwn,
|
||||
size_t max_len, char *wwn,
|
||||
char *wwn_vendor_extension, char *tgpt_group) {
|
||||
int i, j, s, len;
|
||||
size_t i, j, s, len;
|
||||
|
||||
/*
|
||||
* ASSOCIATION must be with the device (value 0)
|
||||
@@ -470,7 +470,7 @@ static int check_fill_0x83_id(struct scsi_id_device *dev_scsi,
|
||||
len += VENDOR_LENGTH + MODEL_LENGTH;
|
||||
|
||||
if (max_len < len) {
|
||||
log_debug("%s: length %d too short - need %d",
|
||||
log_debug("%s: length %zu too short - need %zu",
|
||||
dev_scsi->kernel, max_len, len);
|
||||
return 1;
|
||||
}
|
||||
@@ -506,14 +506,14 @@ static int check_fill_0x83_id(struct scsi_id_device *dev_scsi,
|
||||
/*
|
||||
* ASCII descriptor.
|
||||
*/
|
||||
while (i < (4 + page_83[3]))
|
||||
while (i < (4U + page_83[3]))
|
||||
serial[j++] = page_83[i++];
|
||||
} else {
|
||||
/*
|
||||
* Binary descriptor, convert to ASCII, using two bytes of
|
||||
* ASCII for each byte in the page_83.
|
||||
*/
|
||||
while (i < (4 + page_83[3])) {
|
||||
while (i < (4U + page_83[3])) {
|
||||
serial[j++] = hexchar(page_83[i] >> 4);
|
||||
serial[j++] = hexchar(page_83[i]);
|
||||
i++;
|
||||
@@ -533,18 +533,20 @@ static int check_fill_0x83_id(struct scsi_id_device *dev_scsi,
|
||||
|
||||
/* Extract the raw binary from VPD 0x83 pre-SPC devices */
|
||||
static int check_fill_0x83_prespc3(struct scsi_id_device *dev_scsi,
|
||||
unsigned char *page_83,
|
||||
uint8_t page_83[static SCSI_INQ_BUFF_LEN],
|
||||
const struct scsi_id_search_values
|
||||
*id_search, char *serial, char *serial_short, int max_len) {
|
||||
int i, j;
|
||||
*id_search, char *serial, char *serial_short, size_t max_len) {
|
||||
size_t j;
|
||||
|
||||
assert(max_len > 0);
|
||||
|
||||
serial[0] = hexchar(SCSI_ID_NAA);
|
||||
/* serial has been memset to zero before */
|
||||
j = strlen(serial); /* j = 1; */
|
||||
|
||||
/* Cap reported page length to buffer size in case of malformed responses */
|
||||
int page_len = MIN((int)page_83[3], SCSI_INQ_BUFF_LEN - 4);
|
||||
for (i = 0; (i < page_len) && (j < max_len-3); ++i) {
|
||||
size_t page_len = MIN((size_t)page_83[3], SCSI_INQ_BUFF_LEN - 4);
|
||||
for (size_t i = 0; (i < page_len) && (j + 3 < max_len); ++i) {
|
||||
serial[j++] = hexchar(page_83[4+i] >> 4);
|
||||
serial[j++] = hexchar(page_83[4+i]);
|
||||
}
|
||||
@@ -555,11 +557,11 @@ static int check_fill_0x83_prespc3(struct scsi_id_device *dev_scsi,
|
||||
|
||||
/* Get device identification VPD page */
|
||||
static int do_scsi_page83_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
char *serial, char *serial_short, int len,
|
||||
char *serial, char *serial_short, size_t len,
|
||||
char *unit_serial_number, char *wwn,
|
||||
char *wwn_vendor_extension, char *tgpt_group) {
|
||||
int retval;
|
||||
unsigned char page_83[SCSI_INQ_BUFF_LEN];
|
||||
uint8_t page_83[SCSI_INQ_BUFF_LEN];
|
||||
|
||||
/* also pick up the page 80 serial number */
|
||||
do_scsi_page80_inquiry(dev_scsi, fd, NULL, unit_serial_number, MAX_SERIAL_LEN);
|
||||
@@ -618,7 +620,7 @@ static int do_scsi_page83_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
* must still be readable before the inner bounds check, so page_end + 4 < SCSI_INQ_BUFF_LEN
|
||||
* requires page_end <= SCSI_INQ_BUFF_LEN - 5. */
|
||||
unsigned page_end = MIN(((unsigned)page_83[2] << 8) + (unsigned)page_83[3] + 3U,
|
||||
(unsigned)SCSI_INQ_BUFF_LEN - 5U);
|
||||
SCSI_INQ_BUFF_LEN - 5U);
|
||||
|
||||
FOREACH_ELEMENT(search_value, id_search_list) {
|
||||
/*
|
||||
@@ -629,7 +631,7 @@ static int do_scsi_page83_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
/* Ensure the full descriptor fits within the buffer, including
|
||||
* fixed-offset accesses up to page_83[7] in the TGTGROUP path
|
||||
* of check_fill_0x83_id(), so require at least 8 bytes from j */
|
||||
if (j + MAX(4U + (unsigned)page_83[j + 3], 8U) > (unsigned)SCSI_INQ_BUFF_LEN)
|
||||
if (j + MAX(4U + (unsigned)page_83[j + 3], 8U) > SCSI_INQ_BUFF_LEN)
|
||||
break;
|
||||
retval = check_fill_0x83_id(dev_scsi, page_83 + j,
|
||||
search_value,
|
||||
@@ -653,10 +655,10 @@ static int do_scsi_page83_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
* conformant to the SCSI-2 format.
|
||||
*/
|
||||
static int do_scsi_page83_prespc3_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
char *serial, char *serial_short, int len) {
|
||||
char *serial, char *serial_short, size_t len) {
|
||||
int retval;
|
||||
int i, j;
|
||||
unsigned char page_83[SCSI_INQ_BUFF_LEN];
|
||||
size_t i, j;
|
||||
uint8_t page_83[SCSI_INQ_BUFF_LEN];
|
||||
|
||||
memzero(page_83, SCSI_INQ_BUFF_LEN);
|
||||
retval = scsi_inquiry(dev_scsi, fd, 1, PAGE_83, page_83, SCSI_INQ_BUFF_LEN);
|
||||
@@ -704,7 +706,7 @@ static int do_scsi_page83_prespc3_inquiry(struct scsi_id_device *dev_scsi, int f
|
||||
* in the page_83.
|
||||
*/
|
||||
/* Cap reported page length to buffer size in case of malformed responses */
|
||||
int page_len = MIN((int)page_83[3] + 4, SCSI_INQ_BUFF_LEN);
|
||||
size_t page_len = MIN((size_t)page_83[3] + 4, SCSI_INQ_BUFF_LEN);
|
||||
while (i < page_len && j + 2 < len) {
|
||||
serial[j++] = hexchar(page_83[i] >> 4);
|
||||
serial[j++] = hexchar(page_83[i]);
|
||||
@@ -715,12 +717,11 @@ static int do_scsi_page83_prespc3_inquiry(struct scsi_id_device *dev_scsi, int f
|
||||
|
||||
/* Get unit serial number VPD page */
|
||||
static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
char *serial, char *serial_short, int max_len) {
|
||||
char *serial, char *serial_short, size_t max_len) {
|
||||
int retval;
|
||||
int ser_ind;
|
||||
int i;
|
||||
int len;
|
||||
unsigned char buf[SCSI_INQ_BUFF_LEN];
|
||||
size_t page_len;
|
||||
uint8_t buf[SCSI_INQ_BUFF_LEN];
|
||||
|
||||
memzero(buf, SCSI_INQ_BUFF_LEN);
|
||||
retval = scsi_inquiry(dev_scsi, fd, 1, PAGE_80, buf, SCSI_INQ_BUFF_LEN);
|
||||
@@ -732,10 +733,10 @@ static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
return 1;
|
||||
}
|
||||
|
||||
len = 1 + VENDOR_LENGTH + MODEL_LENGTH + buf[3];
|
||||
if (max_len < len) {
|
||||
log_debug("%s: length %d too short - need %d",
|
||||
dev_scsi->kernel, max_len, len);
|
||||
page_len = 1 + VENDOR_LENGTH + MODEL_LENGTH + buf[3];
|
||||
if (max_len < page_len) {
|
||||
log_debug("%s: length %zu too short - need %zu",
|
||||
dev_scsi->kernel, max_len, page_len);
|
||||
return 1;
|
||||
}
|
||||
/*
|
||||
@@ -743,19 +744,19 @@ static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
* specific type where we prepend '0' + vendor + model.
|
||||
*/
|
||||
/* Cap reported page length to buffer size in case of malformed responses */
|
||||
len = MIN((int)buf[3], SCSI_INQ_BUFF_LEN - 4);
|
||||
page_len = MIN((size_t)buf[3], SCSI_INQ_BUFF_LEN - 4);
|
||||
if (serial) {
|
||||
serial[0] = 'S';
|
||||
ser_ind = append_vendor_model(dev_scsi, serial + 1);
|
||||
if (ser_ind < 0)
|
||||
return 1;
|
||||
ser_ind++; /* for the leading 'S' */
|
||||
for (i = 4; i < len + 4; i++, ser_ind++)
|
||||
for (size_t i = 4; i < page_len + 4; i++, ser_ind++)
|
||||
serial[ser_ind] = buf[i];
|
||||
}
|
||||
if (serial_short) {
|
||||
memcpy(serial_short, buf + 4, len);
|
||||
serial_short[len] = '\0';
|
||||
memcpy(serial_short, buf + 4, page_len);
|
||||
serial_short[page_len] = '\0';
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -799,11 +800,11 @@ out:
|
||||
}
|
||||
|
||||
int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
|
||||
int page_code, int len) {
|
||||
unsigned char page0[SCSI_INQ_BUFF_LEN];
|
||||
int page_code, size_t len) {
|
||||
uint8_t page0[SCSI_INQ_BUFF_LEN];
|
||||
int fd = -EBADF;
|
||||
int cnt;
|
||||
int ind;
|
||||
size_t ind;
|
||||
int retval;
|
||||
|
||||
memzero(dev_scsi->serial, len);
|
||||
@@ -879,7 +880,7 @@ int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
|
||||
}
|
||||
|
||||
/* Cap reported page length to buffer size in case of malformed responses */
|
||||
int page0_end = MIN((int)page0[3] + 3, SCSI_INQ_BUFF_LEN - 1);
|
||||
size_t page0_end = MIN((size_t)page0[3] + 3, SCSI_INQ_BUFF_LEN - 1);
|
||||
|
||||
for (ind = 4; ind <= page0_end; ind++)
|
||||
if (page0[ind] == PAGE_83)
|
||||
|
||||
Reference in New Issue
Block a user