diff --git a/src/core/hle/service/ac_u.cpp b/src/core/hle/service/ac_u.cpp
index d67325506143b830cb9e396511d8f73a75dd24e2..5241dd3e76b3f18904792e73d990e518fb48618b 100644
--- a/src/core/hle/service/ac_u.cpp
+++ b/src/core/hle/service/ac_u.cpp
@@ -3,6 +3,8 @@
 // Refer to the license.txt file included.
 
 #include "common/logging/log.h"
+
+#include "core/hle/kernel/event.h"
 #include "core/hle/service/ac_u.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -10,6 +12,28 @@
 
 namespace AC_U {
 
+/**
+ * AC_U::CloseAsync service function
+ *  Inputs:
+ *      1 : Always 0x20
+ *      3 : Always 0
+ *      4 : Event handle, should be signaled when AC connection is closed
+ *  Outputs:
+ *      1 : Result of function, 0 on success, otherwise error code
+ */
+static void CloseAsync(Service::Interface* self) {
+    u32* cmd_buff = Kernel::GetCommandBuffer();
+
+    auto evt = Kernel::g_handle_table.Get<Kernel::Event>(cmd_buff[4]);
+
+    if (evt) {
+        evt->name = "AC_U:close_event";
+        evt->Signal();
+    }
+    cmd_buff[1] = RESULT_SUCCESS.raw; // No error
+
+    LOG_WARNING(Service_AC, "(STUBBED) called");
+}
 /**
  * AC_U::GetWifiStatus service function
  *  Outputs:
@@ -47,7 +71,7 @@ const Interface::FunctionInfo FunctionTable[] = {
     {0x00010000, nullptr,               "CreateDefaultConfig"},
     {0x00040006, nullptr,               "ConnectAsync"},
     {0x00050002, nullptr,               "GetConnectResult"},
-    {0x00080004, nullptr,               "CloseAsync"},
+    {0x00080004, CloseAsync,            "CloseAsync"},
     {0x00090002, nullptr,               "GetCloseResult"},
     {0x000A0000, nullptr,               "GetLastErrorCode"},
     {0x000D0000, GetWifiStatus,         "GetWifiStatus"},
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index a9a1a32441cf81f64d66b8922c26e663e0209627..fb2aecbf25901460a78ce0c73092fbc37dd1a840 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -859,6 +859,10 @@ static ResultCode GetProcessInfo(s64* out, Handle process_handle, u32 type) {
         // TODO(yuriks): Type 0 returns a slightly higher number than type 2, but I'm not sure
         // what's the difference between them.
         *out = process->heap_used + process->linear_heap_used + process->misc_memory_used;
+        if(*out % Memory::PAGE_SIZE != 0) {
+            LOG_ERROR(Kernel_SVC, "called, memory size not page-aligned");
+            return ERR_MISALIGNED_SIZE;
+        }
         break;
     case 1:
     case 3: