tincctl: restrict umask argument for FORTIFY
authorpacien <pacien.trangirard@pacien.net>
Tue, 8 Sep 2020 23:24:28 +0000 (01:24 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 27 Jun 2021 14:27:03 +0000 (16:27 +0200)
`umask(mode)` calls that do not verify `(mode & 0777) == mode` are
rejected when the libc FORTIFY checks are enabled [1].

The unrestricted `~perms` was indeed making this assertion fail.

[1]: https://android.googlesource.com/platform/bionic/+/refs/tags/android-11.0.0_r3/libc/bionic/fortify.cpp#404

src/tincctl.c

index 3c7d368..99a34c7 100644 (file)
@@ -238,7 +238,7 @@ static bool parse_options(int argc, char **argv) {
 FILE *fopenmask(const char *filename, const char *mode, mode_t perms) {
        mode_t mask = umask(0);
        perms &= ~mask;
-       umask(~perms);
+       umask(~perms & 0777);
        FILE *f = fopen(filename, mode);
 
        if(!f) {