Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b18d629 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Avoid string allocations when checking for permissions" into main

parents f9f919a6 01b92c78
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -23,31 +23,31 @@
#include <gui/LayerState.h>

namespace android {
std::unordered_map<std::string, int> LayerStatePermissions::mPermissionMap = {
std::vector<std::pair<String16, int>> LayerStatePermissions::mPermissionMap = {
        // If caller has ACCESS_SURFACE_FLINGER, they automatically get ROTATE_SURFACE_FLINGER
        // permission, as well
        {"android.permission.ACCESS_SURFACE_FLINGER",
        {String16("android.permission.ACCESS_SURFACE_FLINGER"),
         layer_state_t::Permission::ACCESS_SURFACE_FLINGER |
                 layer_state_t::Permission::ROTATE_SURFACE_FLINGER},
        {"android.permission.ROTATE_SURFACE_FLINGER",
        {String16("android.permission.ROTATE_SURFACE_FLINGER"),
         layer_state_t::Permission::ROTATE_SURFACE_FLINGER},
        {"android.permission.INTERNAL_SYSTEM_WINDOW",
        {String16("android.permission.INTERNAL_SYSTEM_WINDOW"),
         layer_state_t::Permission::INTERNAL_SYSTEM_WINDOW},
};

static bool callingThreadHasPermission(const std::string& permission __attribute__((unused)),
static bool callingThreadHasPermission(const String16& permission __attribute__((unused)),
                                       int pid __attribute__((unused)),
                                       int uid __attribute__((unused))) {
#ifndef __ANDROID_VNDK__
    return uid == AID_GRAPHICS || uid == AID_SYSTEM ||
            PermissionCache::checkPermission(String16(permission.c_str()), pid, uid);
            PermissionCache::checkPermission(permission, pid, uid);
#endif // __ANDROID_VNDK__
    return false;
}

uint32_t LayerStatePermissions::getTransactionPermissions(int pid, int uid) {
    uint32_t permissions = 0;
    for (auto [permissionName, permissionVal] : mPermissionMap) {
    for (const auto& [permissionName, permissionVal] : mPermissionMap) {
        if (callingThreadHasPermission(permissionName, pid, uid)) {
            permissions |= permissionVal;
        }
+3 −4
Original line number Diff line number Diff line
@@ -15,15 +15,14 @@
 */

#include <stdint.h>
#include <string>
#include <unordered_map>

#include <utils/String16.h>
#include <vector>
namespace android {
class LayerStatePermissions {
public:
    static uint32_t getTransactionPermissions(int pid, int uid);

private:
    static std::unordered_map<std::string, int> mPermissionMap;
    static std::vector<std::pair<String16, int>> mPermissionMap;
};
} // namespace android
 No newline at end of file