utempter na 64-bitach

Adam Osuchowski adwol w zonk.pl
Pon, 20 Wrz 2010, 10:18:20 CEST


Na x86-64 jest problem z utempterem. Struktura utmpx ma czas trzymany
zawsze na 32 bitach (dla celów przenośności) ale utempter wypełnia go
za pomocą gettimeofday(), która to na x86-64 zwraca czas 64-bitowy.
W rezultacie mamy ładny buffer overflow, który psuje resztę pól utmpx.

Patch w załączeniu.
-------------- następna część ---------
--- utempter-0.5.5/utempter.c.orig	2010-02-28 21:06:00.395478197 +0100
+++ utempter-0.5.5/utempter.c	2010-02-28 21:06:52.294473115 +0100
@@ -91,6 +91,7 @@
     char * id;
     int fd;
     struct lastlog ll;
+    struct timeval tv;
  
     if (argc < 3) usage();
 
@@ -158,7 +159,9 @@
 
     strncpy(utx.ut_id, id, sizeof(utx.ut_id));
 
-    gettimeofday(&utx.ut_tv, NULL);
+    gettimeofday(&tv, NULL);
+    utx.ut_tv.tv_sec = tv.tv_sec;
+    utx.ut_tv.tv_usec = tv.tv_usec;
     ll.ll_time = time(NULL);
 
     pututxline(&utx);


Więcej informacji o liście dyskusyjnej pld-devel-pl