qemu-e2k/include
Peter Delevoryas 87bd33e8b0 hw: aspeed_gpio: Fix GPIO array indexing
The gpio array is declared as a dense array:

  qemu_irq gpios[ASPEED_GPIO_NR_PINS];

(AST2500 has 228, AST2400 has 216, AST2600 has 208)

However, this array is used like a matrix of GPIO sets
(e.g. gpio[NR_SETS][NR_PINS_PER_SET] = gpio[8][32])

  size_t offset = set * GPIOS_PER_SET + gpio;
  qemu_set_irq(s->gpios[offset], !!(new & mask));

This can result in an out-of-bounds access to "s->gpios" because the
gpio sets do _not_ have the same length. Some of the groups (e.g.
GPIOAB) only have 4 pins. 228 != 8 * 32 == 256.

To fix this, I converted the gpio array from dense to sparse, to that
match both the hardware layout and this existing indexing code.

Fixes: 4b7f956862 ("hw/gpio: Add basic Aspeed GPIO model for AST2400 and AST2500")
Signed-off-by: Peter Delevoryas <pdel@fb.com>
Message-Id: <20211008033501.934729-2-pdel@fb.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
2021-10-12 08:20:08 +02:00
..
authz
block block: introduce max_hw_iov for use in scsi-generic 2021-10-06 10:25:55 +02:00
chardev chardev: add some comments about the class methods 2021-09-14 16:57:11 +04:00
crypto
disas
exec tcg: Split out MemOpIdx to exec/memopidx.h 2021-10-05 16:53:17 -07:00
fpu
hw hw: aspeed_gpio: Fix GPIO array indexing 2021-10-12 08:20:08 +02:00
io
libdecnumber
migration
monitor target/i386: Add HMP and QMP interfaces for SGX 2021-09-30 15:30:24 +02:00
net vhost_net: do not assume nvqs is always 2 2021-09-04 17:34:05 -04:00
qapi
qemu mirror: Handle errors after READY cancel 2021-10-07 10:26:35 -07:00
qom
scsi
semihosting
standard-headers
sysemu block: introduce max_hw_iov for use in scsi-generic 2021-10-06 10:25:55 +02:00
tcg tcg: Split out MemOpIdx to exec/memopidx.h 2021-10-05 16:53:17 -07:00
ui ui/gtk-egl: Wait for the draw signal for dmabuf blobs 2021-09-15 08:41:59 +02:00
user
elf.h
glib-compat.h
qemu-common.h
qemu-io.h
trace-tcg.h