summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
authorbaixiangcpp <baixiangcpp@gmail.com>2023-02-10 11:01:47 +0800
committerVolker Lendecke <vl@samba.org>2023-02-16 12:13:05 +0000
commit206dcf7d426e9e85c896c54839008e194d9a2824 (patch)
treedf84f23421eabcca8f581b341d3dc948e21ea9dd /lib/util
parent8441c03ccf8f946f3e76dfa92245d0192702b205 (diff)
downloadsamba-206dcf7d426e9e85c896c54839008e194d9a2824.tar.gz
lib:util: File descriptor being closed repeatedly.
In file_load()/file_lines_load(), the file's fd is obtained using open(), and in fd_load() the fd is converted to a FILE* using fdopen(). However, after fclose(), the fd is closed again using close(). Bug: https://bugzilla.samba.org/show_bug.cgi?id=15311 Signed-off-by: baixiangcpp baixiangcpp@gmail.com Reviewed-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org> Autobuild-User(master): Volker Lendecke <vl@samba.org> Autobuild-Date(master): Thu Feb 16 12:13:05 UTC 2023 on atb-devel-224
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/util_file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/util/util_file.c b/lib/util/util_file.c
index af90e4a7621..fa5abadedec 100644
--- a/lib/util/util_file.c
+++ b/lib/util/util_file.c
@@ -175,13 +175,20 @@ _PUBLIC_ char *fd_load(int fd, size_t *psize, size_t maxsize, TALLOC_CTX *mem_ct
size_t size = 0;
size_t chunk = 1024;
int err;
+ int fd_dup;
if (maxsize == 0) {
maxsize = SIZE_MAX;
}
- file = fdopen(fd, "r");
+ fd_dup = dup(fd);
+ if (fd_dup == -1) {
+ return NULL;
+ }
+
+ file = fdopen(fd_dup, "r");
if (file == NULL) {
+ close(fd_dup);
return NULL;
}