Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c5527b8 authored by Mark Rutland's avatar Mark Rutland Committed by Greg Kroah-Hartman
Browse files

UPSTREAM: 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: 7c1deeeb0130 ("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>
(cherry picked from commit 9cc3d0c6915aee5140f8335d41bbc3ff1b79aa4e)
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
Change-Id: I90fe8e2fb8818bf2d42090f269ce198fdcf1dc7b
parent 4f8388b1
Loading
Loading
Loading
Loading
+1 −12
Original line number Original line Diff line number Diff line
@@ -271,18 +271,7 @@ static int __aarch32_alloc_vdso_pages(void)
	if (ret)
	if (ret)
		return ret;
		return ret;


	ret = aarch32_alloc_kuser_vdso_page();
	return 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;
}
}
#else
#else
static int __aarch32_alloc_vdso_pages(void)
static int __aarch32_alloc_vdso_pages(void)