|
@@ -1025,11 +1025,17 @@ void start_tty(struct tty_struct *tty)
|
|
|
}
|
|
}
|
|
|
EXPORT_SYMBOL(start_tty);
|
|
EXPORT_SYMBOL(start_tty);
|
|
|
|
|
|
|
|
-/* We limit tty time update visibility to every 8 seconds or so. */
|
|
|
|
|
static void tty_update_time(struct timespec *time)
|
|
static void tty_update_time(struct timespec *time)
|
|
|
{
|
|
{
|
|
|
unsigned long sec = get_seconds();
|
|
unsigned long sec = get_seconds();
|
|
|
- if (abs(sec - time->tv_sec) & ~7)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /*
|
|
|
|
|
+ * We only care if the two values differ in anything other than the
|
|
|
|
|
+ * lower three bits (i.e every 8 seconds). If so, then we can update
|
|
|
|
|
+ * the time of the tty device, otherwise it could be construded as a
|
|
|
|
|
+ * security leak to let userspace know the exact timing of the tty.
|
|
|
|
|
+ */
|
|
|
|
|
+ if ((sec ^ time->tv_sec) & ~7)
|
|
|
time->tv_sec = sec;
|
|
time->tv_sec = sec;
|
|
|
}
|
|
}
|
|
|
|
|
|