Checking LOADER_USAGE_STATS before enabling read logs.
Bug: b/152633648 Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest Change-Id: I29bf16d06a013566c8dd08e64be2a23ad805e37d
This commit is contained in:
parent
87bf96a60e
commit
91e0bf4998
3 changed files with 29 additions and 1 deletions
|
@ -53,6 +53,7 @@ namespace vold {
|
|||
namespace {
|
||||
|
||||
constexpr const char* kDump = "android.permission.DUMP";
|
||||
constexpr const char* kDataUsageStats = "android.permission.LOADER_USAGE_STATS";
|
||||
|
||||
static binder::Status error(const std::string& msg) {
|
||||
PLOG(ERROR) << msg;
|
||||
|
@ -893,7 +894,8 @@ binder::Status VoldNativeService::mountIncFs(
|
|||
auto control = IncFs_Mount(backingPath.c_str(), targetDir.c_str(),
|
||||
{.flags = IncFsMountFlags(flags),
|
||||
.defaultReadTimeoutMs = INCFS_DEFAULT_READ_TIMEOUT_MS,
|
||||
.readLogBufferPages = 4});
|
||||
// Mount with read logs disabled.
|
||||
.readLogBufferPages = 0});
|
||||
if (control == nullptr) {
|
||||
return translate(-1);
|
||||
}
|
||||
|
@ -915,6 +917,28 @@ binder::Status VoldNativeService::unmountIncFs(const std::string& dir) {
|
|||
return translate(IncFs_Unmount(dir.c_str()));
|
||||
}
|
||||
|
||||
binder::Status VoldNativeService::setIncFsMountOptions(
|
||||
const ::android::os::incremental::IncrementalFileSystemControlParcel& control,
|
||||
bool enableReadLogs) {
|
||||
auto status = CheckPermission(kDataUsageStats);
|
||||
if (!status.isOk()) {
|
||||
return status;
|
||||
}
|
||||
|
||||
auto incfsControl = IncFs_CreateControl(dup(control.cmd.get()), dup(control.pendingReads.get()),
|
||||
dup(control.log.get()));
|
||||
if (auto error = IncFs_SetOptions(
|
||||
incfsControl,
|
||||
{.defaultReadTimeoutMs = INCFS_DEFAULT_READ_TIMEOUT_MS,
|
||||
.readLogBufferPages = enableReadLogs ? INCFS_DEFAULT_PAGE_READ_BUFFER_PAGES : 0});
|
||||
error < 0) {
|
||||
status = binder::Status::fromServiceSpecificError(error);
|
||||
}
|
||||
IncFs_DeleteControl(incfsControl);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
binder::Status VoldNativeService::bindMount(const std::string& sourceDir,
|
||||
const std::string& targetDir) {
|
||||
ENFORCE_SYSTEM_OR_ROOT;
|
||||
|
|
|
@ -154,6 +154,9 @@ class VoldNativeService : public BinderService<VoldNativeService>, public os::Bn
|
|||
const std::string& backingPath, const std::string& targetDir, int32_t flags,
|
||||
::android::os::incremental::IncrementalFileSystemControlParcel* _aidl_return) override;
|
||||
binder::Status unmountIncFs(const std::string& dir) override;
|
||||
binder::Status setIncFsMountOptions(
|
||||
const ::android::os::incremental::IncrementalFileSystemControlParcel& control,
|
||||
bool enableReadLogs) override;
|
||||
binder::Status bindMount(const std::string& sourceDir, const std::string& targetDir) override;
|
||||
};
|
||||
|
||||
|
|
|
@ -135,6 +135,7 @@ interface IVold {
|
|||
boolean incFsEnabled();
|
||||
IncrementalFileSystemControlParcel mountIncFs(@utf8InCpp String backingPath, @utf8InCpp String targetDir, int flags);
|
||||
void unmountIncFs(@utf8InCpp String dir);
|
||||
void setIncFsMountOptions(in IncrementalFileSystemControlParcel control, boolean enableReadLogs);
|
||||
void bindMount(@utf8InCpp String sourceDir, @utf8InCpp String targetDir);
|
||||
|
||||
const int ENCRYPTION_FLAG_NO_UI = 4;
|
||||
|
|
Loading…
Reference in a new issue