|
@@ -78,11 +78,14 @@ static size_t copy_in_kernel(size_t count, void __user *to,
|
|
|
* contains the (negative) exception code.
|
|
|
*/
|
|
|
#ifdef CONFIG_64BIT
|
|
|
+
|
|
|
static unsigned long follow_table(struct mm_struct *mm,
|
|
|
unsigned long address, int write)
|
|
|
{
|
|
|
unsigned long *table = (unsigned long *)__pa(mm->pgd);
|
|
|
|
|
|
+ if (unlikely(address > mm->context.asce_limit - 1))
|
|
|
+ return -0x38UL;
|
|
|
switch (mm->context.asce_bits & _ASCE_TYPE_MASK) {
|
|
|
case _ASCE_TYPE_REGION1:
|
|
|
table = table + ((address >> 53) & 0x7ff);
|