iolog: fix reported defect from coverity scan
authorAnkit Kumar <ankit.kumar@samsung.com>
Thu, 25 Jan 2024 23:33:28 +0000 (05:03 +0530)
committerAnkit Kumar <ankit.kumar@samsung.com>
Fri, 26 Jan 2024 01:22:50 +0000 (06:52 +0530)
Fix the two Null pointer dereferences issue reported by Coverity scan

Null pointer dereferences  (FORWARD_NULL)
Dereferencing null pointer "l->td"

Null pointer dereferences  (REVERSE_INULL)
Null-checking "p->td" suggests that it may be null, but it has already
been dereferenced on all paths leading to the check.

For aggregate read, write and trim bandwidth log, the setup_log function
gets called with NULL pointer reference for thread data. Thus before
dereferencing further we should check "l->td".

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
iolog.c

diff --git a/iolog.c b/iolog.c
index b4c7a8f13157531be4f4d426ebc9e8a32bf50bcc..f52a9a80f7ef4e9546e1f0acf159a2eb6d3e255f 100644 (file)
--- a/iolog.c
+++ b/iolog.c
@@ -862,7 +862,12 @@ void setup_log(struct io_log **log, struct log_params *p,
                l->log_ddir_mask = LOG_OFFSET_SAMPLE_BIT;
        if (l->log_prio)
                l->log_ddir_mask |= LOG_PRIO_SAMPLE_BIT;
-       if (l->td->o.log_max == IO_LOG_SAMPLE_BOTH)
+       /*
+        * The bandwidth-log option generates agg-read_bw.log,
+        * agg-write_bw.log and agg-trim_bw.log for which l->td is NULL.
+        * Check if l->td is valid before dereferencing it.
+        */
+       if (l->td && l->td->o.log_max == IO_LOG_SAMPLE_BOTH)
                l->log_ddir_mask |= LOG_AVG_MAX_SAMPLE_BIT;
 
        INIT_FLIST_HEAD(&l->chunk_list);