diff options
author | baixiangcpp <baixiangcpp@gmail.com> | 2023-02-10 11:01:47 +0800 |
---|---|---|
committer | Jule Anger <janger@samba.org> | 2023-02-23 13:37:27 +0000 |
commit | f4556250b87cd166c7516b7ebe28e2a6ca09eb7f (patch) | |
tree | f0828d7f2a5955a61a5cdb2243f9f4f92c9b9f77 | |
parent | 0b8713e342c6b7eb58e19fc01c90a7182d843baf (diff) | |
download | samba-f4556250b87cd166c7516b7ebe28e2a6ca09eb7f.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
(cherry picked from commit 206dcf7d426e9e85c896c54839008e194d9a2824)
Autobuild-User(v4-17-test): Jule Anger <janger@samba.org>
Autobuild-Date(v4-17-test): Thu Feb 23 13:37:27 UTC 2023 on sn-devel-184
-rw-r--r-- | lib/util/util_file.c | 9 |
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; } |