diff options
author | Luca Stefani <luca.stefani.ge1@gmail.com> | 2020-03-07 13:21:46 +0100 |
---|---|---|
committer | Luca Stefani <luca.stefani.ge1@gmail.com> | 2020-03-07 13:21:46 +0100 |
commit | 2d28ba8c7b3ae420e6553a87e9e51e7b80b90e62 (patch) | |
tree | e5688b3b1b8e9c837a2808757d777fa99bebd8d7 | |
parent | 2d3ebd08b7b9c597c0ecc91e2c4a4eb069e8f384 (diff) | |
parent | da1aa328665a6df6e3f637747334df77337f9c35 (diff) | |
download | android_hardware_interfaces-2d28ba8c7b3ae420e6553a87e9e51e7b80b90e62.tar.gz android_hardware_interfaces-2d28ba8c7b3ae420e6553a87e9e51e7b80b90e62.tar.bz2 android_hardware_interfaces-2d28ba8c7b3ae420e6553a87e9e51e7b80b90e62.zip |
Merge tag 'android-10.0.0_r31' into lineage-17.1-android-10.0.0_r31
Android 10.0.0 release 31
* tag 'android-10.0.0_r31':
[AWARE] Protect string copy against buffer overflow
Adding audiocontrol and evs hashes to current.txt
DO NOT MERGE: Audio HAL: do not test input stream if no Built-in mic on primary
VmsUtils: Add new methods to parse availability state messages
default drm hidl: Fix decrypt destination base ptr
Merge "Make gralloc0 pass-through mapper handle layers" am: b756e23e5c am: 6982d1aec5 am: 6c3213c940 am: afc577e108
DO NOT MERGE: audio: Skip tests if audio HAL service lacks "primary" device
DO NOT MERGE Add DISTANCE_DISPLAY_UNIT to google VHAL
Add sensors 1.0 default HAL to uhid group
DO NOT MERGE: Audio VTS: Wait after stream close
DO NOT MERGE: Audio HAL: Add missing device to XSD
Revert "Audio HAL: Add missing device to XSD"
Add sensors 1.0 default HAL to uhid group
Audio HAL: Add missing device to XSD
Change-Id: I053f8a8ebcd5fc42f71a37f99fc605ac0945805a
-rw-r--r-- | automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h | 26 | ||||
-rw-r--r-- | automotive/vehicle/2.0/default/common/src/VmsUtils.cpp | 114 | ||||
-rw-r--r-- | automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h | 7 | ||||
-rw-r--r-- | automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp | 134 | ||||
-rw-r--r-- | current.txt | 8 | ||||
-rw-r--r-- | drm/1.0/default/CryptoPlugin.cpp | 1 | ||||
-rw-r--r-- | sensors/1.0/default/android.hardware.sensors@1.0-service.rc | 2 | ||||
-rw-r--r-- | wifi/1.3/default/hidl_struct_util.cpp | 16 |
8 files changed, 277 insertions, 31 deletions
diff --git a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h index 8ee3c545d..f8b10cacf 100644 --- a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h +++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h @@ -61,7 +61,7 @@ struct VmsLayer { struct VmsLayerAndPublisher { VmsLayerAndPublisher(VmsLayer layer, int publisher_id) - : layer(layer), publisher_id(publisher_id) {} + : layer(std::move(layer)), publisher_id(publisher_id) {} VmsLayer layer; int publisher_id; }; @@ -69,6 +69,8 @@ struct VmsLayerAndPublisher { // A VmsAssociatedLayer is used by subscribers to specify which publisher IDs // are acceptable for a given layer. struct VmsAssociatedLayer { + VmsAssociatedLayer(VmsLayer layer, std::vector<int> publisher_ids) + : layer(std::move(layer)), publisher_ids(std::move(publisher_ids)) {} VmsLayer layer; std::vector<int> publisher_ids; }; @@ -77,7 +79,7 @@ struct VmsAssociatedLayer { // its dependencies. Dependencies can be empty. struct VmsLayerOffering { VmsLayerOffering(VmsLayer layer, std::vector<VmsLayer> dependencies) - : layer(layer), dependencies(dependencies) {} + : layer(std::move(layer)), dependencies(std::move(dependencies)) {} VmsLayerOffering(VmsLayer layer) : layer(layer), dependencies() {} VmsLayer layer; std::vector<VmsLayer> dependencies; @@ -87,7 +89,7 @@ struct VmsLayerOffering { // with the specified publisher ID. struct VmsOffers { VmsOffers(int publisher_id, std::vector<VmsLayerOffering> offerings) - : publisher_id(publisher_id), offerings(offerings) {} + : publisher_id(publisher_id), offerings(std::move(offerings)) {} int publisher_id; std::vector<VmsLayerOffering> offerings; }; @@ -231,6 +233,24 @@ VmsSessionStatus parseStartSessionMessage(const VehiclePropValue& start_session, const int current_service_id, const int current_client_id, int* new_service_id); +// Returns true if the new sequence number of the availability state message is greater than +// the last seen availability sequence number. +bool isAvailabilitySequenceNumberNewer(const VehiclePropValue& availability_state, + const int last_seen_availability_sequence_number); + +// Returns sequence number of the availability state message. +int32_t getSequenceNumberForAvailabilityState(const VehiclePropValue& availability_state); + +// Takes a availability state message and returns the associated layers that are +// available to publish data. +// +// A subscriber can use this function when receiving an availability response or availability +// change message to determine which associated layers are ready to publish data. +// The caller of this function can optionally decide to not consume these layers +// if the availability change has the sequence number less than the last seen +// sequence number. +std::vector<VmsAssociatedLayer> getAvailableLayers(const VehiclePropValue& availability_state); + } // namespace vms } // namespace V2_0 } // namespace vehicle diff --git a/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp b/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp index 9eba90590..a65cded26 100644 --- a/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp +++ b/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp @@ -219,12 +219,9 @@ std::vector<VmsLayer> getSubscribedLayers(const VehiclePropValue& subscriptions_ if (isValidVmsMessage(subscriptions_state) && (parseMessageType(subscriptions_state) == VmsMessageType::SUBSCRIPTIONS_CHANGE || parseMessageType(subscriptions_state) == VmsMessageType::SUBSCRIPTIONS_RESPONSE) && - subscriptions_state.value.int32Values.size() > kSubscriptionStateSequenceNumberIndex) { - const int32_t num_of_layers = subscriptions_state.value.int32Values[toInt( - VmsSubscriptionsStateIntegerValuesIndex::NUMBER_OF_LAYERS)]; - const int32_t num_of_associated_layers = subscriptions_state.value.int32Values[toInt( - VmsSubscriptionsStateIntegerValuesIndex ::NUMBER_OF_ASSOCIATED_LAYERS)]; - + subscriptions_state.value.int32Values.size() > + toInt(VmsSubscriptionsStateIntegerValuesIndex::NUMBER_OF_LAYERS)) { + int subscriptions_state_int_size = subscriptions_state.value.int32Values.size(); std::unordered_set<VmsLayer, VmsLayer::VmsLayerHashFunction> offered_layers; for (const auto& offer : offers.offerings) { offered_layers.insert(offer.layer); @@ -232,33 +229,52 @@ std::vector<VmsLayer> getSubscribedLayers(const VehiclePropValue& subscriptions_ std::vector<VmsLayer> subscribed_layers; int current_index = toInt(VmsSubscriptionsStateIntegerValuesIndex::SUBSCRIPTIONS_START); + // Add all subscribed layers which are offered by the current publisher. + const int32_t num_of_layers = subscriptions_state.value.int32Values[toInt( + VmsSubscriptionsStateIntegerValuesIndex::NUMBER_OF_LAYERS)]; for (int i = 0; i < num_of_layers; i++) { + if (subscriptions_state_int_size < current_index + kLayerSize) { + return {}; + } VmsLayer layer = VmsLayer(subscriptions_state.value.int32Values[current_index], subscriptions_state.value.int32Values[current_index + 1], subscriptions_state.value.int32Values[current_index + 2]); if (offered_layers.find(layer) != offered_layers.end()) { - subscribed_layers.push_back(layer); + subscribed_layers.push_back(std::move(layer)); } current_index += kLayerSize; } + // Add all subscribed associated layers which are offered by the current publisher. // For this, we need to check if the associated layer has a publisher ID which is // same as that of the current publisher. - for (int i = 0; i < num_of_associated_layers; i++) { - VmsLayer layer = VmsLayer(subscriptions_state.value.int32Values[current_index], - subscriptions_state.value.int32Values[current_index + 1], - subscriptions_state.value.int32Values[current_index + 2]); - current_index += kLayerSize; - if (offered_layers.find(layer) != offered_layers.end()) { - int32_t num_of_publisher_ids = subscriptions_state.value.int32Values[current_index]; - current_index++; - for (int j = 0; j < num_of_publisher_ids; j++) { - if (subscriptions_state.value.int32Values[current_index] == - offers.publisher_id) { - subscribed_layers.push_back(layer); - } + if (subscriptions_state_int_size > + toInt(VmsSubscriptionsStateIntegerValuesIndex::NUMBER_OF_ASSOCIATED_LAYERS)) { + const int32_t num_of_associated_layers = subscriptions_state.value.int32Values[toInt( + VmsSubscriptionsStateIntegerValuesIndex::NUMBER_OF_ASSOCIATED_LAYERS)]; + + for (int i = 0; i < num_of_associated_layers; i++) { + if (subscriptions_state_int_size < current_index + kLayerSize) { + return {}; + } + VmsLayer layer = VmsLayer(subscriptions_state.value.int32Values[current_index], + subscriptions_state.value.int32Values[current_index + 1], + subscriptions_state.value.int32Values[current_index + 2]); + current_index += kLayerSize; + if (offered_layers.find(layer) != offered_layers.end() && + subscriptions_state_int_size > current_index) { + int32_t num_of_publisher_ids = + subscriptions_state.value.int32Values[current_index]; current_index++; + for (int j = 0; j < num_of_publisher_ids; j++) { + if (subscriptions_state_int_size > current_index && + subscriptions_state.value.int32Values[current_index] == + offers.publisher_id) { + subscribed_layers.push_back(std::move(layer)); + } + current_index++; + } } } } @@ -300,6 +316,64 @@ VmsSessionStatus parseStartSessionMessage(const VehiclePropValue& start_session, return VmsSessionStatus::kInvalidMessage; } +bool isAvailabilitySequenceNumberNewer(const VehiclePropValue& availability_state, + const int last_seen_availability_sequence_number) { + return (isValidVmsMessage(availability_state) && + (parseMessageType(availability_state) == VmsMessageType::AVAILABILITY_CHANGE || + parseMessageType(availability_state) == VmsMessageType::AVAILABILITY_RESPONSE) && + availability_state.value.int32Values.size() > kAvailabilitySequenceNumberIndex && + availability_state.value.int32Values[kAvailabilitySequenceNumberIndex] > + last_seen_availability_sequence_number); +} + +int32_t getSequenceNumberForAvailabilityState(const VehiclePropValue& availability_state) { + if (isValidVmsMessage(availability_state) && + (parseMessageType(availability_state) == VmsMessageType::AVAILABILITY_CHANGE || + parseMessageType(availability_state) == VmsMessageType::AVAILABILITY_RESPONSE) && + availability_state.value.int32Values.size() > kAvailabilitySequenceNumberIndex) { + return availability_state.value.int32Values[kAvailabilitySequenceNumberIndex]; + } + return -1; +} + +std::vector<VmsAssociatedLayer> getAvailableLayers(const VehiclePropValue& availability_state) { + if (isValidVmsMessage(availability_state) && + (parseMessageType(availability_state) == VmsMessageType::AVAILABILITY_CHANGE || + parseMessageType(availability_state) == VmsMessageType::AVAILABILITY_RESPONSE) && + availability_state.value.int32Values.size() > + toInt(VmsAvailabilityStateIntegerValuesIndex::NUMBER_OF_ASSOCIATED_LAYERS)) { + int availability_state_int_size = availability_state.value.int32Values.size(); + const int32_t num_of_associated_layers = availability_state.value.int32Values[toInt( + VmsAvailabilityStateIntegerValuesIndex::NUMBER_OF_ASSOCIATED_LAYERS)]; + int current_index = toInt(VmsAvailabilityStateIntegerValuesIndex::LAYERS_START); + std::vector<VmsAssociatedLayer> available_layers; + for (int i = 0; i < num_of_associated_layers; i++) { + if (availability_state_int_size < current_index + kLayerSize) { + return {}; + } + VmsLayer layer = VmsLayer(availability_state.value.int32Values[current_index], + availability_state.value.int32Values[current_index + 1], + availability_state.value.int32Values[current_index + 2]); + current_index += kLayerSize; + std::vector<int> publisher_ids; + if (availability_state_int_size > current_index) { + int32_t num_of_publisher_ids = availability_state.value.int32Values[current_index]; + current_index++; + for (int j = 0; j < num_of_publisher_ids; j++) { + if (availability_state_int_size > current_index) { + publisher_ids.push_back( + availability_state.value.int32Values[current_index]); + current_index++; + } + } + } + available_layers.emplace_back(layer, std::move(publisher_ids)); + } + return available_layers; + } + return {}; +} + } // namespace vms } // namespace V2_0 } // namespace vehicle diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h index a46de24b1..77053cfb6 100644 --- a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h +++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h @@ -545,6 +545,13 @@ const ConfigDeclaration kVehicleProperties[]{ .areaConfigs = {VehicleAreaConfig{.areaId = (0)}}}, .initialValue = {.int32Values = {(int)VehicleUnit::FAHRENHEIT}}}, + {.config = {.prop = toInt(VehicleProperty::DISTANCE_DISPLAY_UNITS), + .access = VehiclePropertyAccess::READ_WRITE, + .changeMode = VehiclePropertyChangeMode::ON_CHANGE, + .configArray = {(int)VehicleUnit::KILOMETER, (int)VehicleUnit::MILE}, + .areaConfigs = {VehicleAreaConfig{.areaId = (0)}}}, + .initialValue = {.int32Values = {(int)VehicleUnit::MILE}}}, + {.config = { .prop = toInt(VehicleProperty::NIGHT_MODE), diff --git a/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp b/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp index 8b547f173..a48d19ca5 100644 --- a/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp +++ b/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp @@ -279,7 +279,7 @@ void testSubscribedLayers(VmsMessageType type) { VmsOffers offers = {123, {VmsLayerOffering(VmsLayer(1, 0, 1), {VmsLayer(4, 1, 1)}), VmsLayerOffering(VmsLayer(2, 0, 1))}}; - auto message = createBaseVmsMessage(2); + auto message = createBaseVmsMessage(16); message->value.int32Values = hidl_vec<int32_t>{toInt(type), 1234, // sequence number 2, // number of layers @@ -308,9 +308,28 @@ TEST(VmsUtilsTest, subscribedLayersForResponse) { testSubscribedLayers(VmsMessageType::SUBSCRIPTIONS_RESPONSE); } +void testGetSubscribedLayersMalformedData(VmsMessageType type) { + VmsOffers offers = {123, + {VmsLayerOffering(VmsLayer(1, 0, 1), {VmsLayer(4, 1, 1)}), + VmsLayerOffering(VmsLayer(2, 0, 1))}}; + auto message = createBaseVmsMessage(2); + message->value.int32Values = hidl_vec<int32_t>{toInt(type), 1234}; // sequence number + EXPECT_TRUE(isValidVmsMessage(*message)); + auto result = getSubscribedLayers(*message, offers); + EXPECT_EQ(static_cast<int>(result.size()), 0); +} + +TEST(VmsUtilsTest, subscribedLayersForMalformedChange) { + testGetSubscribedLayersMalformedData(VmsMessageType::SUBSCRIPTIONS_CHANGE); +} + +TEST(VmsUtilsTest, subscribedLayersForMalformedResponse) { + testGetSubscribedLayersMalformedData(VmsMessageType::SUBSCRIPTIONS_RESPONSE); +} + void testSubscribedLayersWithDifferentSubtype(VmsMessageType type) { VmsOffers offers = {123, {VmsLayerOffering(VmsLayer(1, 0, 1))}}; - auto message = createBaseVmsMessage(2); + auto message = createBaseVmsMessage(7); message->value.int32Values = hidl_vec<int32_t>{toInt(type), 1234, // sequence number 1, // number of layers @@ -332,7 +351,7 @@ TEST(VmsUtilsTest, subscribedLayersWithDifferentSubtypeForResponse) { void subscribedLayersWithDifferentVersion(VmsMessageType type) { VmsOffers offers = {123, {VmsLayerOffering(VmsLayer(1, 0, 1))}}; - auto message = createBaseVmsMessage(2); + auto message = createBaseVmsMessage(7); message->value.int32Values = hidl_vec<int32_t>{toInt(type), 1234, // sequence number 1, // number of layers @@ -353,7 +372,7 @@ TEST(VmsUtilsTest, subscribedLayersWithDifferentVersionForResponse) { void subscribedLayersWithDifferentPublisherId(VmsMessageType type) { VmsOffers offers = {123, {VmsLayerOffering(VmsLayer(1, 0, 1))}}; - auto message = createBaseVmsMessage(2); + auto message = createBaseVmsMessage(9); message->value.int32Values = hidl_vec<int32_t>{toInt(type), 1234, // sequence number 0, // number of layers @@ -475,6 +494,113 @@ TEST(VmsUtilsTest, startSessionInvalidMessageFormat) { EXPECT_EQ(new_service_id, 123); } +TEST(VmsUtilsTest, newAvailabilitySequenceNumberForExistingSmallerNumberForChange) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_CHANGE), 1234}; + EXPECT_TRUE(isAvailabilitySequenceNumberNewer(*message, 1233)); +} + +TEST(VmsUtilsTest, newAvailabilitySequenceNumberForExistingSmallerNumberForResponse) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_RESPONSE), 1234}; + EXPECT_TRUE(isAvailabilitySequenceNumberNewer(*message, 1233)); +} + +TEST(VmsUtilsTest, newAvailabilitySequenceNumberForExistingGreaterNumberForChange) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_CHANGE), 1234}; + EXPECT_FALSE(isAvailabilitySequenceNumberNewer(*message, 1235)); +} + +TEST(VmsUtilsTest, newAvailabilitySequenceNumberForExistingGreaterNumberForResponse) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_RESPONSE), 1234}; + EXPECT_FALSE(isAvailabilitySequenceNumberNewer(*message, 1235)); +} + +TEST(VmsUtilsTest, newAvailabilitySequenceNumberForSameNumberForChange) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_CHANGE), 1234}; + EXPECT_FALSE(isAvailabilitySequenceNumberNewer(*message, 1234)); +} + +TEST(VmsUtilsTest, newAvailabilitySequenceNumberForSameNumberForResponse) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_RESPONSE), 1234}; + EXPECT_FALSE(isAvailabilitySequenceNumberNewer(*message, 1234)); +} + +TEST(VmsUtilsTest, validSequenceNumberForAvailabilityChange) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_CHANGE), 1234}; + EXPECT_EQ(getSequenceNumberForAvailabilityState(*message), 1234); +} + +TEST(VmsUtilsTest, validSequenceNumberForAvailabilityResponse) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = + hidl_vec<int32_t>{toInt(VmsMessageType::AVAILABILITY_RESPONSE), 1234}; + EXPECT_EQ(getSequenceNumberForAvailabilityState(*message), 1234); +} + +TEST(VmsUtilsTest, invalidAvailabilityState) { + auto message = createBaseVmsMessage(1); + EXPECT_EQ(getSequenceNumberForAvailabilityState(*message), -1); +} + +void testGetAvailableLayers(VmsMessageType type) { + auto message = createBaseVmsMessage(13); + message->value.int32Values = hidl_vec<int32_t>{toInt(type), + 1234, // sequence number + 2, // number of associated layers + 1, // associated layer 1 + 0, 1, + 2, // number of publisher IDs + 111, // publisher IDs + 123, + 2, // associated layer 2 + 0, 1, 0}; // number of publisher IDs + EXPECT_TRUE(isValidVmsMessage(*message)); + auto result = getAvailableLayers(*message); + EXPECT_EQ(static_cast<int>(result.size()), 2); + EXPECT_EQ(result.at(0).layer, VmsLayer(1, 0, 1)); + EXPECT_EQ(result.at(0).publisher_ids.at(0), 111); + EXPECT_EQ(result.at(0).publisher_ids.at(1), 123); + EXPECT_EQ(result.at(1).layer, VmsLayer(2, 0, 1)); + EXPECT_EQ(static_cast<int>(result.at(1).publisher_ids.size()), 0); +} + +TEST(VmsUtilsTest, availableLayersForChange) { + testGetAvailableLayers(VmsMessageType::AVAILABILITY_CHANGE); +} + +TEST(VmsUtilsTest, availableLayersForResponse) { + testGetAvailableLayers(VmsMessageType::AVAILABILITY_RESPONSE); +} + +void testGetAvailableLayersMalformedData(VmsMessageType type) { + auto message = createBaseVmsMessage(2); + message->value.int32Values = hidl_vec<int32_t>{toInt(type), 1234}; // sequence number + EXPECT_TRUE(isValidVmsMessage(*message)); + auto result = getAvailableLayers(*message); + EXPECT_EQ(static_cast<int>(result.size()), 0); +} + +TEST(VmsUtilsTest, availableLayersForMalformedChange) { + testGetAvailableLayersMalformedData(VmsMessageType::AVAILABILITY_CHANGE); +} + +TEST(VmsUtilsTest, availableLayersForMalformedResponse) { + testGetAvailableLayersMalformedData(VmsMessageType::AVAILABILITY_RESPONSE); +} + } // namespace } // namespace vms diff --git a/current.txt b/current.txt index 47e7d721c..221ca2090 100644 --- a/current.txt +++ b/current.txt @@ -298,7 +298,13 @@ a91b547f5922f39fe4231d97fac1c3825c1c1b0c8ef7a5136689ceed37e8bfe9 android.hardwar 3661fa0623056922fdc4235ac5a9c91a2d066ab6f1ab4297e3b240fe302ba500 android.hardware.audio.effect@4.0::IPresetReverbEffect e88e520f8c98a62fccd8d5316c6687808f775de145d1405a7a9a66587ee6a001 android.hardware.audio.effect@4.0::IVirtualizerEffect fe28829dab10d171783b79ac9cc45412739f8ff275e90228d7c6370ef189b859 android.hardware.audio.effect@4.0::IVisualizerEffect -21c8a702579356480236c6851b5b2c16b9bd369ce12bdd6ffdc4626a89f34f73 android.hardware.audio.effect@4.0::types +21c8a702579356480236c6851b5b2c16b9bd369ce12bdd6ffdc4626a89f34f73 android.hardware.audio.effect@4.0::types +a0f93c768c353cecee6237fe479bce47404eb10b629fafe07e32a054fd67f2af android.hardware.automotive.audiocontrol@1.0::IAudioControl +f2904a4c108ad1b93eb2fa4e43b82bd01ce1ff26156316e49d1d9fc80dfecaad android.hardware.automotive.evs@1.0::IEvsCamera +94cba6ad04c83aa840de2ed52b74ba2126a26dd960225e61ac36703315279a80 android.hardware.automotive.evs@1.0::IEvsCameraStream +5ea36fb043d9e3b413219de3dfd7b046b48af4fda39f167f3528652e986cb76d android.hardware.automotive.evs@1.0::IEvsDisplay +b15c5d8f28be4f0469c11d184ebca616895f109d553a6c31018789d8c1bc0ac5 android.hardware.automotive.evs@1.0::IEvsEnumerator +3b17c1fdfc389e0abe626c37054954b07201127d890c2bc05d47613ec1f4de4f android.hardware.automotive.evs@1.0::types 42a06dc288f61b0690580f3d37b30b663c31d74d50bb58d0772386b550d5faab android.hardware.authsecret@1.0::IAuthSecret 32cc50cc2a7658ec613c0c2dd2accbf6a05113b749852879e818b8b7b438db19 android.hardware.bluetooth.a2dp@1.0::IBluetoothAudioHost ff4be64d7992f8bec97dff37f35450e79b3430c61f85f54322ce45bef229dc3b android.hardware.bluetooth.a2dp@1.0::IBluetoothAudioOffload diff --git a/drm/1.0/default/CryptoPlugin.cpp b/drm/1.0/default/CryptoPlugin.cpp index 8ddc38022..2db360765 100644 --- a/drm/1.0/default/CryptoPlugin.cpp +++ b/drm/1.0/default/CryptoPlugin.cpp @@ -152,6 +152,7 @@ namespace implementation { return Void(); } + base = static_cast<uint8_t *>(static_cast<void *>(destBase->getPointer())); destPtr = static_cast<void *>(base + destination.nonsecureMemory.offset); } else if (destination.type == BufferType::NATIVE_HANDLE) { if (!secure) { diff --git a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc index b54842d66..db340af5c 100644 --- a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc +++ b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc @@ -1,6 +1,6 @@ service vendor.sensors-hal-1-0 /vendor/bin/hw/android.hardware.sensors@1.0-service class hal user system - group system wakelock + group system wakelock uhid capabilities BLOCK_SUSPEND rlimit rtprio 10 10 diff --git a/wifi/1.3/default/hidl_struct_util.cpp b/wifi/1.3/default/hidl_struct_util.cpp index 2e4db7048..d305c0997 100644 --- a/wifi/1.3/default/hidl_struct_util.cpp +++ b/wifi/1.3/default/hidl_struct_util.cpp @@ -1819,7 +1819,13 @@ bool convertHidlNanDataPathInitiatorRequestToLegacy( convertHidlNanDataPathChannelCfgToLegacy( hidl_request.channelRequestType); legacy_request->channel = hidl_request.channel; - strcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str()); + if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) { + LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " + "ifaceName too long"; + return false; + } + strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), + IFNAMSIZ + 1); legacy_request->ndp_cfg.security_cfg = (hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN) @@ -1900,7 +1906,13 @@ bool convertHidlNanDataPathIndicationResponseToLegacy( ? legacy_hal::NAN_DP_REQUEST_ACCEPT : legacy_hal::NAN_DP_REQUEST_REJECT; legacy_request->ndp_instance_id = hidl_request.ndpInstanceId; - strcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str()); + if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) { + LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " + "ifaceName too long"; + return false; + } + strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), + IFNAMSIZ + 1); legacy_request->ndp_cfg.security_cfg = (hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN) |