Request for clarification of O_PATH in open(2)
Hello. I was reading open(2) and I have noticed an interesting statement: "The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR." Must one of these flags be specified when O_PATH is in use?O_PATH description says that "Opening a file or directory with the O_PATH flag requires no permissions on the object itself (but does require execute permission on the directories in the path prefix)." I think that this can be a little bit ambiguous. When I first read it, I have thought that this sentence talks about filesystem permissions required on the file, not the access modes. O_PATH description states that: "When O_PATH is specified in flags, flag bits other than O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW are ignored." One could think that you must specify an access mode, but it will be ignored.
The O_PATH description actually mentions the O_RDONLY flag, but it compares the difference of opening a file with O_PATH and opening it with (only) O_RDONLY, it doesn't mention the need of O_RDONLY flag when opening a file with O_PATH.
The only part of the manpage that clearly states that using access modes with O_PATH is not mandatory is the code sample included in the O_PATH description, which calls open("some_prog", O_PATH); (but this code sample covers another aspect of O_PATH).
Maybe I'm just dumb and I misread some of the text, but I think this can be ambiguous. I would have sent a patch fixing this, but I'm not a native English speaker and I don't actually know how open() works, so I don't want to make a mistake when modifying its manpage.
Thanks in advance,
Meator
Hello Meator,
Quoted 2 lines · meator
Hello. I was reading open(2) and I have noticed an interesting statement: "The argument flags must include one of the following access modes:
O_RDONLY,O_WRONLY, orO_RDWR." Must one of these flags be specified whenO_PATHis in use?O_PATHdescription says that "Opening a file or directory with theO_PATHflag requires no permissions on the object itself (but does require execute permission on the directories in the path prefix)." I think that this can be a little bit ambiguous. When I first read it, I have thought that this sentence talks about filesystem permissions required on the file, not the access modes.
I agree that it talks about FS permissions, and not access mode.
Quoted 1 line
O_PATHdescription states that: "WhenO_PATHis specified in flags, flag bits other thanO_CLOEXEC,O_DIRECTORY, andO_NOFOLLOWare ignored." One could think that you must specify an access mode, but it will be ignored.
This is the only part that talks about access mode, and implies that you don't need to specify any RD or WR flags. It's true that it could be interpreted as you say.
Quoted 2 lines
The
O_PATHdescription actually mentions theO_RDONLYflag, but it compares the difference of opening a file withO_PATHand opening it with (only)O_RDONLY, it doesn't mention the need ofO_RDONLYflag when opening a file withO_PATH. The only part of the manpage that clearly states that using access modes withO_PATHis not mandatory is the code sample included in theO_PATHdescription, which callsopen("some_prog", O_PATH); (but this code sample covers another aspect ofO_PATH).
But the code sample clarifies the doubt about the necessity or not of writing the (to be ignored) access mode. So you don't need to.
It's true that the code sample is not talking about that, but it's unequivocally saying you don't specify the access mode RD or WR flags.
That's for clarifying it to you.
Quoted 2 lines
Maybe I'm just dumb and I misread some of the text, but I think this can be ambiguous. I would have sent a patch fixing this, but I'm not a native English speaker and I don't actually know how
open()works, so I don't want to make a mistake when modifying its manpage.
As for clarifying it in the manual page, I have doubts. I think it's enough as is, but I'll take your report into account, and if I receive other similar reports, I'll assume that it's not so clear and will try to improve it.
Thanks,
Alex
P.S.: Internet searches also consistently confirm that you don't need to specify the RD WR mode flags:
<https://stackoverflow.com/questions/12416889/semantics-of-linux-o-path-file-descriptors>.