Messages in this thread | | | Date | Wed, 22 Apr 2020 01:24:00 -0700 | From | Christoph Hellwig <> | Subject | Re: [PATCH 3/3] floppy: suppress UBSAN warning in setup_rw_floppy() |
| |
On Wed, Apr 22, 2020 at 11:20:23AM +0300, Denis Efremov wrote: > What do you think about changing it this way? > > struct floppy_raw_cmd { > > unsigned char rate; > > -#define FD_RAW_CMD_SIZE 16 > +#define FD_RAW_CMD_SIZE 33 > #define FD_RAW_REPLY_SIZE 16 > > unsigned char cmd_count; > - unsigned char cmd[FD_RAW_CMD_SIZE]; > - unsigned char reply_count; > - unsigned char reply[FD_RAW_REPLY_SIZE]; > + union { > + struct { > + unsigned char reserved[16]; > + unsigned char reply_count; > + unsigned char reply[FD_RAW_REPLY_SIZE]; > + }; > + unsigned char cmd[FD_RAW_CMD_SIZE]; > + };
I don't think we can just change FD_RAW_CMD_SIZE or cmd as that could break userspace. But otherwise, yes something very much like that:
> #define FD_RAW_CMD_SIZE 16 > #define FD_RAW_REPLY_SIZE 16 > +#define FD_RAW_FULL_CMD_SIZE (FD_RAW_CMD_SIZE + 1 + FD_RAW_CMD_SIZE) > > unsigned char cmd_count; > - unsigned char cmd[FD_RAW_CMD_SIZE]; > - unsigned char reply_count; > - unsigned char reply[FD_RAW_REPLY_SIZE]; > + union { > + struct { > + unsigned char cmd[FD_RAW_CMD_SIZE]; > + unsigned char reply_count; > + unsigned char reply[FD_RAW_REPLY_SIZE]; > + }; > + unsigned char full_cmd[FD_RAW_FULL_CMD_SIZE]; > + };
> int track; > > Denis ---end quoted text---
| |