firmware: tegra: bpmp: Fix error paths in debugfs
authorMikko Perttunen <mperttunen@nvidia.com>
Wed, 1 Mar 2023 13:47:55 +0000 (15:47 +0200)
committerThierry Reding <treding@nvidia.com>
Mon, 3 Apr 2023 12:29:05 +0000 (14:29 +0200)
Some error paths in mrq_debug_read and bpmp_debug_show would overwrite
the return error code with a subsequent call to mrq_debug_close.

Change the code to only change the error code if there was no prior
error.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/firmware/tegra/bpmp-debugfs.c

index 3ca2b5d..6dfe3d3 100644 (file)
@@ -193,7 +193,7 @@ static int mrq_debug_read(struct tegra_bpmp *bpmp, const char *name,
                },
        };
        u32 fd = 0, len = 0;
-       int remaining, err;
+       int remaining, err, close_err;
 
        mutex_lock(&bpmp_debug_lock);
        err = mrq_debug_open(bpmp, name, &fd, &len, 0);
@@ -231,7 +231,9 @@ static int mrq_debug_read(struct tegra_bpmp *bpmp, const char *name,
        *nbytes = len;
 
 close:
-       err = mrq_debug_close(bpmp, fd);
+       close_err = mrq_debug_close(bpmp, fd);
+       if (!err)
+               err = close_err;
 out:
        mutex_unlock(&bpmp_debug_lock);
        return err;
@@ -319,7 +321,7 @@ static int bpmp_debug_show(struct seq_file *m, void *p)
                },
        };
        u32 fd = 0, len = 0;
-       int remaining, err;
+       int remaining, err, close_err;
 
        filename = get_filename(bpmp, file, fnamebuf, sizeof(fnamebuf));
        if (!filename)
@@ -353,7 +355,9 @@ static int bpmp_debug_show(struct seq_file *m, void *p)
        }
 
 close:
-       err = mrq_debug_close(bpmp, fd);
+       close_err = mrq_debug_close(bpmp, fd);
+       if (!err)
+               err = close_err;
 out:
        mutex_unlock(&bpmp_debug_lock);
        return err;