[PATCH 2/3] floppy: add defines for sizes of cmd & reply buffers of floppy_raw_cmd

From: Denis Efremov
Date: Tue Apr 21 2020 - 08:58:11 EST


Use FD_RAW_CMD_SIZE, FD_RAW_REPLY_SIZE defines instead of magic numbers
for cmd & reply buffers of struct floppy_raw_cmd. Remove local to
floppy.c MAX_REPLIES define, as it is now FD_RAW_REPLY_SIZE.

Signed-off-by: Denis Efremov <efremov@xxxxxxxxx>
---
drivers/block/floppy.c | 15 ++++++++-------
include/uapi/linux/fd.h | 8 ++++++--
2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index ac2023c757e3..2169df796d18 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -337,8 +337,7 @@ static bool initialized;
/*
* globals used by 'result()'
*/
-#define MAX_REPLIES 16
-static unsigned char reply_buffer[MAX_REPLIES];
+static unsigned char reply_buffer[FD_RAW_REPLY_SIZE];
static int inr; /* size of reply buffer, when called from interrupt */
#define ST0 0
#define ST1 1
@@ -1165,7 +1164,7 @@ static int result(int fdc)
int i;
int status = 0;

- for (i = 0; i < MAX_REPLIES; i++) {
+ for (i = 0; i < FD_RAW_REPLY_SIZE; i++) {
status = wait_til_ready(fdc);
if (status < 0)
break;
@@ -1847,7 +1846,7 @@ static void show_floppy(int fdc)
output_log[(i + output_log_pos) % OLOGSIZE].jiffies);
pr_info("last result at %lu\n", resultjiffies);
pr_info("last redo_fd_request at %lu\n", lastredo);
- print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 1,
+ print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, FD_RAW_REPLY_SIZE, 1,
reply_buffer, resultsize, true);

pr_info("status=%x\n", fdc_inb(fdc, FD_STATUS));
@@ -3082,7 +3081,7 @@ static void raw_cmd_done(int flag)
raw_cmd->flags |= FD_RAW_HARDFAILURE;
} else {
raw_cmd->reply_count = inr;
- if (raw_cmd->reply_count > MAX_REPLIES)
+ if (raw_cmd->reply_count > FD_RAW_REPLY_SIZE)
raw_cmd->reply_count = 0;
for (i = 0; i < raw_cmd->reply_count; i++)
raw_cmd->reply[i] = reply_buffer[i];
@@ -3193,7 +3192,9 @@ static int raw_cmd_copyin(int cmd, void __user *param,
if (ret)
return -EFAULT;
param += sizeof(struct floppy_raw_cmd);
- if (ptr->cmd_count > 33)
+ if (ptr->cmd_count > FD_RAW_CMD_SIZE +
+ sizeof_field(struct floppy_raw_cmd, reply_count) +
+ FD_RAW_REPLY_SIZE)
/* the command may now also take up the space
* initially intended for the reply & the
* reply count. Needed for long 82078 commands
@@ -3204,7 +3205,7 @@ static int raw_cmd_copyin(int cmd, void __user *param,
*/
return -EINVAL;

- for (i = 0; i < 16; i++)
+ for (i = 0; i < FD_RAW_REPLY_SIZE; i++)
ptr->reply[i] = 0;
ptr->resultcode = 0;

diff --git a/include/uapi/linux/fd.h b/include/uapi/linux/fd.h
index f5cb0aa8cebc..d3961b52cb9a 100644
--- a/include/uapi/linux/fd.h
+++ b/include/uapi/linux/fd.h
@@ -360,10 +360,14 @@ struct floppy_raw_cmd {
int buffer_length; /* length of allocated buffer */

unsigned char rate;
+
+#define FD_RAW_CMD_SIZE 16
+#define FD_RAW_REPLY_SIZE 16
+
unsigned char cmd_count;
- unsigned char cmd[16];
+ unsigned char cmd[FD_RAW_CMD_SIZE];
unsigned char reply_count;
- unsigned char reply[16];
+ unsigned char reply[FD_RAW_REPLY_SIZE];
int track;
int resultcode;

--
2.25.3