Stop invoking secdiscard when deleting password data

secdiscard never works on recent devices; stop calling it to
reduce the false SELinux denials messages. Just logically
zeroize the data before unlinking it.

Bug: 62140539
Test: flash device; change PIN; observe no SELinux error messages.
Change-Id: I5f47fc81735a7d9995c2da9e52a25ae903db3ced
This commit is contained in:
Rubin Xu
2018-03-01 16:40:04 +00:00
parent 999e97f405
commit 841fd43338
4 changed files with 6 additions and 27 deletions

View File

@@ -185,7 +185,6 @@ interface IStorageManager {
long getCacheSizeBytes(String volumeUuid, int uid) = 76;
long getAllocatableBytes(String volumeUuid, int flags, String callingPackage) = 77;
void allocateBytes(String volumeUuid, long bytes, int flags, String callingPackage) = 78;
void secdiscard(in String path) = 79;
void runIdleMaintenance() = 80;
void abortIdleMaintenance() = 81;
void runIdleMaintenance() = 79;
void abortIdleMaintenance() = 80;
}

View File

@@ -50,7 +50,6 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
import android.system.ErrnoException;
import android.system.Os;
@@ -1322,15 +1321,6 @@ public class StorageManager {
}
}
/** {@hide} */
public void secdiscard(String path) {
try {
mStorageManager.secdiscard(path);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/** {@hide} */
public static boolean isUserKeyUnlocked(int userId) {
if (sStorageManager == null) {

View File

@@ -2583,17 +2583,6 @@ class StorageManagerService extends IStorageManager.Stub
}
}
@Override
public void secdiscard(String path) {
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
try {
mVold.secdiscard(path);
} catch (Exception e) {
Slog.wtf(TAG, e);
}
}
class AppFuseMountScope extends AppFuseBridge.MountScope {
boolean opened = false;

View File

@@ -495,10 +495,11 @@ class LockSettingsStorage {
String path = getSynthenticPasswordStateFilePathForUser(userId, handle, name);
File file = new File(path);
if (file.exists()) {
try {
mContext.getSystemService(StorageManager.class).secdiscard(file.getAbsolutePath());
try (RandomAccessFile raf = new RandomAccessFile(path, "rws")) {
final int fileSize = (int) raf.length();
raf.write(new byte[fileSize]);
} catch (Exception e) {
Slog.w(TAG, "Failed to secdiscard " + path, e);
Slog.w(TAG, "Failed to zeroize " + path, e);
} finally {
file.delete();
}