diff --git a/trusty/coverage/Android.bp b/trusty/coverage/Android.bp index c71d5991b..0453f3f51 100644 --- a/trusty/coverage/Android.bp +++ b/trusty/coverage/Android.bp @@ -21,12 +21,14 @@ cc_library { vendor_available: true, srcs: [ "coverage.cpp", + "uuid.cpp", ], export_include_dirs: [ "include", ], shared_libs: [ "libbase", + "libext2_uuid", "liblog", "libdmabufheap", "libtrusty", diff --git a/trusty/coverage/include/trusty/coverage/tipc.h b/trusty/coverage/include/trusty/coverage/tipc.h index c4157c4d6..386b2bb63 100644 --- a/trusty/coverage/include/trusty/coverage/tipc.h +++ b/trusty/coverage/include/trusty/coverage/tipc.h @@ -19,16 +19,10 @@ #pragma once #include +#include #define COVERAGE_CLIENT_PORT "com.android.trusty.coverage.client" -struct uuid { - uint32_t time_low; - uint16_t time_mid; - uint16_t time_hi_and_version; - uint8_t clock_seq_and_node[8]; -}; - enum coverage_client_cmd { COVERAGE_CLIENT_CMD_RESP_BIT = 1U, COVERAGE_CLIENT_CMD_SHIFT = 1U, diff --git a/trusty/coverage/include/trusty/coverage/uuid.h b/trusty/coverage/include/trusty/coverage/uuid.h new file mode 100644 index 000000000..c77d27508 --- /dev/null +++ b/trusty/coverage/include/trusty/coverage/uuid.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +struct uuid { + uint32_t time_low; + uint16_t time_mid; + uint16_t time_hi_and_version; + uint8_t clock_seq_and_node[8]; +}; + +/** + * str_to_uuid() - Converts a C string into a uuid + * @str: C-string representation of the uuid + * @uuid: &struct uuid to fill with the converted uuid + * + * Return: true on success, false otherwise + */ +bool str_to_uuid(const char* str, struct uuid* uuid); diff --git a/trusty/coverage/uuid.cpp b/trusty/coverage/uuid.cpp new file mode 100644 index 000000000..f0a6c0ea7 --- /dev/null +++ b/trusty/coverage/uuid.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 The Android Open Sourete Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include + +static uint16_t reverse_u16(uint16_t u) { + return u << 8 | u >> 8; +} + +static uint32_t reverse_u32(uint32_t u) { + return reverse_u16((uint16_t)u) << 16 | reverse_u16(u >> 16); +} + +bool str_to_uuid(const char* str, struct uuid* uuid) { + uuid_t uu; + static_assert(sizeof(uu) == sizeof(*uuid)); + + if (uuid_parse(str, uu)) { + return false; + } + + memcpy(uuid, uu, sizeof(*uuid)); + uuid->time_low = reverse_u32(uuid->time_low); + uuid->time_mid = reverse_u16(uuid->time_mid); + uuid->time_hi_and_version = reverse_u16(uuid->time_hi_and_version); + return true; +}