mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Fix null dereference read in android::hardware::bluetooth::hci::H4Protocol::Send
Bug: 276375037 Test: atest VtsHalBluetoothTargetTest Change-Id: Ib9f99a75a97538899ac64a3c02fff1ec5804a0e6
This commit is contained in:
@@ -176,7 +176,10 @@ void BluetoothHci::reset() {
|
||||
mFdWatcher.WatchFdForNonBlockingReads(mFd,
|
||||
[this](int) { mH4->OnDataReady(); });
|
||||
|
||||
send(PacketType::COMMAND, reset);
|
||||
ndk::ScopedAStatus result = send(PacketType::COMMAND, reset);
|
||||
if (!result.isOk()) {
|
||||
ALOGE("Error sending reset command");
|
||||
}
|
||||
auto status = resetFuture.wait_for(std::chrono::seconds(1));
|
||||
mFdWatcher.StopWatchingFileDescriptors();
|
||||
if (status == std::future_status::ready) {
|
||||
@@ -303,30 +306,35 @@ ndk::ScopedAStatus BluetoothHci::close() {
|
||||
|
||||
ndk::ScopedAStatus BluetoothHci::sendHciCommand(
|
||||
const std::vector<uint8_t>& packet) {
|
||||
send(PacketType::COMMAND, packet);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
return send(PacketType::COMMAND, packet);
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus BluetoothHci::sendAclData(
|
||||
const std::vector<uint8_t>& packet) {
|
||||
send(PacketType::ACL_DATA, packet);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
return send(PacketType::ACL_DATA, packet);
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus BluetoothHci::sendScoData(
|
||||
const std::vector<uint8_t>& packet) {
|
||||
send(PacketType::SCO_DATA, packet);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
return send(PacketType::SCO_DATA, packet);
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus BluetoothHci::sendIsoData(
|
||||
const std::vector<uint8_t>& packet) {
|
||||
send(PacketType::ISO_DATA, packet);
|
||||
return send(PacketType::ISO_DATA, packet);
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus BluetoothHci::send(PacketType type,
|
||||
const std::vector<uint8_t>& v) {
|
||||
if (mH4 == nullptr) {
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
|
||||
}
|
||||
if (v.empty()) {
|
||||
ALOGE("Packet is empty, no data was found to be sent");
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
|
||||
}
|
||||
mH4->Send(type, v);
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
void BluetoothHci::send(PacketType type, const std::vector<uint8_t>& v) {
|
||||
mH4->Send(type, v);
|
||||
}
|
||||
|
||||
} // namespace aidl::android::hardware::bluetooth::impl
|
||||
|
||||
@@ -66,8 +66,9 @@ class BluetoothHci : public BnBluetoothHci {
|
||||
::android::hardware::bluetooth::async::AsyncFdWatcher mFdWatcher;
|
||||
|
||||
int getFdFromDevPath();
|
||||
void send(::android::hardware::bluetooth::hci::PacketType type,
|
||||
const std::vector<uint8_t>& packet);
|
||||
[[nodiscard]] ndk::ScopedAStatus send(
|
||||
::android::hardware::bluetooth::hci::PacketType type,
|
||||
const std::vector<uint8_t>& packet);
|
||||
std::unique_ptr<NetBluetoothMgmt> management_{};
|
||||
|
||||
// Send a reset command and discard all packets until a reset is received.
|
||||
|
||||
Reference in New Issue
Block a user