Grisha Levit <grishale...@gmail.com> writes: > On Sun, Sep 7, 2025 at 6:26 PM Collin Funk <collin.fu...@gmail.com> wrote: >> >> Interesting, thanks for the report. Can't we just do the following to >> avoid the extra umask() call? >> > >> - mode_t umask_value = umask (~mode); >> + mode_t umask_value = umask (~mode & (S_IRWXU | S_IRWXG | S_IRWXO)); > > This seems likely fine, but after reading the POSIX description[1], I > was worried that in the case that the other bits do serve some > implementation-defined purpose it may not be correct to clear them, so > went the route of only clearing the bits we need to. I'm not aware of > any platform where that would actually matter though. > > [1] https://pubs.opengroup.org/onlinepubs/9799919799/functions/umask.html
Lets see what others think. All of the BSDs [1][2][3], MacOS [4], and illumos (OpenSolaris fork) [5] mask it to only be the 0777 bits similarly to Linux. Collin [1] https://github.com/freebsd/freebsd-src/blob/14b61b2e931741281d0bfef426e9809f16006504/sys/kern/vfs_syscalls.c#L4399 [2] https://github.com/NetBSD/src/blob/be853cde76b2ccea84a3374a21cbaebb52620ccf/sys/kern/vfs_syscalls.c#L4902 [3] https://github.com/openbsd/src/blob/1c9950446e514b92a735ccfed45c91103981fa42/sys/kern/vfs_syscalls.c#L3209 [4] https://github.com/apple-oss-distributions/xnu/blob/e3723e1f17661b24996789d8afc084c0c3303b26/bsd/vfs/vfs_syscalls.c#L10767 [5] https://github.com/illumos/illumos-gate/blob/80040569a359c61120972d882d97428e80dcab90/usr/src/uts/common/syscall/umask.c#L48