On 2020-03-30, Michael Kerrisk (man-pages) wrote: > Hello Aleksa, > > On 2/2/20 4:19 PM, Aleksa Sarai wrote: > > Rather than trying to merge the new syscall documentation into open.2 > > (which would probably result in the man-page being incomprehensible), > > instead the new syscall gets its own dedicated page with links between > > open(2) and openat2(2) to avoid duplicating information such as the list > > of O_* flags or common errors. > > > > In addition to describing all of the key flags, information about the > > extensibility design is provided so that users can better understand why > > they need to pass sizeof(struct open_how) and how their programs will > > work across kernels. After some discussions with David Laight, I also > > included explicit instructions to zero the structure to avoid issues > > when recompiling with new headers.> > > Signed-off-by: Aleksa Sarai > > I'm just editing this page, and have a question on one piece. > > > +Unlike > > +.BR openat (2), > > +it is an error to provide > > +.BR openat2 () > > +with a > > +.I mode > > +which contains bits other than > > +.IR 0777 , > > This piece appears not to be true, both from my reading of the > source code, and from testing (i.e., I wrote a a small program that > successfully called openat2() and created a file that had the > set-UID, set-GID, and sticky bits set). > > Is this a bug in the implementation or a bug in the manual page text? My bad -- it's a bug in the manual. The actual check (which does work, there are selftests for this) is: if (how->mode & ~S_IALLUGO) return -EINVAL; But when writing the man page I forgot that S_IALLUGO also includes those bits. Do you want me to send an updated version or would you prefer to clean it up? -- Aleksa Sarai Senior Software Engineer (Containers) SUSE Linux GmbH