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