From: "Bill Rugolsky Jr." This patch cause select() to return EINVAL when passed an un-normalized timeval usec, and fixes up the range check in preparation for the patch that follows. --- 25-akpm/fs/select.c | 4 +--- 1 files changed, 1 insertion(+), 3 deletions(-) diff -puN fs/select.c~poll-select-range-check-fix fs/select.c --- 25/fs/select.c~poll-select-range-check-fix 2004-03-12 01:30:21.000000000 -0800 +++ 25-akpm/fs/select.c 2004-03-12 01:30:21.000000000 -0800 @@ -291,8 +291,6 @@ static void select_bits_free(void *bits, * Update: ERESTARTSYS breaks at least the xview clock binary, so * I'm trying ERESTARTNOHAND which restart only when you want to. */ -#define MAX_SELECT_SECONDS \ - ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval __user *tvp) @@ -315,7 +313,7 @@ sys_select(int n, fd_set __user *inp, fd if (sec < 0 || usec < 0) goto out_nofds; - if ((unsigned long) sec < MAX_SELECT_SECONDS) { + if ((unsigned long) sec < (MAX_SCHEDULE_TIMEOUT-1) / HZ - 1) { timeout = ROUND_UP(usec, 1000000/HZ); timeout += sec * (unsigned long) HZ; } _