In dpni_exit there is a NULL check for dflt_dpni after it is
dereferenced a number of times. Instead move the NULL check to early in
the function. Also assign NULL to dflt_dpni after free in both dpni_init
and dpni_exit.

This issue was found by Smatch.

Signed-off-by: Andrew Goodbody <andrew.goodb...@linaro.org>
---
 drivers/net/fsl-mc/mc.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/fsl-mc/mc.c b/drivers/net/fsl-mc/mc.c
index 8c882c7fcf5..aad852f8151 100644
--- a/drivers/net/fsl-mc/mc.c
+++ b/drivers/net/fsl-mc/mc.c
@@ -1539,6 +1539,7 @@ err_get_version:
                     dflt_dpni->dpni_id);
 err_create:
        free(dflt_dpni);
+       dflt_dpni = NULL;
 err_calloc:
        return err;
 }
@@ -1547,6 +1548,9 @@ static int dpni_exit(void)
 {
        int err;
 
+       if (!dflt_dpni)
+               return -ENODEV;
+
        err = dpni_destroy(dflt_mc_io, dflt_dprc_handle, MC_CMD_NO_FLAGS,
                           dflt_dpni->dpni_id);
        if (err < 0) {
@@ -1558,8 +1562,8 @@ static int dpni_exit(void)
        printf("Exit: DPNI.%d\n", dflt_dpni->dpni_id);
 #endif
 
-       if (dflt_dpni)
-               free(dflt_dpni);
+       free(dflt_dpni);
+       dflt_dpni = NULL;
        return 0;
 
 err:

-- 
2.39.5

Reply via email to