• Andrew Morton's avatar
    [PATCH] select: fix returned timeval · 643a6545
    Andrew Morton authored
    With David Woodhouse <dwmw2@infradead.org>
    
    select() presently has a habit of increasing the value of the user's
    `timeout' argument on return.
    
    We were writing back a timeout larger than the original.  We _deliberately_
    round up, since we know we must wait at _least_ as long as the caller asks
    us to.
    
    The patch adds a couple of helper functions for magnitude comparison of
    timespecs and of timevals, and uses them to prevent the various poll and
    select functions from returning a timeout which is larger than the one which
    was passed in.
    
    The patch also fixes a bug in compat_sys_pselect7(): it was adding the new
    timeout value to the old one and was returning that.  It should just return
    the new timeout value.
    
    (We have various handy timespec/timeval-to-from-nsec conversion functions in
    time.h.  But this code open-codes it all).
    
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Andi Kleen <ak@muc.de>
    Cc: Ulrich Drepper <drepper@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: george anzinger <george@mvista.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    643a6545
compat.c 52.1 KB