Checking for storage space before adding user

If storage space is low, trying to create a user results in a crash.
Adding a check to abort user creation and log a warning in such a case.

Bug: 30270050
Change-Id: I121119aed340c7be337b2147c4386c9bb9f8ffdc
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index e489d96..bdb138e 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -95,7 +95,7 @@
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
 import com.android.server.am.UserState;
-
+import com.android.server.storage.DeviceStorageMonitorInternal;
 import libcore.io.IoUtils;
 import libcore.util.Objects;
 
@@ -2184,6 +2184,12 @@
             Log.w(LOG_TAG, "Cannot add user. DISALLOW_ADD_USER is enabled.");
             return null;
         }
+        DeviceStorageMonitorInternal dsm = LocalServices
+                .getService(DeviceStorageMonitorInternal.class);
+        if (dsm.isMemoryLow()) {
+            Log.w(LOG_TAG, "Cannot add user. Not enough space on disk.");
+            return null;
+        }
         return createUserInternalUnchecked(name, flags, parentId);
     }