From: Greg Kroah-Hartman Date: Thu, 26 Mar 2015 22:10:27 +0000 (+0100) Subject: tty: clean up the tty time logic a bit X-Git-Tag: firefly_0821_release~176^2~1907^2~7 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=fbf47635315ab308c9b58a1ea0906e711a9228de;p=firefly-linux-kernel-4.4.55.git tty: clean up the tty time logic a bit We only care if anything other than the lower 3 bits of the tty has changed, so just check that way, which makes it a bit faster, and more obvious what is going on. Also, document this for future developers to understand why we did this. Reported-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org --- diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 3949d9527e6d..e5695467598f 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -1025,11 +1025,17 @@ void start_tty(struct tty_struct *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) { 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; }