On Tue, 3 Aug 2021 at 00:55, Philippe Mathieu-Daudé <f4...@amsat.org> wrote: > > OSS-Fuzz found sending illegal addresses when querying the write > protection bits triggers the assertion added in commit 84816fb63e5 > ("hw/sd/sdcard: Assert if accessing an illegal group"): > > qemu-fuzz-i386-target-generic-fuzz-sdhci-v3: ../hw/sd/sd.c:824: uint32_t > sd_wpbits(SDState *, uint64_t): > Assertion `wpnum < sd->wpgrps_size' failed. > #3 0x7f62a8b22c91 in __assert_fail > #4 0x5569adcec405 in sd_wpbits hw/sd/sd.c:824:9 > #5 0x5569adce5f6d in sd_normal_command hw/sd/sd.c:1389:38 > #6 0x5569adce3870 in sd_do_command hw/sd/sd.c:1737:17 > #7 0x5569adcf1566 in sdbus_do_command hw/sd/core.c:100:16 > #8 0x5569adcfc192 in sdhci_send_command hw/sd/sdhci.c:337:12 > #9 0x5569adcfa3a3 in sdhci_write hw/sd/sdhci.c:1186:9 > #10 0x5569adfb3447 in memory_region_write_accessor softmmu/memory.c:492:5 > > It is legal for the CMD30 to query for out-of-range addresses. > Such invalid addresses are simply ignored in the response (write > protection bits set to 0). > > In commit 84816fb63e5 ("hw/sd/sdcard: Assert if accessing an illegal > group") we misplaced the assertion *before* we test the address is > in range. Move it *after*. > > Include the qtest reproducer provided by Alexander Bulekov: > > $ make check-qtest-i386 > ... > Running test qtest-i386/fuzz-sdcard-test > qemu-system-i386: ../hw/sd/sd.c:824: sd_wpbits: Assertion `wpnum < > sd->wpgrps_size' failed. > > Cc: qemu-sta...@nongnu.org > Reported-by: OSS-Fuzz (Issue 29225) > Suggested-by: Peter Maydell <peter.mayd...@linaro.org> > Fixes: 84816fb63e5 ("hw/sd/sdcard: Assert if accessing an illegal group") > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/495 > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org>
Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> thanks -- PMM