[v3,03/19] raw/cnxk_gpio: fix file descriptor leak
Checks
Commit Message
The function would leak file if fscanf failed.
There is a working version in other file, clone that.
Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
Fixes: 0e6557b448fa ("raw/cnxk_gpio: add self test")
Cc: tduszynski@marvell.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c | 24 ++++++++++++++--------
1 file changed, 15 insertions(+), 9 deletions(-)
@@ -34,24 +34,30 @@ cnxk_gpio_attr_exists(const char *attr)
static int
cnxk_gpio_read_attr(char *attr, char *val)
{
+ int ret, ret2;
FILE *fp;
- int ret;
fp = fopen(attr, "r");
if (!fp)
return -errno;
ret = fscanf(fp, "%s", val);
- if (ret < 0)
- return -errno;
- if (ret != 1)
- return -EIO;
+ if (ret < 0) {
+ ret = -errno;
+ goto out;
+ }
+ if (ret != 1) {
+ ret = -EIO;
+ goto out;
+ }
- ret = fclose(fp);
- if (ret)
- return -errno;
+ ret = 0;
+out:
+ ret2 = fclose(fp);
+ if (!ret)
+ ret = ret2;
- return 0;
+ return ret;
}
#define CNXK_GPIO_ERR_STR(err, str, ...) do { \