4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-18 15:09:32 +08:00

10281 Commits

Author SHA1 Message Date
Corinna Vinschen
fac7441835 Cygwin: lseek: fix an off-by-one condition in SEEK_DATA/SEEK_HOLE
The conditional checking if lseek should return ENXIO checks the
offset being bigger than the current filesize, but accidentally not
for being equal to the current filesize.

This can lead to an endless loop in newer versions of cp(1).

Fixes: edfa581d3c5a7 ("Cygwin: lseek: implement SEEK_DATA and SEEK_HOLE for files")
Reported-by: Christian Franke <Christian.Franke@t-online.de>
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-02-14 15:10:01 +01:00
Jeremy Drake via Cygwin-patches
93f390c798 Cygwin: 3.6.0: add release entries for my patches.
These are:
  04a5b07294 Cygwin: expose all windows volume mount points.
  0d113da235 Cygwin: /proc/<PID>/mount*: escape strings.
  7923059bff Cygwin: uname: add host machine tag to sysname.
  b091b47b9e cygthread: suspend thread before terminating.

Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-02-14 10:54:30 +01:00
Jeremy Drake via Cygwin-patches
d4497366b4 Cygwin: always output cygdrive mntents.
Previously, if there was an explicit mount entry for a drive letter
(say, C:), the output of the corresponding cygdrive mntent (like
/cygdrive/c) would be suppressed.  Once Windows directory mounts were
added to cygdrive mounts, the de-duplication code got more complicated.
Instead, always output the cygdrive mounts, under the cygdrive prefix.

Addresses: https://cygwin.com/pipermail/cygwin-patches/2025q1/013367.html
Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-02-13 15:12:09 +01:00
Jeremy Drake via Cygwin-patches
04a5b07294 Cygwin: expose all windows volume mount points.
They are exposed via the getmntent API and proc filesystem entries
dealing with mounts.  This allows things like `df` to show volumes
that are only mounted on directories, not on drive letters.

Addresses: https://cygwin.com/pipermail/cygwin/2025-February/257251.html
Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-02-13 15:12:09 +01:00
Jeremy Drake via Cygwin-patches
dcb963b672 Cygwin: store list of mounts for volumes in dos_drive_mappings.
The existing code only stored the first mount for each volume, but now
we store the complete list, and split it into a linked list.  This will
be used in a subsequent commit to populate cygdrive mount entries.

Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-02-13 15:12:09 +01:00
Jeremy Drake via Cygwin-patches
0d113da235 Cygwin: /proc/<PID>/mount*: escape strings.
In order for these formats to be machine-parseable, characters used as
delimiters must be escaped.  Linux escapes space, tab, newline,
backslash, and hash (because code that parses mounts/mtab and fstab
would handle comments) using octal escapes.  Replicate that behavior
here.

Addresses: https://cygwin.com/pipermail/cygwin/2024-June/256082.html
Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-02-05 11:09:08 +01:00
Jeremy Drake via Cygwin-patches
5a706ff0fc Cygwin: factor out code to resolve a symlink target.
This code was duplicated between the lnk symlink type and the native
symlink type.

Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-02-03 23:02:21 +01:00
Corinna Vinschen
d52d983e5b Cygwin: implement posix_close
per
https://pubs.opengroup.org/onlinepubs/9799919799/functions/posix_close.html

Add a flag value to fhandler_*::close() and close_with_arch() methods,
taking -1 as default argument, used to indicate default close(2)
behaviour.

The only fhandlers capable of returning EINTR are the INET based
socket fhandlers.  Handle -1 and POSIX_CLOSE_RESTART equivalent,
making close() and posix_close(POSIX_CLOSE_RESTART) behaving
identically.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-28 16:50:12 +01:00
Corinna Vinschen
c7eb1a1f52 Cygwin: fhandler: move "isclosed" status flag into fhandler_pipe_fifo
The isclosed flag is only used in pipe and FIFO code, so move the
flag down into the fhandler_pipe_fifo class.

Note that such a flag is not sufficient to avoid evil, like closing
an already closing fhandler from another thread.  If we ever need this,
it has to be implemented threadsafe.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-28 16:11:03 +01:00
Corinna Vinschen
fe6ddc15a3 Cygwin: message queues: avoid deadlocks in multi-threaded processes
Deadlocks have been observed if the message queue functions are called
from different threads in the same process.

Remove incorrectly locking the descriptor table while accessing the
message queue fhandler, potentially calling blocking functions.

