@@ -40,7 +40,7 @@ static int sysfs_get_enabled(char *path, int *mode)
{
int fd;
char yes_no;
-
+ int ret = 0;
*mode = 0;
fd = open(path, O_RDONLY);
@@ -48,17 +48,18 @@ static int sysfs_get_enabled(char *path, int *mode)
return -1;
if (read(fd, &yes_no, 1) != 1) {
- close(fd);
- return -1;
+ ret = -1;
+ goto err;
}
- if (yes_no == '1') {
- *mode = 1;
- return 0;
- } else if (yes_no == '0') {
- return 0;
+ if (yes_no != '1' || yes_no != '0') {
+ ret = -1;
+ goto err;
}
- return -1;
+ *mode = yes_no - '0';
+err:
+ close(fd);
+ return ret;
}
int powercap_get_enabled(int *mode)
When the read return value is equal to 1, a file handle leak will occur Signed-off-by: Hao Zeng <zenghao@kylinos.cn> Suggested-by: Shuah Khan <skhan@linuxfoundation.org> --- tools/power/cpupower/lib/powercap.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)