Messages in this thread | | | Date | Mon, 16 May 2022 09:51:10 +0200 | Subject | Re: procfs: open("/proc/self/fd/...") allows bypassing O_RDONLY | From | Rasmus Villemoes <> |
| |
On 12/05/2022 14.38, Simon Ser wrote: > On Thursday, May 12th, 2022 at 14:30, Amir Goldstein <amir73il@gmail.com> wrote: > >> Clients can also readlink("/proc/self/fd/<fd>") to get the path of the file >> and open it from its path (if path is accessible in their mount namespace). > > What the compositor does is: > > - shm_open with O_RDWR > - Write the kyeboard keymap > - shm_open again the same file with O_RDONLY > - shm_unlink > - Send the O_RDONLY FD to clients > > Thus, the file doesn't exist anymore when clients get the FD.
So, what happens if you do fchmod(fd, 0400) on the fd before passing it to the client [1].
I assume the client is not running as the same uid as the compositor (so it can't fchmod() the inode back); if it is, then it could just ptrace you and all bets are off.
[1] or for that matter, simply specify 0400 as the mode argument when creating the file - that's perfectly legal to do in conjunction with O_RDWR | O_CREAT | O_EXCL, and should probably be done to prevent anybody else from opening the same shm file with write permission before it gets shm_unlinked.
Rasmus
| |