https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=dac9ad1e0d3de1c844c79c18d3c29d1d5f2059ec
commit dac9ad1e0d3de1c844c79c18d3c29d1d5f2059ec Author: Corinna Vinschen <cori...@vinschen.de> AuthorDate: Tue Dec 10 13:55:54 2024 +0100 Commit: Corinna Vinschen <cori...@vinschen.de> CommitDate: Tue Dec 10 16:57:10 2024 +0100 Cygwin: path_conv: allow NULL handle in init_reopen_attr() init_reopen_attr() doesn't guard against a NULL handle. However, there are scenarios calling functions deliberately with a NULL handle, for instance, av::setup() calling check_file_access() only if opening the file did NOT succeed. So check for a NULL handle in init_reopen_attr() and if so, use the name based approach filling the OBJECT_ATTRIBUTES struct, just as in the has_buggy_reopen() case. Fixes: 4c9d01fdad2a ("* mount.h (class fs_info): Add has_buggy_reopen flag and accessor methods.") Signed-off-by: Corinna Vinschen <cori...@vinschen.de> (cherry picked from commit 815eba882e32ecadd6862c71c36fccdcb0842a76) Diff: --- winsup/cygwin/local_includes/path.h | 2 +- winsup/cygwin/sec/base.cc | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/local_includes/path.h b/winsup/cygwin/local_includes/path.h index cd0cc8a41256..5f5cf5cb5b21 100644 --- a/winsup/cygwin/local_includes/path.h +++ b/winsup/cygwin/local_includes/path.h @@ -316,7 +316,7 @@ class path_conv } inline POBJECT_ATTRIBUTES init_reopen_attr (OBJECT_ATTRIBUTES &attr, HANDLE h) { - if (has_buggy_reopen ()) + if (!h || has_buggy_reopen ()) InitializeObjectAttributes (&attr, get_nt_native_path (), objcaseinsensitive (), NULL, NULL) else diff --git a/winsup/cygwin/sec/base.cc b/winsup/cygwin/sec/base.cc index 0fc8699bfc9e..14606242d835 100644 --- a/winsup/cygwin/sec/base.cc +++ b/winsup/cygwin/sec/base.cc @@ -62,8 +62,7 @@ get_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, if (!fh || !NT_SUCCESS (status)) { status = NtOpenFile (&fh, READ_CONTROL, - fh ? pc.init_reopen_attr (attr, fh) - : pc.get_object_attr (attr, sec_none_nih), + pc.init_reopen_attr (attr, fh), &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_NO_RECALL | FILE_OPEN_FOR_BACKUP_INTENT @@ -232,9 +231,7 @@ set_file_sd (HANDLE fh, path_conv &pc, security_descriptor &sd, bool is_chown) OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; status = NtOpenFile (&fh, (is_chown ? WRITE_OWNER : 0) | WRITE_DAC, - fh ? pc.init_reopen_attr (attr, fh) - : pc.get_object_attr (attr, sec_none_nih), - &io, + pc.init_reopen_attr (attr, fh), &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_NO_RECALL | FILE_OPEN_FOR_BACKUP_INTENT