Page MenuHomeFreeBSD

x86 __vdso_gettc: add O_CLOEXEC flag to open
ClosedPublic

Authored by kib on Jul 29 2021, 1:35 AM.

Details

Summary

of the /dev/hpet and /dev/hv_tsc devices, to not leak internal libc filedescriptors on exec.

Diff Detail

Repository
R10 FreeBSD src repository
Lint
Lint Skipped
Unit
Unit Tests Skipped

Event Timeline

kib requested review of this revision.Jul 29 2021, 1:35 AM
kib created this revision.

BTW, there are a couple of _opens() in the locale code which should use O_CLOEXEC as well:

diff --git a/lib/libc/locale/collate.c b/lib/libc/locale/collate.c
index c992d2299ab7..7afb2043e6a4 100644
--- a/lib/libc/locale/collate.c
+++ b/lib/libc/locale/collate.c
@@ -131,7 +131,7 @@ __collate_load_tables_l(const char *encoding, struct xlocale_collate *table)
        if (asprintf(&buf, "%s/%s/LC_COLLATE", _PathLocale, encoding) == -1)
                return (_LDP_ERROR);
 
-       if ((fd = _open(buf, O_RDONLY)) < 0) {
+       if ((fd = _open(buf, O_RDONLY | O_CLOEXEC)) < 0) {
                free(buf);
                return (_LDP_ERROR);
        }
diff --git a/lib/libc/locale/rune.c b/lib/libc/locale/rune.c
index b7334636f654..ce2095763eba 100644
--- a/lib/libc/locale/rune.c
+++ b/lib/libc/locale/rune.c
@@ -74,7 +74,7 @@ _Read_RuneMagi(const char *fname)
        int runetype_ext_len = 0;
        int fd;
 
-       if ((fd = _open(fname, O_RDONLY)) < 0) {
+       if ((fd = _open(fname, O_RDONLY | O_CLOEXEC)) < 0) {
                errno = EINVAL;
                return (NULL);
        }
This revision is now accepted and ready to land.Jul 29 2021, 11:47 AM

BTW, there are a couple of _opens() in the locale code which should use O_CLOEXEC as well:

This looks fine, but should be a separate change (yours).

This revision was automatically updated to reflect the committed changes.