[PARISC] Handle wrapping in expand_upwards()
Function expand_upwards() did not guarded against wrapping around to address 0. This fixes the adjtimex02 testcase from the Linux Test Project on a 32bit PARISC kernel. [expand_upwards is only used on parisc and ia64; it looks like it does the right thing on both. --kyle] Signed-off-by: Helge Deller <deller@gmx.de> Cc: Tony Luck <tony.luck@intel.com> Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
This commit is contained in:
parent
d2f1c0fa2b
commit
06b32f3ab6
|
@ -1536,9 +1536,14 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
|
|||
* vma->vm_start/vm_end cannot change under us because the caller
|
||||
* is required to hold the mmap_sem in read mode. We need the
|
||||
* anon_vma lock to serialize against concurrent expand_stacks.
|
||||
* Also guard against wrapping around to address 0.
|
||||
*/
|
||||
address += 4 + PAGE_SIZE - 1;
|
||||
address &= PAGE_MASK;
|
||||
if (address < PAGE_ALIGN(address+4))
|
||||
address = PAGE_ALIGN(address+4);
|
||||
else {
|
||||
anon_vma_unlock(vma);
|
||||
return -ENOMEM;
|
||||
}
|
||||
error = 0;
|
||||
|
||||
/* Somebody else might have raced and expanded it already */
|
||||
|
|
Loading…
Reference in New Issue