diff --git a/base/include/android-base/memory.h b/base/include/android-base/memory.h index 3a2f8fad6..997122623 100644 --- a/base/include/android-base/memory.h +++ b/base/include/android-base/memory.h @@ -20,25 +20,19 @@ namespace android { namespace base { -// Use packed structures for access to unaligned data on targets with alignment +// Use memcpy for access to unaligned data on targets with alignment // restrictions. The compiler will generate appropriate code to access these // structures without generating alignment exceptions. template -static inline T get_unaligned(const T* address) { - struct unaligned { - T v; - } __attribute__((packed)); - const unaligned* p = reinterpret_cast(address); - return p->v; +static inline T get_unaligned(const void* address) { + T result; + memcpy(&result, address, sizeof(T)); + return result; } template -static inline void put_unaligned(T* address, T v) { - struct unaligned { - T v; - } __attribute__((packed)); - unaligned* p = reinterpret_cast(address); - p->v = v; +static inline void put_unaligned(void* address, T v) { + memcpy(address, &v, sizeof(T)); } } // namespace base diff --git a/gatekeeperd/SoftGateKeeper.h b/gatekeeperd/SoftGateKeeper.h index 8b15d72e2..cb02a6fc6 100644 --- a/gatekeeperd/SoftGateKeeper.h +++ b/gatekeeperd/SoftGateKeeper.h @@ -152,7 +152,7 @@ public: } bool DoVerify(const password_handle_t *expected_handle, const SizedBuffer &password) { - uint64_t user_id = android::base::get_unaligned(&expected_handle->user_id); + uint64_t user_id = android::base::get_unaligned(&expected_handle->user_id); FastHashMap::const_iterator it = fast_hash_map_.find(user_id); if (it != fast_hash_map_.end() && VerifyFast(it->second, password)) { return true;