]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib:util: File descriptor being closed repeatedly.
authorbaixiangcpp <baixiangcpp@gmail.com>
Fri, 10 Feb 2023 03:01:47 +0000 (11:01 +0800)
committerVolker Lendecke <vl@samba.org>
Thu, 16 Feb 2023 12:13:05 +0000 (12:13 +0000)
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

lib/util/util_file.c

index af90e4a76215d3696827c9f9ddba2902b57cf970..fa5abadedec89cdf0c1bf7c76f1da81e7a62dbb1 100644 (file)
@@ -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;
        }