Fixes: 46f3b0ce85a9 ("Cygwin: POSIX msg queues: move all mq_* functionality into fhandler_mqueue")
Reported-by: Christian Franke <Christian.Franke@t-online.de>
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-27 22:01:46 +01:00
Corinna Vinschen
b940faa144 Cygwin: message queues are not devices
Message queues are basically just files and in most cases can be handled
like normal files.  So it was a mistake to set the "on-disk-device" flag
for them to fix the mq_unlink() problem reported in
https://cygwin.com/pipermail/cygwin/2025-January/257119.html

Rather, given that unlink() just checks if the object to be deleted
has an on-disk representation, make sure message queues are added to
the path_conv::isondisk() predicate.

This also reverts commit d870655f570f25393dcefbaf0b1dc807f277749c.

Fixes: d870655f570f ("Cygwin: path_conv: set on-disk-device flag for message queue files")
Reported-by: Christian Franke <Christian.Franke@t-online.de>
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-27 11:17:27 +01:00
Corinna Vinschen
df63cbfedd Cygwin: add release msg for mq_unlink changes
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-25 12:54:40 +01:00
Corinna Vinschen
bf94b87f54 Cygwin: unlink_nt: clean up debug output and comment
The debug statement supposed to be printed when deleting with POSIX
semantics failed with STATUS_CANNOT_DELETE or STATUS_INVALID_PARAMETER
is in the wrong spot.  While at it, simplify the related comment.

Fixes: 9fa22dba558f ("Cygwin: unlink: allow fallback from POSIX to default method")
Fixes: 527dd1b407e7 ("Cygwin: fix unlink in container")
Fixes: 87ab6c7b26bf ("Cygwin: log disabling posix semantics")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-23 23:40:53 +01:00
Takashi Yano
5182a92a72 Cygwin: Drop const qualifier from 2nd argument of tcgetwinsize()
Fixes: 0eef1b6c9684 ("Cygwin: Add new APIs tc[gs]etwinsize()")
Reported-by: Alexander Kleinsorge <aleks@physik.tu-berlin.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-24 04:27:23 +09:00
Takashi Yano
0eef1b6c96 Cygwin: Add new APIs tc[gs]etwinsize()
New APIs tcgetwinsize/tcsetwinsize are added, which is added in
POSIX.1-2024.

Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-24 03:22:44 +09:00
Mark Geisert
0135b94949
Cygwin: Minor updates to load average calculations
Commentary wording now refers to tasks (i.e., threads) rather than
processes.  This makes it somewhat easier to justify adding two kinds of
counters together.  After researching what "load average" has meant over
time, we have what seems like a reasonable implementation, modulo
Windows differences to Linux.  The best resource I found is:
https://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html

At end of load_init(), obtain and discard the first measure of the
counters to deal with the first call always returning error, no data.
Follow this with a specific short delay so the next measure actually has
data to report.

At least one older version of Windows, i.e. Win10 Pro 21H1, has a different
name/location for the '% Processor Time' counter and is missing the
'Processor Queue Length' counter entirely.  Code is changed to support
both possible locations of the former and treat the missing latter as always
reporting 0.0.

A release note is added for 3.5.6.

