diff --git a/pvmfw/Android.bp b/pvmfw/Android.bp
index c9909e6..09453e5 100644
--- a/pvmfw/Android.bp
+++ b/pvmfw/Android.bp
@@ -16,7 +16,6 @@
     rustlibs: [
         "libaarch64_paging",
         "libbssl_ffi_nostd",
-        "libbuddy_system_allocator",
         "libciborium_nostd",
         "libciborium_io_nostd",
         "libdiced_open_dice_nostd",
diff --git a/pvmfw/src/entry.rs b/pvmfw/src/entry.rs
index 78383d2..56f9462 100644
--- a/pvmfw/src/entry.rs
+++ b/pvmfw/src/entry.rs
@@ -15,10 +15,8 @@
 //! Low-level entry and exit points of pvmfw.
 
 use crate::config;
-use crate::configure_global_allocator_size;
 use crate::crypto;
 use crate::fdt;
-use crate::heap;
 use crate::memory;
 use core::arch::asm;
 use core::mem::{drop, size_of};
@@ -33,7 +31,7 @@
 use log::LevelFilter;
 use vmbase::util::RangeExt as _;
 use vmbase::{
-    console,
+    configure_global_allocator_size, console, heap,
     layout::{self, crosvm},
     logger, main,
     memory::{min_dcache_line_size, MemoryTracker, MEMORY, SIZE_128KB, SIZE_4KB},
diff --git a/pvmfw/src/heap.rs b/pvmfw/src/heap.rs
deleted file mode 100644
index a28a02c..0000000
--- a/pvmfw/src/heap.rs
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2022, The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//! Heap implementation.
-
-use alloc::alloc::alloc;
-use alloc::alloc::Layout;
-use alloc::boxed::Box;
-
-use core::alloc::GlobalAlloc as _;
-use core::ffi::c_void;
-use core::mem;
-use core::num::NonZeroUsize;
-use core::ptr;
-use core::ptr::NonNull;
-
-use buddy_system_allocator::LockedHeap;
-
-/// Configures the size of the global allocator.
-#[macro_export]
-macro_rules! configure_global_allocator_size {
-    ($len:expr) => {
-        static mut __HEAP_ARRAY: [u8; $len] = [0; $len];
-        #[export_name = "HEAP"]
-        // SAFETY - HEAP will only be accessed once as mut, from init().
-        static mut __HEAP: &'static mut [u8] = unsafe { &mut __HEAP_ARRAY };
-    };
-}
-
-extern "Rust" {
-    /// Slice used by the global allocator, configured using configure_global_allocator_size!().
-    static mut HEAP: &'static mut [u8];
-}
-
-#[global_allocator]
-static HEAP_ALLOCATOR: LockedHeap<32> = LockedHeap::<32>::new();
-
-/// Initialize the global allocator.
-///
-/// # Safety
-///
-/// Must be called no more than once.
-pub unsafe fn init() {
-    // SAFETY: Nothing else accesses this memory, and we hand it over to the heap to manage and
-    // never touch it again. The heap is locked, so there cannot be any races.
-    let (start, size) = unsafe { (HEAP.as_mut_ptr() as usize, HEAP.len()) };
-
-    let mut heap = HEAP_ALLOCATOR.lock();
-    // SAFETY: We are supplying a valid memory range, and we only do this once.
-    unsafe { heap.init(start, size) };
-}
-
-/// Allocate an aligned but uninitialized slice of heap.
-pub fn aligned_boxed_slice(size: usize, align: usize) -> Option<Box<[u8]>> {
-    let size = NonZeroUsize::new(size)?.get();
-    let layout = Layout::from_size_align(size, align).ok()?;
-    // SAFETY - We verify that `size` and the returned `ptr` are non-null.
-    let ptr = unsafe { alloc(layout) };
-    let ptr = NonNull::new(ptr)?.as_ptr();
-    let slice_ptr = ptr::slice_from_raw_parts_mut(ptr, size);
-
-    // SAFETY - The memory was allocated using the proper layout by our global_allocator.
-    Some(unsafe { Box::from_raw(slice_ptr) })
-}
-
-#[no_mangle]
-unsafe extern "C" fn malloc(size: usize) -> *mut c_void {
-    allocate(size, false).map_or(ptr::null_mut(), |p| p.cast::<c_void>().as_ptr())
-}
-
-#[no_mangle]
-unsafe extern "C" fn calloc(nmemb: usize, size: usize) -> *mut c_void {
-    let Some(size) = nmemb.checked_mul(size) else {
-        return ptr::null_mut()
-    };
-    allocate(size, true).map_or(ptr::null_mut(), |p| p.cast::<c_void>().as_ptr())
-}
-
-#[no_mangle]
-/// SAFETY: ptr must be null or point to a currently-allocated block returned by allocate (either
-/// directly or via malloc or calloc). Note that this function is called directly from C, so we have
-/// to trust that the C code is doing the right thing; there are checks below which will catch some
-/// errors.
-unsafe extern "C" fn free(ptr: *mut c_void) {
-    let Some(ptr) = NonNull::new(ptr) else { return };
-    // SAFETY: The contents of the HEAP slice may change, but the address range never does.
-    let heap_range = unsafe { HEAP.as_ptr_range() };
-    assert!(
-        heap_range.contains(&(ptr.as_ptr() as *const u8)),
-        "free() called on a pointer that is not part of the HEAP: {ptr:?}"
-    );
-    let (ptr, size) = unsafe {
-        // SAFETY: ptr is non-null and was allocated by allocate, which prepends a correctly aligned
-        // usize.
-        let ptr = ptr.cast::<usize>().as_ptr().offset(-1);
-        (ptr, *ptr)
-    };
-    let size = NonZeroUsize::new(size).unwrap();
-    let layout = malloc_layout(size).unwrap();
-    // SAFETY: If our precondition is satisfied, then this is a valid currently-allocated block.
-    unsafe { HEAP_ALLOCATOR.dealloc(ptr as *mut u8, layout) }
-}
-
-/// Allocate a block of memory suitable to return from `malloc()` etc. Returns a valid pointer
-/// to a suitable aligned region of size bytes, optionally zeroed (and otherwise uninitialized), or
-/// None if size is 0 or allocation fails. The block can be freed by passing the returned pointer to
-/// `free()`.
-fn allocate(size: usize, zeroed: bool) -> Option<NonNull<usize>> {
-    let size = NonZeroUsize::new(size)?.checked_add(mem::size_of::<usize>())?;
-    let layout = malloc_layout(size)?;
-    // SAFETY: layout is known to have non-zero size.
-    let ptr = unsafe {
-        if zeroed {
-            HEAP_ALLOCATOR.alloc_zeroed(layout)
-        } else {
-            HEAP_ALLOCATOR.alloc(layout)
-        }
-    };
-    let ptr = NonNull::new(ptr)?.cast::<usize>().as_ptr();
-    // SAFETY: ptr points to a newly allocated block of memory which is properly aligned
-    // for a usize and is big enough to hold a usize as well as the requested number of
-    // bytes.
-    unsafe {
-        *ptr = size.get();
-        NonNull::new(ptr.offset(1))
-    }
-}
-
-fn malloc_layout(size: NonZeroUsize) -> Option<Layout> {
-    // We want at least 8 byte alignment, and we need to be able to store a usize.
-    const ALIGN: usize = const_max_size(mem::size_of::<usize>(), mem::size_of::<u64>());
-    Layout::from_size_align(size.get(), ALIGN).ok()
-}
-
-const fn const_max_size(a: usize, b: usize) -> usize {
-    if a > b {
-        a
-    } else {
-        b
-    }
-}
diff --git a/pvmfw/src/main.rs b/pvmfw/src/main.rs
index 8c5d5d5..61af048 100644
--- a/pvmfw/src/main.rs
+++ b/pvmfw/src/main.rs
@@ -28,7 +28,6 @@
 mod exceptions;
 mod fdt;
 mod gpt;
-mod heap;
 mod helpers;
 mod instance;
 mod memory;
@@ -49,6 +48,7 @@
 use pvmfw_avb::Capability;
 use pvmfw_avb::DebugLevel;
 use pvmfw_embedded_key::PUBLIC_KEY;
+use vmbase::heap;
 use vmbase::memory::flush;
 use vmbase::memory::MEMORY;
 use vmbase::virtio::pci;
