Return 0 when read/write ptrs are incorrect am: 57c8b9df52
Original change: https://android-review.googlesource.com/c/platform/system/libfmq/+/2918987
Change-Id: I2b15da5f106ab9e05cdca3a81e3b40269ee04cb0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/include/fmq/MessageQueueBase.h b/include/fmq/MessageQueueBase.h
index 8144937..ee80a45 100644
--- a/include/fmq/MessageQueueBase.h
+++ b/include/fmq/MessageQueueBase.h
@@ -1047,6 +1047,12 @@
template <template <typename, MQFlavor> typename MQDescriptorType, typename T, MQFlavor flavor>
size_t MessageQueueBase<MQDescriptorType, T, flavor>::availableToWriteBytes() const {
+ if (mDesc->getSize() < availableToReadBytes()) {
+ hardware::details::logError(
+ "The write or read pointer has become corrupted. Reading from the queue is no "
+ "longer possible.");
+ return 0;
+ }
return mDesc->getSize() - availableToReadBytes();
}
@@ -1135,6 +1141,12 @@
* hence requires a memory_order_acquired load for both mReadPtr and
* mWritePtr.
*/
+ if (mWritePtr->load(std::memory_order_acquire) < mReadPtr->load(std::memory_order_acquire)) {
+ hardware::details::logError(
+ "The write or read pointer has become corrupted. Reading from the queue is no "
+ "longer possible.");
+ return 0;
+ }
return mWritePtr->load(std::memory_order_acquire) - mReadPtr->load(std::memory_order_acquire);
}