From 138082a93991ce2728a30a5426e23490ddeb4b77 Mon Sep 17 00:00:00 2001 From: Alice Ryhl Date: Wed, 23 Jul 2025 12:43:49 +0000 Subject: [PATCH] ANDROID: rust_binder: allocate pages array with kvmalloc Avoid making order 3 allocations with kmalloc. Using kvmalloc will help avoid OOM conditions. Bug: 350907206 Change-Id: Ib1e8c113ac2cbe6b46938e2541ff76efc1f9d111 Signed-off-by: Alice Ryhl --- drivers/android/binder/page_range.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/android/binder/page_range.rs b/drivers/android/binder/page_range.rs index 60cd50c1d75a..bacaa0000331 100644 --- a/drivers/android/binder/page_range.rs +++ b/drivers/android/binder/page_range.rs @@ -21,7 +21,7 @@ use core::{ }; use kernel::{ - alloc::allocator::Kmalloc, + alloc::allocator::KVmalloc, alloc::Allocator, bindings, error::Result, @@ -297,7 +297,7 @@ impl ShrinkablePageRange { let layout = Layout::array::(num_pages).map_err(|_| ENOMEM)?; // SAFETY: The layout has non-zero size. - let pages = Kmalloc::alloc(layout, GFP_KERNEL)?.cast::(); + let pages = KVmalloc::alloc(layout, GFP_KERNEL)?.cast::(); // SAFETY: This just initializes the pages array. unsafe { @@ -317,7 +317,7 @@ impl ShrinkablePageRange { pr_debug!("Failed to register with vma: already registered"); drop(inner); // SAFETY: The `pages` array was allocated with the same layout. - unsafe { Kmalloc::free(pages.cast(), layout) }; + unsafe { KVmalloc::free(pages.cast(), layout) }; return Err(EBUSY); } @@ -647,7 +647,7 @@ impl PinnedDrop for ShrinkablePageRange { let layout = unsafe { Layout::array::(size).unwrap_unchecked() }; // SAFETY: The `pages` array was allocated with the same layout. - unsafe { Kmalloc::free(pages.cast(), layout) }; + unsafe { KVmalloc::free(pages.cast(), layout) }; } }