summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-02-11 03:36:42 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-02-11 03:36:42 +0000
commit90de20218ce8aa3d59dba48d6cf513c6abc8b478 (patch)
treeda7ce4f5ed1a0f8b9f7a57a0882c6ac103da6d05
parent97825cde7bf3537dc2110178492d0bc19cd975e5 (diff)
parent78adc89fcd01cbefee342aba65db35a662a5bccc (diff)
downloadgatekeeper-90de20218ce8aa3d59dba48d6cf513c6abc8b478.tar.gz
Merge "Appease UB sanitizer on reading gatekeeper error codes." am: f1473a3ae3 am: 78adc89fcd
Original change: https://android-review.googlesource.com/c/platform/system/gatekeeper/+/1553309 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: If26fd608c38fface90f13533153876f18c715d83
-rw-r--r--gatekeeper_messages.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/gatekeeper_messages.cpp b/gatekeeper_messages.cpp
index 01f2f8c..3b78664 100644
--- a/gatekeeper_messages.cpp
+++ b/gatekeeper_messages.cpp
@@ -50,6 +50,22 @@ static inline void append_to_buffer(uint8_t **buffer, const SizedBuffer &to_appe
}
}
+static inline gatekeeper_error_t readError(uint32_t code) {
+ switch (code) {
+ case ERROR_NONE:
+ return ERROR_NONE;
+ case ERROR_INVALID:
+ return ERROR_INVALID;
+ case ERROR_RETRY:
+ return ERROR_RETRY;
+ case ERROR_MEMORY_ALLOCATION_FAILED:
+ return ERROR_MEMORY_ALLOCATION_FAILED;
+ case ERROR_UNKNOWN:
+ default:
+ return ERROR_UNKNOWN;
+ }
+}
+
static inline gatekeeper_error_t read_from_buffer(const uint8_t **buffer, const uint8_t *end,
SizedBuffer *target) {
if (target == nullptr) return ERROR_INVALID;
@@ -119,7 +135,7 @@ uint32_t GateKeeperMessage::Serialize(uint8_t *buffer, const uint8_t *end) const
gatekeeper_error_t GateKeeperMessage::Deserialize(const uint8_t *payload, const uint8_t *end) {
if (!fitsBuffer(payload, end, sizeof(serial_header_t))) return ERROR_INVALID;
const serial_header_t *header = reinterpret_cast<const serial_header_t *>(payload);
- error = static_cast<gatekeeper_error_t>(header->error);
+ error = readError(header->error);
user_id = header->user_id;
payload += sizeof(*header);
if (error == ERROR_NONE) {