80 lines
2.6 KiB
Diff
80 lines
2.6 KiB
Diff
|
|
From 66d91f8cb6c9668744cf0acda4402f75c5e533e0 Mon Sep 17 00:00:00 2001
|
||
|
|
From: qihao <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Tue, 19 Mar 2024 14:36:46 +0800
|
||
|
|
Subject: [PATCH] hw/cxl/cxl-host: Fix missing ERRP_GUARD() in
|
||
|
|
cxl_fixed_memory_window_config()
|
||
|
|
|
||
|
|
cheery-pick from 2a0e0a35002db7ac64f4e82ea2a4ad2fb6d934b0
|
||
|
|
|
||
|
|
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 cxl_fixed_memory_window_config(), @errp is dereferenced in 2
|
||
|
|
places without ERRP_GUARD():
|
||
|
|
|
||
|
|
fw->enc_int_ways = cxl_interleave_ways_enc(fw->num_targets, errp);
|
||
|
|
if (*errp) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
and
|
||
|
|
|
||
|
|
fw->enc_int_gran =
|
||
|
|
cxl_interleave_granularity_enc(object->interleave_granularity,
|
||
|
|
errp);
|
||
|
|
if (*errp) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
For the above 2 places, we check "*errp", because neither function
|
||
|
|
returns a suitable error code. And since machine_set_cfmw() - the caller
|
||
|
|
of cxl_fixed_memory_window_config() - doesn't get the NULL @errp
|
||
|
|
parameter as the "set" method of object property,
|
||
|
|
cxl_fixed_memory_window_config() hasn't triggered the bug that
|
||
|
|
dereferencing the NULL @errp.
|
||
|
|
|
||
|
|
To follow the requirement of @errp, add missing ERRP_GUARD() in
|
||
|
|
cxl_fixed_memory_window_config().
|
||
|
|
|
||
|
|
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-2-zhao1.liu@linux.intel.com>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
|
||
|
|
Signed-off-by: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
hw/cxl/cxl-host.c | 1 +
|
||
|
|
1 file changed, 1 insertion(+)
|
||
|
|
|
||
|
|
diff --git a/hw/cxl/cxl-host.c b/hw/cxl/cxl-host.c
|
||
|
|
index 2aa776c79c..c5f5fcfd64 100644
|
||
|
|
--- a/hw/cxl/cxl-host.c
|
||
|
|
+++ b/hw/cxl/cxl-host.c
|
||
|
|
@@ -26,6 +26,7 @@ static void cxl_fixed_memory_window_config(CXLState *cxl_state,
|
||
|
|
CXLFixedMemoryWindowOptions *object,
|
||
|
|
Error **errp)
|
||
|
|
{
|
||
|
|
+ ERRP_GUARD();
|
||
|
|
g_autofree CXLFixedWindow *fw = g_malloc0(sizeof(*fw));
|
||
|
|
strList *target;
|
||
|
|
int i;
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|