From: Jiri Denemark Date: Tue, 11 Mar 2025 09:35:58 +0000 (+0100) Subject: esx: Refactor esxVI_LookupHostScsiTopologyLunListByTargetName X-Git-Tag: v11.2.0-rc1~205 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=477a81fedb0fc5853e0879d3ed60f68becd9ccfa;p=thirdparty%2Flibvirt.git esx: Refactor esxVI_LookupHostScsiTopologyLunListByTargetName With a specific combination of compiler options gcc reported the following bogus warning (I added a context to it to make the issue visible): ../src/esx/esx_vi.c: In function ‘esxVI_LookupHostScsiTopologyLunListByTargetName’: ../src/esx/esx_vi.c:4674:32: error: potential null pointer dereference [-Werror=null-dereference] 4671 | if (!found || !hostScsiTopologyTarget) 4672 | goto cleanup; 4673 | 4674 | if (!hostScsiTopologyTarget->lun) { | ~~~~~~~~~~~~~~~~~~~~~~^~~~~ Most likely this is caused by found and hostScsiTopologyTarget doing essentially the same thing as found is true if and only if hostScsiTopologyTarget is non-NULL. The found variable is completely redundant. Removing it would be enough, but I decided to make the code a little bit easier to read by not using the iterator variable directly. Signed-off-by: Jiri Denemark Reviewed-by: Peter Krempa --- diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c index e2589aa69a..6faf49f27b 100644 --- a/src/esx/esx_vi.c +++ b/src/esx/esx_vi.c @@ -4616,7 +4616,6 @@ esxVI_LookupHostScsiTopologyLunListByTargetName esxVI_HostScsiTopologyInterface *hostScsiInterfaceList = NULL; esxVI_HostScsiTopologyInterface *hostScsiInterface = NULL; esxVI_HostScsiTopologyTarget *hostScsiTopologyTarget = NULL; - bool found = false; esxVI_HostInternetScsiTargetTransport *candidate = NULL; ESX_VI_CHECK_ARG_LIST(hostScsiTopologyLunList); @@ -4653,22 +4652,20 @@ esxVI_LookupHostScsiTopologyLunListByTargetName /* See vSphere API documentation about HostScsiTopologyInterface */ for (hostScsiInterface = hostScsiInterfaceList; - hostScsiInterface && !found; + hostScsiInterface && !hostScsiTopologyTarget; hostScsiInterface = hostScsiInterface->_next) { - for (hostScsiTopologyTarget = hostScsiInterface->target; - hostScsiTopologyTarget; - hostScsiTopologyTarget = hostScsiTopologyTarget->_next) { - candidate = esxVI_HostInternetScsiTargetTransport_DynamicCast - (hostScsiTopologyTarget->transport); + esxVI_HostScsiTopologyTarget *target; + for (target = hostScsiInterface->target; target; target = target->_next) { + candidate = esxVI_HostInternetScsiTargetTransport_DynamicCast(target->transport); if (candidate && STREQ(candidate->iScsiName, name)) { - found = true; + hostScsiTopologyTarget = target; break; } } } - if (!found || !hostScsiTopologyTarget) + if (!hostScsiTopologyTarget) goto cleanup; if (!hostScsiTopologyTarget->lun) {