[v3] lib/graph: lib/graph: fix memset with NULL
Checks
Commit Message
This was flagged by undefined behaviour sanitizer: memset should not be
called with NULL first argument. (memset requires first argument to be
pointer to a memory object, so passing NULL may result in an undefined
behaviour including among other things optimizer potentially removing
code paths depending on stat->xstat_count being NULL.)
Sanitizer message:
lib/graph/graph_stats.c:473:2: runtime error: null pointer passed as
argument 1, which is declared to never be null
Add a check that stat->xstat_cntrs is not zero before the call, since
stat->xstat_count can only be NULL when stat->xstat_cntrs is zero.
Fixes: 070db97e017 ("graph: support node xstats")
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
Thanks to Jerin Jacob and David Marchand for the reviews.
v3:
* Addressing comments from David Marchand change to check the length
instead of the pointer, fix formatting.
* Drop the other half of the two-patch set since the problem it was
addressing was already getting fixed elsewhere.
v2: Following the suggestions from Jerin Jacob changed the Subject and
added Fixes line.
lib/graph/graph_stats.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Comments
On Wed, Jun 25, 2025 at 11:29 AM Marat Khalili <marat.khalili@huawei.com> wrote:
>
> This was flagged by undefined behaviour sanitizer: memset should not be
> called with NULL first argument. (memset requires first argument to be
> pointer to a memory object, so passing NULL may result in an undefined
> behaviour including among other things optimizer potentially removing
> code paths depending on stat->xstat_count being NULL.)
>
> Sanitizer message:
>
> lib/graph/graph_stats.c:473:2: runtime error: null pointer passed as
> argument 1, which is declared to never be null
>
> Add a check that stat->xstat_cntrs is not zero before the call, since
> stat->xstat_count can only be NULL when stat->xstat_cntrs is zero.
>
> Fixes: 070db97e017 ("graph: support node xstats")
>
> Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
Just a fyi, I added your patch as part of my series, since running
with UBSan in GHA required this fix.
We may still take your fix as is, so I'll leave it in patchwork.
@@ -470,7 +470,8 @@ cluster_node_arregate_stats(struct cluster_node *cluster, bool dispatch)
uint64_t *xstat;
uint8_t i;
- memset(stat->xstat_count, 0, sizeof(uint64_t) * stat->xstat_cntrs);
+ if (stat->xstat_cntrs != 0)
+ memset(stat->xstat_count, 0, sizeof(uint64_t) * stat->xstat_cntrs);
for (count = 0; count < cluster->nb_nodes; count++) {
node = cluster->nodes[count];