Message ID | 20200907015535.827885-2-f4bug@amsat.org |
---|---|
State | Superseded |
Headers | show |
Series | hw/char/serial: Housekeeping | expand |
On 9/6/20 6:55 PM, Philippe Mathieu-Daudé wrote: > The serial device has 8 registers, each 8-bit. The MemoryRegionOps > 'serial_io_ops' is initialized with max_access_size=1, and all > memory_region_init_io() callers correctly set the region size to > 8 bytes: > - serial_io_realize > - serial_isa_realizefn > - serial_pci_realize > - multi_serial_pci_realize > > It is safe to assert the offset argument of serial_ioport_read() > and serial_ioport_write() is always less than 8. > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > hw/char/serial.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/hw/char/serial.c b/hw/char/serial.c index 23864794929..a855ef66ea2 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -344,7 +344,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, { SerialState *s = opaque; - addr &= 7; + assert(size == 1 && addr < 8); trace_serial_ioport_write(addr, val); switch(addr) { default: @@ -485,7 +485,7 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size) SerialState *s = opaque; uint32_t ret; - addr &= 7; + assert(size == 1 && addr < 8); switch(addr) { default: case 0:
The serial device has 8 registers, each 8-bit. The MemoryRegionOps 'serial_io_ops' is initialized with max_access_size=1, and all memory_region_init_io() callers correctly set the region size to 8 bytes: - serial_io_realize - serial_isa_realizefn - serial_pci_realize - multi_serial_pci_realize It is safe to assert the offset argument of serial_ioport_read() and serial_ioport_write() is always less than 8. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/char/serial.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)