diff options
Diffstat (limited to 'arch/x86/kernel/cpu/mtrr/if.c')
| -rw-r--r-- | arch/x86/kernel/cpu/mtrr/if.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpu/mtrr/if.c b/arch/x86/kernel/cpu/mtrr/if.c index 79289632cb2..a041e094b8b 100644 --- a/arch/x86/kernel/cpu/mtrr/if.c +++ b/arch/x86/kernel/cpu/mtrr/if.c @@ -167,6 +167,7 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)  {  	int err = 0;  	mtrr_type type; +	unsigned long base;  	unsigned long size;  	struct mtrr_sentry sentry;  	struct mtrr_gentry gentry; @@ -267,14 +268,14 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)  #endif  		if (gentry.regnum >= num_var_ranges)  			return -EINVAL; -		mtrr_if->get(gentry.regnum, &gentry.base, &size, &type); +		mtrr_if->get(gentry.regnum, &base, &size, &type);  		/* Hide entries that go above 4GB */ -		if (gentry.base + size - 1 >= (1UL << (8 * sizeof(gentry.size) - PAGE_SHIFT)) +		if (base + size - 1 >= (1UL << (8 * sizeof(gentry.size) - PAGE_SHIFT))  		    || size >= (1UL << (8 * sizeof(gentry.size) - PAGE_SHIFT)))  			gentry.base = gentry.size = gentry.type = 0;  		else { -			gentry.base <<= PAGE_SHIFT; +			gentry.base = base << PAGE_SHIFT;  			gentry.size = size << PAGE_SHIFT;  			gentry.type = type;  		} @@ -321,11 +322,12 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)  #endif  		if (gentry.regnum >= num_var_ranges)  			return -EINVAL; -		mtrr_if->get(gentry.regnum, &gentry.base, &size, &type); +		mtrr_if->get(gentry.regnum, &base, &size, &type);  		/* Hide entries that would overflow */  		if (size != (__typeof__(gentry.size))size)  			gentry.base = gentry.size = gentry.type = 0;  		else { +			gentry.base = base;  			gentry.size = size;  			gentry.type = type;  		}  |