diff options
Diffstat (limited to 'include/linux/nospec.h')
| -rw-r--r-- | include/linux/nospec.h | 18 | 
1 files changed, 2 insertions, 16 deletions
diff --git a/include/linux/nospec.h b/include/linux/nospec.h index b99bced39ac2..e791ebc65c9c 100644 --- a/include/linux/nospec.h +++ b/include/linux/nospec.h @@ -5,6 +5,7 @@  #ifndef _LINUX_NOSPEC_H  #define _LINUX_NOSPEC_H +#include <asm/barrier.h>  /**   * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise @@ -20,20 +21,6 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,  						    unsigned long size)  {  	/* -	 * Warn developers about inappropriate array_index_nospec() usage. -	 * -	 * Even if the CPU speculates past the WARN_ONCE branch, the -	 * sign bit of @index is taken into account when generating the -	 * mask. -	 * -	 * This warning is compiled out when the compiler can infer that -	 * @index and @size are less than LONG_MAX. -	 */ -	if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, -			"array_index_nospec() limited to range of [0, LONG_MAX]\n")) -		return 0; - -	/*  	 * Always calculate and emit the mask even if the compiler  	 * thinks the mask is not needed. The compiler does not take  	 * into account the value of @index under speculation. @@ -66,7 +53,6 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,  	BUILD_BUG_ON(sizeof(_i) > sizeof(long));			\  	BUILD_BUG_ON(sizeof(_s) > sizeof(long));			\  									\ -	_i &= _mask;							\ -	_i;								\ +	(typeof(_i)) (_i & _mask);					\  })  #endif /* _LINUX_NOSPEC_H */  | 

