On Tue, Nov 27, 2018 at 2:05 PM Mimi Zohar <zohar@xxxxxxxxxxxxx> wrote: > > On Mon, 2018-11-26 at 10:38 -0600, Goldwyn Rodrigues wrote: > > A file can be opened with open(O_WRONLY | O_RDWR), so a FMORE_READ > > will not be set, and overlayfs will consider another copy_up() on the same > > file leading to a deadlock on mnt_want_write(). Fix it by masking > > O_RDWR while opening the file in read-only mode. > > Shouldn't the open itself fail if both O_WRONLY and O_RDWR are > specified? > Well, open doesn't fail, so what can you do? prove that no app out there is using this bizarre flag combination and return -EINVAL? You can try... BTW, the freakish thing about O_WRONLY | O_RDWR, is that it actually translates to !f->f_mode & FMODE_READ && !f->f_mode & FMODE_WRITE: OPEN_FMODE(1|2) = (3+1) & 3 = 0 It would make more sense if O_WRONLY | O_RDWR would have the same result as O_RDWR, which is exactly what happens with ACC_MODE(flags) in build_open_flags(). build_open_flags() would be a good place to check and fix this abnormality. Thanks, Amir.