diff options
Diffstat (limited to 'kernel/time/posix-timers.c')
| -rw-r--r-- | kernel/time/posix-timers.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c index 75043046914e..10b7186d0638 100644 --- a/kernel/time/posix-timers.c +++ b/kernel/time/posix-timers.c @@ -50,6 +50,7 @@  #include <linux/export.h>  #include <linux/hashtable.h>  #include <linux/compat.h> +#include <linux/nospec.h>  #include "timekeeping.h"  #include "posix-timers.h" @@ -1346,11 +1347,15 @@ static const struct k_clock * const posix_clocks[] = {  static const struct k_clock *clockid_to_kclock(const clockid_t id)  { -	if (id < 0) +	clockid_t idx = id; + +	if (id < 0) {  		return (id & CLOCKFD_MASK) == CLOCKFD ?  			&clock_posix_dynamic : &clock_posix_cpu; +	} -	if (id >= ARRAY_SIZE(posix_clocks) || !posix_clocks[id]) +	if (id >= ARRAY_SIZE(posix_clocks))  		return NULL; -	return posix_clocks[id]; + +	return posix_clocks[array_index_nospec(idx, ARRAY_SIZE(posix_clocks))];  } | 
