diff options
author | 2020-04-17 23:13:47 -0700 | |
---|---|---|
committer | 2020-04-22 00:49:02 -0700 | |
commit | 629051fd6541e9e4378043d1132dcf98c9ca7726 (patch) | |
tree | cd566e00fdb6cdfeba4d8147b59c41796484d62c /services/incremental/IncrementalServiceValidation.h | |
parent | 360bbdc7203c851288d8e09d2eee2829975b210f (diff) |
[incfs] Use MountRegistry to import existing mounts on start
This is a big cleanup in IncrementalService that makes it behave
nicely on runtime restart, and more:
- fixed a bunch of threading issues in createStorage/bind
- made public functions correctly accept any path in any
bind mount and translate it to the proper root mount
- got rid of "using namespace" in headers, cleaned includes
- removed all unused functions
- set CLOEXEC bit on all duped FDs
Bug: 151241369
Test: atest PackageManagerShellCommandTest \
PackageManagerShellCommandIncrementalTest \
IncrementalServiceTest
Change-Id: Ided4415aabfbfca3925b5e71c91896055886ac4a
Diffstat (limited to 'services/incremental/IncrementalServiceValidation.h')
-rw-r--r-- | services/incremental/IncrementalServiceValidation.h | 60 |
1 files changed, 8 insertions, 52 deletions
diff --git a/services/incremental/IncrementalServiceValidation.h b/services/incremental/IncrementalServiceValidation.h index 48894c6926c8..0e50c4db29f4 100644 --- a/services/incremental/IncrementalServiceValidation.h +++ b/services/incremental/IncrementalServiceValidation.h @@ -16,61 +16,17 @@ #pragma once -#include <android-base/stringprintf.h> -#include <binder/IPCThreadState.h> -#include <binder/PermissionCache.h> -#include <binder/PermissionController.h> #include <binder/Status.h> +#include <stdint.h> -namespace android::incremental { - -inline binder::Status Ok() { - return binder::Status::ok(); -} - -inline binder::Status Exception(uint32_t code, const std::string& msg) { - return binder::Status::fromExceptionCode(code, String8(msg.c_str())); -} - -inline int fromBinderStatus(const binder::Status& status) { - return status.exceptionCode() == binder::Status::EX_SERVICE_SPECIFIC - ? status.serviceSpecificErrorCode() > 0 ? -status.serviceSpecificErrorCode() - : status.serviceSpecificErrorCode() == 0 - ? -EFAULT - : status.serviceSpecificErrorCode() - : -EIO; -} +#include <string> -inline binder::Status CheckPermissionForDataDelivery(const char* permission, const char* operation, - const char* package) { - using android::base::StringPrintf; - - int32_t pid; - int32_t uid; - - if (!PermissionCache::checkCallingPermission(String16(permission), &pid, &uid)) { - return Exception(binder::Status::EX_SECURITY, - StringPrintf("UID %d / PID %d lacks permission %s", uid, pid, permission)); - } - - String16 packageName{package}; +namespace android::incremental { - // Caller must also have op granted. - PermissionController pc; - if (auto packageUid = pc.getPackageUid(packageName, 0); packageUid != uid) { - return Exception(binder::Status::EX_SECURITY, - StringPrintf("UID %d / PID %d does not own package %s", uid, pid, - package)); - } - switch (auto result = pc.noteOp(String16(operation), uid, packageName); result) { - case PermissionController::MODE_ALLOWED: - case PermissionController::MODE_DEFAULT: - return binder::Status::ok(); - default: - return Exception(binder::Status::EX_SECURITY, - StringPrintf("UID %d / PID %d / package %s lacks app-op %s, error %d", - uid, pid, package, operation, result)); - } -} +binder::Status Ok(); +binder::Status Exception(uint32_t code, const std::string& msg); +int fromBinderStatus(const binder::Status& status); +binder::Status CheckPermissionForDataDelivery(const char* permission, const char* operation, + const char* package); } // namespace android::incremental |