[PATCH 37/59] Tighten setuid TZif file name check

Paul Eggert eggert@cs.ucla.edu
Sun Jan 5 05:57:12 GMT 2025


* time/tzfile.c (__tzfile_read): In a setuid program, reject TZ
settings like "/usr/share/zoneinfobad/Foo" which have a prefix
"/usr/share/zoneinfo" but do not refer to /usr/share/zoneinfo/*.
---
 time/tzfile.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/time/tzfile.c b/time/tzfile.c
index 678ecdd58b..8efe5b2ec9 100644
--- a/time/tzfile.c
+++ b/time/tzfile.c
@@ -140,7 +140,7 @@ decode64 (const void *ptr)
 bool
 __tzfile_read (const char *file)
 {
-  static const char default_tzdir[] = TZDIR;
+  static const char default_tzdir[] = TZDIR "/";
   tzidx isstdcnt, isutcnt;
   FILE *f;
   union { struct tzhead tzhead; tzidx tzidx_aligned; } u;
@@ -178,6 +178,7 @@ __tzfile_read (const char *file)
 	tzdir = default_tzdir;
 
       size_t tzdirlen = strlen (tzdir);
+      tzdirlen -= tzdir[tzdirlen - 1] == '/';
       size_t filelen = strlen (file);
       new = malloc (tzdirlen + 1 + filelen + 1);
       if (new == NULL)
-- 
2.45.2



More information about the Libc-alpha mailing list