From 6f98f602fd2acb5fb8360e18679b22e3cccf3433 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Mon, 16 Dec 2019 16:03:31 -0800 Subject: [PATCH] cppcheck: (warning) Possible null pointer dereference: nvh Move the 'nvh = (void *)buf' assignment after the 'buf == NULL' check to resolve the warning. Interestingly, cppcheck 1.88 correctly determines that the existing code is safe, while cppcheck 1.86 reports the warning. Reviewed-by: Tony Hutter Signed-off-by: Brian Behlendorf Closes #9732 --- module/nvpair/nvpair.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c index c5bd98ebd055..a47b94c48e08 100644 --- a/module/nvpair/nvpair.c +++ b/module/nvpair/nvpair.c @@ -2558,7 +2558,7 @@ nvlist_common(nvlist_t *nvl, char *buf, size_t *buflen, int encoding, #else int host_endian = 0; #endif /* _LITTLE_ENDIAN */ - nvs_header_t *nvh = (void *)buf; + nvs_header_t *nvh; if (buflen == NULL || nvl == NULL || (nvs.nvs_priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) @@ -2577,6 +2577,7 @@ nvlist_common(nvlist_t *nvl, char *buf, size_t *buflen, int encoding, if (buf == NULL || *buflen < sizeof (nvs_header_t)) return (EINVAL); + nvh = (void *)buf; nvh->nvh_encoding = encoding; nvh->nvh_endian = nvl_endian = host_endian; nvh->nvh_reserved1 = 0; @@ -2588,6 +2589,7 @@ nvlist_common(nvlist_t *nvl, char *buf, size_t *buflen, int encoding, return (EINVAL); /* get method of encoding from first byte */ + nvh = (void *)buf; encoding = nvh->nvh_encoding; nvl_endian = nvh->nvh_endian; break;