mirror of https://github.com/xemu-project/xemu.git
cg3: add extra check to prevent CG3 register array overflow
The case statements in the CG3 read and write register routines have a maximum value of CG3_REG_SIZE, so if a value were written to this offset then it would overflow the register array. Currently this cannot be exploited since the MemoryRegion restricts accesses to the range 0 ... CG3_REG_SIZE - 1, but it seems worth clarifying this for future review and/or static analysis. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> CC: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e09c49f40d
commit
366d4f7e00
|
@ -177,7 +177,7 @@ static uint64_t cg3_reg_read(void *opaque, hwaddr addr, unsigned size)
|
|||
/* monitor ID 6, board type = 1 (color) */
|
||||
val = s->regs[1] | CG3_SR_1152_900_76_B | CG3_SR_ID_COLOR;
|
||||
break;
|
||||
case CG3_REG_FBC_CURSTART ... CG3_REG_SIZE:
|
||||
case CG3_REG_FBC_CURSTART ... CG3_REG_SIZE - 1:
|
||||
val = s->regs[addr - 0x10];
|
||||
break;
|
||||
default:
|
||||
|
@ -247,7 +247,7 @@ static void cg3_reg_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
qemu_irq_lower(s->irq);
|
||||
}
|
||||
break;
|
||||
case CG3_REG_FBC_CURSTART ... CG3_REG_SIZE:
|
||||
case CG3_REG_FBC_CURSTART ... CG3_REG_SIZE - 1:
|
||||
s->regs[addr - 0x10] = val;
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue