Fix bufferhubd crash in buffer_hub-test
Add some null and valid check in constructors to prevent bufferhubd from
crash when user enter invalid params.
Test: "atest frameworks/native/libs/vr/libbufferhub/buffer_hub-test.cpp#TestCreateBufferHubBufferFails"
and check "adb logcat | grep bufferhub"
No crashing reports.
atest buffer_hub-test: passed
Fix: 118624156
Change-Id: I56e83808f38ab146f1fc61d1b736dd0be640503d
diff --git a/services/vr/bufferhubd/buffer_channel.cpp b/services/vr/bufferhubd/buffer_channel.cpp
index d5e6dfb..bccfe67 100644
--- a/services/vr/bufferhubd/buffer_channel.cpp
+++ b/services/vr/bufferhubd/buffer_channel.cpp
@@ -25,9 +25,13 @@
uint32_t width, uint32_t height,
uint32_t layer_count, uint32_t format,
uint64_t usage, size_t user_metadata_size)
- : BufferHubChannel(service, buffer_id, buffer_id, kDetachedBufferType),
- buffer_node_(std::make_shared<BufferNode>(
- width, height, layer_count, format, usage, user_metadata_size)) {
+ : BufferHubChannel(service, buffer_id, buffer_id, kDetachedBufferType) {
+ buffer_node_ = std::make_shared<BufferNode>(
+ width, height, layer_count, format, usage, user_metadata_size);
+ if (!buffer_node_->IsValid()) {
+ ALOGE("BufferChannel::BufferChannel: Failed to create BufferNode.");
+ return;
+ }
client_state_mask_ = buffer_node_->AddNewActiveClientsBitToMask();
}
diff --git a/services/vr/bufferhubd/buffer_node.cpp b/services/vr/bufferhubd/buffer_node.cpp
index f8ec59d..e74a21f 100644
--- a/services/vr/bufferhubd/buffer_node.cpp
+++ b/services/vr/bufferhubd/buffer_node.cpp
@@ -34,6 +34,10 @@
}
metadata_ = BufferHubMetadata::Create(user_metadata_size);
+ if (!metadata_.IsValid()) {
+ ALOGE("BufferNode::BufferNode: Failed to allocate metadata.");
+ return;
+ }
InitializeMetadata();
}