xen: execve's error paths don't pin the mm before unpinning
PATCH 1/1 xen: execve's error paths don't pin the mm before unpinning
execve's error paths don't activate (and therefore pin) the mm before calling exit_mmap to free it up, so don't try to unpin unless it is actually pinned. This prevents a BUG_ON from triggering.
Signed-off-by Jeremy Fitzhardinge <[email protected]>
--- arch/i386/xen/mmu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
===================================================================
arch/i386/xen/mmu.c +4 -1
@@ -558,6 +558,9 @@ void xen_exit_mmap(struct mm_struct *mm)put_cpu ();spin_lock (&mm->page_table_lock); -xen_pgd_unpin (mm->pgd); + +/* pgd may not be pinned in the error exit path of execve */ +if (PagePinned (virt_to_page (mm->pgd))) +xen_pgd_unpin (mm->pgd);spin_unlock (&mm->page_table_lock); }