diff options
author | Andres Morales <anmorales@google.com> | 2015-07-09 16:01:24 -0700 |
---|---|---|
committer | Andres Morales <anmorales@google.com> | 2015-07-09 23:26:44 +0000 |
commit | 3439f41abffaa117469f9fe4023d65fc1b6d01e4 (patch) | |
tree | 68599a3e707fae9f9a147ab7e89cf1cf713adcc5 /gatekeeperd | |
parent | bf94f03d0fda3361866640ec5550250954da0561 (diff) | |
download | system_core-3439f41abffaa117469f9fe4023d65fc1b6d01e4.tar.gz system_core-3439f41abffaa117469f9fe4023d65fc1b6d01e4.tar.bz2 system_core-3439f41abffaa117469f9fe4023d65fc1b6d01e4.zip |
[gatekeeperd] copy uid to local before passing to u_map
The compiler will issue the unaligned access instuctions
when reading from a packed struct. Since 'find' takes a
reference, if we pass the field directly it is removed
from its packed context and may be unreadable.
Read the field out directly from the packed struct and pass
in aligned to u_map to fix.
Bug: 22367550
Change-Id: Ia3b639c7518154ff5a2b7c233b752e154eab9aad
Diffstat (limited to 'gatekeeperd')
-rw-r--r-- | gatekeeperd/SoftGateKeeper.h | 5 | ||||
-rw-r--r-- | gatekeeperd/tests/Android.mk | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/gatekeeperd/SoftGateKeeper.h b/gatekeeperd/SoftGateKeeper.h index 75fe11dc1..bb25c81fc 100644 --- a/gatekeeperd/SoftGateKeeper.h +++ b/gatekeeperd/SoftGateKeeper.h @@ -25,8 +25,10 @@ extern "C" { #include <crypto_scrypt.h> } +#include <base/memory.h> #include <UniquePtr.h> #include <gatekeeper/gatekeeper.h> + #include <iostream> #include <unordered_map> @@ -150,7 +152,8 @@ public: } bool DoVerify(const password_handle_t *expected_handle, const SizedBuffer &password) { - FastHashMap::const_iterator it = fast_hash_map_.find(expected_handle->user_id); + FastHashMap::const_iterator it = fast_hash_map_.find( + android::base::get_unaligned(&expected_handle->user_id)); if (it != fast_hash_map_.end() && VerifyFast(it->second, password)) { return true; } else { diff --git a/gatekeeperd/tests/Android.mk b/gatekeeperd/tests/Android.mk index 6fc4ac075..a62b1d424 100644 --- a/gatekeeperd/tests/Android.mk +++ b/gatekeeperd/tests/Android.mk @@ -20,7 +20,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := gatekeeperd-unit-tests LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_CFLAGS += -g -Wall -Werror -std=gnu++11 -Wno-missing-field-initializers -LOCAL_SHARED_LIBRARIES := libgatekeeper libcrypto +LOCAL_SHARED_LIBRARIES := libgatekeeper libcrypto libbase LOCAL_STATIC_LIBRARIES := libscrypt_static LOCAL_C_INCLUDES := external/scrypt/lib/crypto LOCAL_SRC_FILES := \ |