libuio: fix FILE descriptor leak

The function uio_line_from_file() fails to close the FILE pointer
when fgets() returns NULL, causing a file descriptor leak.

This can be triggered when reading from /sys files that return
empty content, leading to resource exhaustion over time.

Fix this by using goto-based error handling to ensure fclose()
is called on all exit paths.

Signed-off-by: Qliangw <qili00001@gmail.com>
This commit is contained in:
Qliangw
2026-05-27 16:37:00 +08:00
committed by Khem Raj
parent f1e12abbd3
commit cd75edf25d
2 changed files with 32 additions and 0 deletions
@@ -0,0 +1,31 @@
From: Jason Smith <qili00001@gmail.com>
Subject: [PATCH] Fix FILE descriptor leak in uio_line_from_file()
The function uio_line_from_file() fails to close the FILE pointer
when fgets() returns NULL, causing a file descriptor leak.
Upstream-Status: Submitted [https://sourceforge.net/p/libuio/code/merge-requests/2/]
Signed-off-by: Jason Smith <qili00001@gmail.com>
--- a/src/uio_line_from_file.c
+++ b/src/uio_line_from_file.c
@@ -28,14 +28,17 @@
{
char *s;
int i;
+ int ret = 0;
memset(linebuf, 0, UIO_MAX_NAME_SIZE);
FILE* file = fopen(filename,"r");
if (!file) return -1;
s = fgets(linebuf,UIO_MAX_NAME_SIZE,file);
- if (!s) return -2;
+ if (!s) { ret = -2; goto out; }
for (i=0; (*s)&&(i<UIO_MAX_NAME_SIZE); i++) {
if (*s == '\n') *s = 0;
s++;
}
- return 0;
+out:
+ fclose(file);
+ return ret;
}
@@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
SRCREV = "17d96e8f9a5bce7cee5e2222855ab46a246dba51"
SRC_URI = "git://git.code.sf.net/p/libuio/code;branch=master;protocol=https"
SRC_URI += "file://fix-fclose-leak-in-uio_line_from_file.patch"
PV .= "+0.2.2+git"