From 895142e03f1798877b8873b4e987936ff76b7826 Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Sun, 27 Nov 2022 10:30:33 -0800 Subject: [PATCH] ANDROID: page_pinner: prevent pp_buffer access before initialization If page_pinner is configured with page_pinner_enabled=false and failure_tracking=true, pp_buffer will be accessed without being initialized. Prevent this by adding page_pinner_inited checks in functions that access it. Bug: 259024332 Bug: 260179017 Bug: 240196534 Change-Id: I8f612cae3e74d36e8a4eee5edec25281246cbe5e Signed-off-by: Suren Baghdasaryan Signed-off-by: Richard Chang (cherry picked from commit 83b784c3d716ce03ab6b2a9ee178045b1952147d) Signed-off-by: Georgi Djakov --- include/linux/page_pinner.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/page_pinner.h b/include/linux/page_pinner.h index 4d574d1ced59..cb29f5c3d68e 100644 --- a/include/linux/page_pinner.h +++ b/include/linux/page_pinner.h @@ -21,6 +21,9 @@ static inline void free_page_pinner(struct page *page, unsigned int order) static inline void page_pinner_put_page(struct page *page) { + if (!static_branch_unlikely(&page_pinner_inited)) + return; + if (!static_branch_unlikely(&failure_tracking)) return; @@ -29,6 +32,9 @@ static inline void page_pinner_put_page(struct page *page) static inline void page_pinner_failure_detect(struct page *page) { + if (!static_branch_unlikely(&page_pinner_inited)) + return; + if (!static_branch_unlikely(&failure_tracking)) return;