rofiles-fuse: also pass mode for O_RDONLY
authorJonathan Lebon <jlebon@redhat.com>
Wed, 20 Sep 2017 18:38:16 +0000 (18:38 +0000)
committerPeter Michael Green <plugwash@raspbian.org>
Thu, 28 Sep 2017 16:17:06 +0000 (17:17 +0100)
commitc534a2f7a8cd0515bfd3f86b315587496b4a3d76
treeba110126bafc79d4d61820f9525b46aceaaa4459
parentf2ed045c581e38e52bb8290f052a4d3c3637d9d0
rofiles-fuse: also pass mode for O_RDONLY

In the `O_RDONLY` case, we were calling `openat` without a mode
argument. However, it's perfectly legal (albeit unusual) to do
`open(O_RDONLY|O_CREAT)`. One such application that makes use of this is
`flock(1)`.

This was actually caught by `_FORTIFY_SOURCE=2`, and once we run
`rofiles-fuse` with `-f`, the message is clear:

```
*** invalid openat64 call: O_CREAT or O_TMPFILE without mode ***:
rofiles-fuse terminated
======= Backtrace: =========
/lib64/libc.so.6(+0x7c8dc)[0x7f36d9f188dc]
/lib64/libc.so.6(__fortify_fail+0x37)[0x7f36d9fbfaa7]
/lib64/libc.so.6(+0x10019a)[0x7f36d9f9c19a]
rofiles-fuse[0x401768]
...
```

Without `_FORTIFY_SOURCE`, the file gets created, but its mode is
completely random.

I ran into this while investigating
https://github.com/projectatomic/rpm-ostree/pull/1003.

Closes: #1200
Approved by: cgwalters
Origin: upstream, 2017.12, commit:d4c7093e370843c57eab2f89f0c39ef449e6b32e

Gbp-Pq: Topic 2017.12
Gbp-Pq: Name rofiles-fuse-also-pass-mode-for-O_RDONLY.patch
src/rofiles-fuse/main.c
tests/test-rofiles-fuse.sh