aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-07-03 16:59:43 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-07-03 16:59:43 +0100
commite757db25aa3406e9098ae999a469d56c370f4447 (patch)
tree26f734048874d4aa0d8477d4a00736b563206707 /hw
parent4b4dc9750a0aa0b9766bd755bf6512a84744ce8a (diff)
downloadqemu-e757db25aa3406e9098ae999a469d56c370f4447.zip
qemu-e757db25aa3406e9098ae999a469d56c370f4447.tar.gz
qemu-e757db25aa3406e9098ae999a469d56c370f4447.tar.bz2
hw/display/bcm2835_fb.c: Initialize all fields of struct
In bcm2835_fb_mbox_push(), Coverity complains (CID 1429989) that we pass a pointer to a local struct to another function without initializing all its fields. This is a real bug: bcm2835_fb_reconfigure() copies the whole of our new BCM2385FBConfig struct into s->config, so any fields we don't initialize will corrupt the state of the device. Copy the two fields which we don't want to update (pixo and alpha) from the existing config so we don't accidentally change them. Fixes: cfb7ba983857e40e88 Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20200628195436.27582-1-peter.maydell@linaro.org
Diffstat (limited to 'hw')
-rw-r--r--hw/display/bcm2835_fb.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c
index c626380..7c0e5ee 100644
--- a/hw/display/bcm2835_fb.c
+++ b/hw/display/bcm2835_fb.c
@@ -282,6 +282,10 @@ static void bcm2835_fb_mbox_push(BCM2835FBState *s, uint32_t value)
newconf.base = s->vcram_base | (value & 0xc0000000);
newconf.base += BCM2835_FB_OFFSET;
+ /* Copy fields which we don't want to change from the existing config */
+ newconf.pixo = s->config.pixo;
+ newconf.alpha = s->config.alpha;
+
bcm2835_fb_validate_config(&newconf);
pitch = bcm2835_fb_get_pitch(&newconf);