Round up to the nearest page size when registering native memory with the VM.

The underlying allocation is a virtual allocation, so it's given in page increments.

Flag: EXEMPT bugfix
Bug: 361329788
Change-Id: Ia3bfdd25ac7d4cd123ef3bd1b6dcc6e32085f230
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java
index c801fabf..a15b3bb 100644
--- a/core/java/android/os/SharedMemory.java
+++ b/core/java/android/os/SharedMemory.java
@@ -379,6 +379,12 @@
         private int mReferenceCount;
 
         private MemoryRegistration(int size) {
+            // Round up to the nearest page size
+            final int PAGE_SIZE = OsConstants._SC_PAGE_SIZE;
+            final int remainder = size % PAGE_SIZE;
+            if (remainder != 0) {
+                size += PAGE_SIZE - remainder;
+            }
             mSize = size;
             mReferenceCount = 1;
             VMRuntime.getRuntime().registerNativeAllocation(mSize);