Reported-by: Mark Liam Brown <brownmarkliam@gmail.com>
Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256361.html
Signed-off-by: Mark Geisert <mark@maxrnd.com>
Fixes: 4dc982ddf60b (Cygwin: loadavg: improve debugging of load_init)
2025-01-23 12:51:20 +00:00
Ken Brown
e0bc817271 Cygwin: mmap: use 64K pages for bookkeeping, second attempt
This reinstates with one change commit 74017d229d5e ("Cygwin: mmap:
use 64K pages for bookkeeping"), which was reverted in commit
fd57eea5617a.  The change is that in mmap_record::match, we now align
the record length to the 4K Windows page boundary rather than the 64K
Windows allocation granularity.  The reason for this is explained in
an extensive comment in the code.

Addresses: https://cygwin.com/pipermail/cygwin-patches/2025q1/013240.html
Fixes: 74017d229d5e ("Cygwin: mmap: use 64K pages for bookkeeping")
Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-22 11:36:59 -05:00
Takashi Yano
a880e0dffb Cygwin: signal: Avoid frequent TLS lock/unlock for SIGCONT processing
It seems that current _cygtls::handle_SIGCONT() code sometimes falls
into a deadlock due to frequent TLS lock/unlock operation in the
yield() loop. With this patch, the yield() in the wait loop is placed
outside the TLS lock to avoid frequent TLS lock/unlock.

Fixes: 9ae51bcc51a7 ("Cygwin: signal: Fix another deadlock between main and sig thread")
Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-22 19:16:29 +09:00
Takashi Yano
2cc4d14f2a Cygwin: Document hang fixs introduced in 3.5.5
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-22 08:03:46 +09:00
Corinna Vinschen
b879cd1661 Cygwin: unlink: fix error checking order
Checking EPERM only makes sense if the file exists, so
let the EEXIST check change places with the EPERM check.

Add a debug statement to the EPERM condition.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-21 17:31:21 +01:00
Corinna Vinschen
890086ad37 Cygwin: path_conv: simplify, rearrange, rename combined device checks
Some checks in path_conv are checking for various properties
to generate a boolean value, mostly to indicate different
combinations of on-disk files and devices.

Simplify these checks and, especially, document them inline.

Drop the isdevice() check in favor of a new isondisk() check.

Fixes: 4fc922b2c8a5 ("Cygwin: POSIX msg queues: Convert mqd_t to a descriptor")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-21 17:31:13 +01:00
Corinna Vinschen
d870655f57 Cygwin: path_conv: set on-disk-device flag for message queue files
This simplifies further checks for on-disk-devices in places with
special handling for such files.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-21 17:22:29 +01:00
Mark Geisert
9a4a44523b Cygwin: Add fd validation where needed in mq_* functions
Validate the fd returned by cygheap_getfd operating on given mqd.
A release note is provided for 3.5.6.

Reported-by: Christian Franke <Christian.Franke@t-online.de>
Addresses: https://cygwin.com/pipermail/cygwin/2025-January/257090.html
Signed-off-by: Mark Geisert <mark@maxrnd.com>
Fixes: 46f3b0ce85a9 (Cygwin: POSIX msg queues: move all mq_* functionality into fhandler_mqueue)
2025-01-21 17:22:24 +01:00
Takashi Yano
83afe3e238 Cygwin: signal: Do not handle signal when __SIGFLUSHFAST is sent
The commit a22a0ad7c4f0 was not entirely correct. Even with the patch,
some hangs still occur. This patch overrides the previous commit along
with the patch that makes cygwait() reentrant, to fix these hangs.

Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256954.html
Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256987.html
Fixes: d243e51ef1d3 ("Cygwin: signal: Fix deadlock between main thread and sig thread")
Fixes: a22a0ad7c4f0 ("Cygwin: signal: Do not handle signal when __SIGFLUSHFAST is sent")
Reported-by: Daisuke Fujimura <booleanlabel@gmail.com>
Reported-by: Jeremy Drake <cygwin@jdrake.com>
Reviewed-by: Corinna Vinschen <corinna@vinshcen.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-21 23:26:50 +09:00
Takashi Yano
ea1914000a Cygwin: cygwait: Make cygwait() reentrant
To allow cygwait() to be called in the signal handler, a locally
created timer is used instead of _cygtls::locals.cw_timer if it is
in use.

Co-Authored-By: Corinna Vinschen <corinna@vinschen.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-21 23:15:28 +09:00
Takashi Yano
6172e5283b Revert "Cygwin: signal: Do not handle signal when __SIGFLUSHFAST is sent"
This reverts commit a22a0ad7c4f0 to apply a new patch for the same
purpose.

Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-21 23:15:28 +09:00
Corinna Vinschen
dbd662300b Cygwin: seteuid: set errno if TranslateNameW fails
The call to TranslateNameW in s4uauth can fail and the code
leaves the function indicating an error, if so.  It just
misses to set errno in this case, so add that.

Fixes: 0fb497165f85 ("Cygwin: seteuid: use Kerberos/MsV1_0 S4U authentication by default")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-20 13:27:57 +01:00
Corinna Vinschen
23f4aac7e7 Add posix_spawn_file_actions_add{f}chdir
POSIX®.1-2024 now defines posix_spawn_file_actions_addchdir and
posix_spawn_file_actions_addfchdir.  Add these interfaces to spawn.h,
guarded as POSIX 202405 symbols.

Cygwin-only: Export them as aliases of the *_np counterparts. Bump
API minor.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-16 18:38:52 +01:00
Corinna Vinschen
1e6a3b39f1 Cygwin: cygwin/fs.h: rename FS_COMPRESSED_FL to FS_COMPR_FL
FS_COMPR_FL is the Linux-compatible macro name.  Redefine
FS_COMPRESSED_FL as an alias of FS_COMPR_FL for backward
compatibility.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 18:33:31 +01:00
Ken Brown
fd57eea561 Revert "Cygwin: mmap: use 64K pages for bookkeeping"
This reverts commit 74017d229d5e46867c8a3ec01bf653e4392bf14c.

After this commit, gdb exits with a fatal error on startup.

Addresses: https://cygwin.com/pipermail/cygwin-patches/2025q1/013240.html
Fixes: 74017d229d5e ("Cygwin: mmap: use 64K pages for bookkeeping")
Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-15 11:22:15 -05:00
Corinna Vinschen
25e5824fb1 Cygwin: get_posix_access: make sure pos is correctly set when used
The code merging permissions relies on `pos' being set to the number
of current entries in the local aclent_t buffer.  Commit 0e6d36766c83
("Cygwin: get_posix_access: move umask masking to the end") moved that
code to run earlier, but neglected to move setting `pos' correctly
as well.

Make sure to set `pos' inside the code block, as well as in the
final array size check, so `pos' is set correctly where it belongs.

Fixes: 0e6d36766c83 ("Cygwin: get_posix_access: move umask masking to the end")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 15:57:56 +01:00
Corinna Vinschen
a6bc726adf Cygwin: get_posix_access: initalize obj_idx
This fixes a false positive gcc warning.

Fixes: 01c9386fd805 ("Cygwin: get_posix_access: improve merging permissions")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 15:50:29 +01:00
Corinna Vinschen
0e6d36766c Cygwin: get_posix_access: move umask masking to the end
umask handling for new file gets overriden by subsequent merging of
permissions in Windows-generated ACLs.  Fix this by performing
umask masking after all other ACL manipulations.

Fixes: a8716448cecc ("Simplify "Windows-standard-like" permissions")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:03 +01:00
Corinna Vinschen
01c9386fd8 Cygwin: get_posix_access: improve merging permissions
Add a second loop to the code snippet merging permissions in old-style
or Windows-generated ACLs.  This loop fixes up default ACL permissions
created from ACEs which are valid for the directory itself, as well as
getting inherited to child objects.

The FULL_ACE bit utilized for this is removed from the ACE at the
end of the function, together with the temporary DENY bits.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:03 +01:00
Corinna Vinschen
a785d996c9 Revert "Cygwin: get_posix_access: do not merge permissions for just created files"
This reverts commit 971d2dffea7848270aa9dfb5c14dcd946c8971c0.

This patch was supposed to fix lots of FAILs in our own
testsuite/winsup.api/ltp/umask03.c test.  The reason was
that umask masking in get_posix_access when generating new files
was overriden by later code in the same function, merging
permissions in old-style or Windows generated ACLs.

However, the solution to skip merging was not the right thing,
because this breaks handling of Windows-generated ACLs.

Rather, umask masking should be performed pretty late, certainly
after merging permissions.  This will be done by a followup patch.

Fixes: 971d2dffea78 ("Cygwin: get_posix_access: do not merge permissions for just created files")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:03 +01:00
Corinna Vinschen
3858f07dd8 Cygwin: get_posix_access: fix id in default:user and default:group entry
Setting the a_id in the default:user and default:group entries to
the actual uid and gid of the current owner/group doesn't make
sense.  Change to ACL_UNDEFINED_ID.

Fixes: bc444e5aa4ca ("Reapply POSIX ACL changes.")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:03 +01:00
Corinna Vinschen
a238211828 Cygwin: get_posix_access: don't drop admin and system perms in default ACL
The permissions of entries for SYSTEM and the Administrators group
are not added to the CLASS_OBJ entry, so they don't set the class
perms to rwx all the time.

This shouldn't be done for default perms, otherwise the resulting
permissions when generating new files might be surprisingly restricted
for Admins and SYSTEM.

Fixes: bc444e5aa4ca ("Reapply POSIX ACL changes.")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:03 +01:00
Corinna Vinschen
97c3835a03 Cygwin: get_posix_access: accomodate owner==group in default:group perms
When generating a default:group (Windows: CREATOR GROUP) ACL entry,
make sure to copy over user perms to the new default group entry.

Fixes: bc444e5aa4ca ("Reapply POSIX ACL changes.")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:03 +01:00
Corinna Vinschen
662fc09013 Cygwin: get_posix_access: drop stray increment instruction
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:27:02 +01:00
Corinna Vinschen
8695b3a176 Cygwin: get_posix_access: Use correct type for local id variable
it's an id_t, not an int.

Fixes: bc444e5aa4ca ("Reapply POSIX ACL changes.")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:26:53 +01:00
Corinna Vinschen
a1aa7462cd Cygwin: security.h: De-inline cygpsid::debug_print
This allows to use the function from GDB during debugging.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-15 12:26:53 +01:00
Takashi Yano
a22a0ad7c4 Cygwin: signal: Do not handle signal when __SIGFLUSHFAST is sent
After the commit d243e51ef1d3, zsh sometimes hangs at startup. This
occurs because SIGCHLD, which should trigger sigsuspend(), is handled
in cygwait() that is used to wait for a wakeup event in sig_send(),
even when __SIGFLUSHFAST is sent. Despite __SIGFLUSHFAST being
required to return before handling the signal, this does not happen.
With this patch, if the signal currently being sent is __SIGFLUSHFAST,
do not handle the received signal and keep it asserted after the
cygwait() for the wakeup event.  Apply the same logic to the cygwait()
in the retrying loop for WriteFile() as well.

Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256954.html
Fixes: d243e51ef1d3 ("Cygwin: signal: Fix deadlock between main thread and sig thread")
Reported-by: Daisuke Fujimura <booleanlabel@gmail.com>
Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-01-14 20:35:58 +09:00
Ken Brown
74017d229d Cygwin: mmap: use 64K pages for bookkeeping
It was convenient to use pages of size 4K (Windows page size) for
bookkeeping when we were using filler pages.  But all references to
filler pages were removed in commit ceda26c9d35b ("Cygwin: mmap:
remove __PROT_FILLER and the associated methods"), so this is no
longer necessary.  Switch to using pages of size 64K (Windows
allocation granularity) for everything.

Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-13 11:12:54 -05:00
Corinna Vinschen
264544bf72 Cygwin: unlink/rename: fix skipping deletion with POSIX semantics
unlink_nt() and rename2 () both check for the FILE_SUPPORTS_OPEN_BY_FILE_ID
flag to use POSIX delete/rename semantics.  Both erroneously check the flag
against the file attributes using has_attributes().

Given that this flag is a filesystem flag, check using fs_flags() instead.

Fixes: fe2545e9faaf ("Cygwin: don't use unlink/rename POSIX semantics on certain NTFS")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-12 23:11:18 +01:00
Ken Brown
b42ac298bb Cygwin: remove winsup/cygwin/local_includes/mmap_helper.h
None of its macros and functions are used anymore.

Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-09 17:51:27 -05:00
Ken Brown
fb8681e4ca Cygwin: mmap_list::try_map: simplify
Save the result of mmap_record::find_unused pages, and then pass that
result to the appropriate version of mmap_record::map_pages.  Add a
new parameter of type off_t to the latter to make this possible, and
change its return type from off_t to bool.  This saves map_pages from
having to call find_unused_pages again.

Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-09 17:51:27 -05:00
Ken Brown
ceda26c9d3 Cygwin: mmap: remove __PROT_FILLER and the associated methods
This is left over from 32 bit Cygwin and is no longer used.

Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-09 17:51:27 -05:00
Ken Brown
edac7e5345 Cygwin: mmap: remove is_mmapped_region()
The last use was removed in commit 29a126322783 ("Simplify stack
allocation code in child after fork").

Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-09 17:51:27 -05:00
Ken Brown
5495179332 Cygwin: mmap: refactor mmap_record::match
Slightly simplify the code and add comments to explain what the
function does.  Add a version of this method with a new reference
parameter "contains" that is set to true if the chunk of this
mmap_record contains the given address range.

Signed-off-by: Ken Brown <kbrown@cornell.edu>
2025-01-09 17:51:27 -05:00
Corinna Vinschen
2e4db338ac Cygwin: access: Fix X_OK behaviour for backup operators and admins
After commit a0933cd17d19, access(_, X_OK) returns 0 if the user
holds SE_BACKUP_PRIVILEGE, even if the file's ACL denies execution
to the user.  This is triggered by trying to open the file with
FILE_OPEN_FOR_BACKUP_INTENT.

Fix check_file_access() so it checks for X_OK without specifying
the FILE_OPEN_FOR_BACKUP_INTENT flag if the file is not a directory.

Rearrange function slightly and add comments for easier comprehension.

Fixes: a0933cd17d19 ("Cygwin: access: Correction for samba/SMB share")
Reported-by: Bruno Haible <bruno@clisp.org>
Co-authored-by: Takashi Yano <takashi.yano@nifty.ne.jp>
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-01-08 16:13:14 +01:00