audiohal: Fix handling of invalid arguments in 'debugDump' methods
Add checks for validity of the passed in native handle.
Bug: 37590777
Change-Id: If906f0086c3442819e1844cc521215d5b74af015
Test: VTS
diff --git a/audio/2.0/default/Device.cpp b/audio/2.0/default/Device.cpp
index 9a4aff6..b696d94 100644
--- a/audio/2.0/default/Device.cpp
+++ b/audio/2.0/default/Device.cpp
@@ -292,7 +292,7 @@
}
Return<void> Device::debugDump(const hidl_handle& fd) {
- if (fd->numFds == 1) {
+ if (fd.getNativeHandle() != nullptr && fd->numFds == 1) {
analyzeStatus("dump", mDevice->dump(mDevice, fd->data[0]));
}
return Void();
diff --git a/audio/2.0/default/Stream.cpp b/audio/2.0/default/Stream.cpp
index 29946fe..671f171 100644
--- a/audio/2.0/default/Stream.cpp
+++ b/audio/2.0/default/Stream.cpp
@@ -226,7 +226,7 @@
}
Return<void> Stream::debugDump(const hidl_handle& fd) {
- if (fd->numFds == 1) {
+ if (fd.getNativeHandle() != nullptr && fd->numFds == 1) {
analyzeStatus("dump", mStream->dump(mStream, fd->data[0]));
}
return Void();
diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
index 4b00f35..711a8d9 100644
--- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
+++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
@@ -498,6 +498,11 @@
testDebugDump([this](const auto& handle){ return device->debugDump(handle); });
}
+TEST_F(AudioPrimaryHidlTest, debugDumpInvalidArguments) {
+ doc::test("Check that the hal dump doesn't crash on invalid arguments");
+ ASSERT_OK(device->debugDump(hidl_handle()));
+}
+
//////////////////////////////////////////////////////////////////////////////
////////////////////////// open{Output,Input}Stream //////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -809,6 +814,10 @@
"Check that a stream can dump its state without error",
testDebugDump([this](const auto& handle){ return stream->debugDump(handle); }))
+TEST_IO_STREAM(DebugDumpInvalidArguments,
+ "Check that the stream dump doesn't crash on invalid arguments",
+ ASSERT_OK(stream->debugDump(hidl_handle())))
+
//////////////////////////////////////////////////////////////////////////////
////////////////////////////// addRemoveEffect ///////////////////////////////
//////////////////////////////////////////////////////////////////////////////
diff --git a/audio/effect/2.0/default/EffectsFactory.cpp b/audio/effect/2.0/default/EffectsFactory.cpp
index 08d92bd..922a922 100644
--- a/audio/effect/2.0/default/EffectsFactory.cpp
+++ b/audio/effect/2.0/default/EffectsFactory.cpp
@@ -186,7 +186,7 @@
}
Return<void> EffectsFactory::debugDump(const hidl_handle& fd) {
- if (fd->numFds == 1) {
+ if (fd.getNativeHandle() != nullptr && fd->numFds == 1) {
EffectDumpEffects(fd->data[0]);
}
return Void();
diff --git a/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp b/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
index 15a564a..18e9862 100644
--- a/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
+++ b/audio/effect/2.0/vts/functional/VtsHalAudioEffectV2_0TargetTest.cpp
@@ -47,6 +47,7 @@
using android::hardware::MQDescriptorSync;
using android::hardware::Return;
using android::hardware::Void;
+using android::hardware::hidl_handle;
using android::hardware::hidl_memory;
using android::hardware::hidl_string;
using android::hardware::hidl_vec;
@@ -142,6 +143,12 @@
EXPECT_TRUE(ret.isOk());
}
+TEST_F(AudioEffectsFactoryHidlTest, DebugDumpInvalidArgument) {
+ description("Verify that debugDump doesn't crash on invalid arguments");
+ Return<void> ret = effectsFactory->debugDump(hidl_handle());
+ ASSERT_TRUE(ret.isOk());
+}
+
// Equalizer effect is required by CDD, but only the type is fixed.
// This is the same UUID as AudioEffect.EFFECT_TYPE_EQUALIZER in Java.
static const Uuid EQUALIZER_EFFECT_TYPE = {