Commit 9cc3d0c6 authored by Mark Rutland's avatar Mark Rutland Committed by Catalin Marinas
Browse files

arm64: vdso: don't free unallocated pages



The aarch32_vdso_pages[] array never has entries allocated in the C_VVAR
or C_VDSO slots, and as the array is zero initialized these contain
NULL.

However in __aarch32_alloc_vdso_pages() when
aarch32_alloc_kuser_vdso_page() fails we attempt to free the page whose
struct page is at NULL, which is obviously nonsensical.

This patch removes the erroneous page freeing.

Fixes: 7c1deeeb ("arm64: compat: VDSO setup for compat layer")
Cc: <stable@vger.kernel.org> # 5.3.x-
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
Acked-by: default avatarWill Deacon <will@kernel.org>
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 8f3d9f35
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -260,18 +260,7 @@ static int __aarch32_alloc_vdso_pages(void)
	if (ret)
		return ret;

	ret = aarch32_alloc_kuser_vdso_page();
	if (ret) {
		unsigned long c_vvar =
			(unsigned long)page_to_virt(aarch32_vdso_pages[C_VVAR]);
		unsigned long c_vdso =
			(unsigned long)page_to_virt(aarch32_vdso_pages[C_VDSO]);

		free_page(c_vvar);
		free_page(c_vdso);
	}

	return ret;
	return aarch32_alloc_kuser_vdso_page();
}
#else
static int __aarch32_alloc_vdso_pages(void)