src/esx/esx_vi.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)
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 <jdenemar@redhat.com>
---
src/esx/esx_vi.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index e2589aa69a..aee649b86e 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,21 @@ 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) {
+ esxVI_HostScsiTopologyTarget *target;
+ for (target = hostScsiInterface->target; target; target = target->_next) {
candidate = esxVI_HostInternetScsiTargetTransport_DynamicCast
- (hostScsiTopologyTarget->transport);
+ (target->transport);
if (candidate && STREQ(candidate->iScsiName, name)) {
- found = true;
+ hostScsiTopologyTarget = target;
break;
}
}
}
- if (!found || !hostScsiTopologyTarget)
+ if (!hostScsiTopologyTarget)
goto cleanup;
if (!hostScsiTopologyTarget->lun) {
--
2.48.1
On Tue, Mar 11, 2025 at 11:48:41 +0100, Jiri Denemark wrote:
> 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 <jdenemar@redhat.com>
> ---
> src/esx/esx_vi.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
> index e2589aa69a..aee649b86e 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,21 @@ 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) {
> + esxVI_HostScsiTopologyTarget *target;
> + for (target = hostScsiInterface->target; target; target = target->_next) {
> candidate = esxVI_HostInternetScsiTargetTransport_DynamicCast
> - (hostScsiTopologyTarget->transport);
> + (target->transport);
Consider putting the argument with the function call operator on the
same line as the function name.
>
> if (candidate && STREQ(candidate->iScsiName, name)) {
> - found = true;
> + hostScsiTopologyTarget = target;
> break;
> }
> }
> }
>
> - if (!found || !hostScsiTopologyTarget)
> + if (!hostScsiTopologyTarget)
> goto cleanup;
>
> if (!hostScsiTopologyTarget->lun) {
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
© 2016 - 2026 Red Hat, Inc.