69 lines
2.2 KiB
Diff
69 lines
2.2 KiB
Diff
|
|
From c9ee283913cc9df8998a21544a68ac1d2f86aa49 Mon Sep 17 00:00:00 2001
|
||
|
|
From: qihao <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Tue, 19 Mar 2024 15:07:51 +0800
|
||
|
|
Subject: [PATCH] hw/display/macfb: Fix missing ERRP_GUARD() in
|
||
|
|
macfb_nubus_realize()
|
||
|
|
|
||
|
|
cheery-pick from 5aa4a6417b0f7acbfd7f4c21dca26293bc3d9348
|
||
|
|
|
||
|
|
As the comment in qapi/error, dereferencing @errp requires
|
||
|
|
ERRP_GUARD():
|
||
|
|
|
||
|
|
* = Why, when and how to use ERRP_GUARD() =
|
||
|
|
*
|
||
|
|
* Without ERRP_GUARD(), use of the @errp parameter is restricted:
|
||
|
|
* - It must not be dereferenced, because it may be null.
|
||
|
|
...
|
||
|
|
* ERRP_GUARD() lifts these restrictions.
|
||
|
|
*
|
||
|
|
* To use ERRP_GUARD(), add it right at the beginning of the function.
|
||
|
|
* @errp can then be used without worrying about the argument being
|
||
|
|
* NULL or &error_fatal.
|
||
|
|
*
|
||
|
|
* Using it when it's not needed is safe, but please avoid cluttering
|
||
|
|
* the source with useless code.
|
||
|
|
|
||
|
|
But in macfb_nubus_realize(), @errp is dereferenced without
|
||
|
|
ERRP_GUARD():
|
||
|
|
|
||
|
|
ndc->parent_realize(dev, errp);
|
||
|
|
if (*errp) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
Here we check *errp, because the ndc->parent_realize(), as a
|
||
|
|
DeviceClass.realize() callback, returns void. And since
|
||
|
|
macfb_nubus_realize(), also as a DeviceClass.realize(), doesn't get the
|
||
|
|
NULL @errp parameter, it hasn't triggered the bug that dereferencing the
|
||
|
|
NULL @errp.
|
||
|
|
|
||
|
|
To follow the requirement of @errp, add missing ERRP_GUARD() in
|
||
|
|
macfb_nubus_realize().
|
||
|
|
|
||
|
|
Suggested-by: Markus Armbruster <armbru@redhat.com>
|
||
|
|
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
|
||
|
|
Reviewed-by: Markus Armbruster <armbru@redhat.com>
|
||
|
|
Message-Id: <20240223085653.1255438-3-zhao1.liu@linux.intel.com>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
hw/display/macfb.c | 1 +
|
||
|
|
1 file changed, 1 insertion(+)
|
||
|
|
|
||
|
|
diff --git a/hw/display/macfb.c b/hw/display/macfb.c
|
||
|
|
index d61541ccb5..170da35757 100644
|
||
|
|
--- a/hw/display/macfb.c
|
||
|
|
+++ b/hw/display/macfb.c
|
||
|
|
@@ -714,6 +714,7 @@ static void macfb_nubus_set_irq(void *opaque, int n, int level)
|
||
|
|
|
||
|
|
static void macfb_nubus_realize(DeviceState *dev, Error **errp)
|
||
|
|
{
|
||
|
|
+ ERRP_GUARD();
|
||
|
|
NubusDevice *nd = NUBUS_DEVICE(dev);
|
||
|
|
MacfbNubusState *s = NUBUS_MACFB(dev);
|
||
|
|
MacfbNubusDeviceClass *ndc = NUBUS_MACFB_GET_CLASS(dev);
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|