summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevin Moore <devinmoore@google.com>2024-01-19 17:39:28 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-01-19 17:39:28 +0000
commite744bc9244e3467463f58db2c0e1b4005792d7d4 (patch)
tree35c2d540d221e0cd8537f2f5babc4ac85a467d8c
parent10f0c8cc2f71e1bf141553bacc2883e3d6b15b84 (diff)
parent57c8b9df52583c21fc56ae278a84826c3e4ace13 (diff)
downloadlibfmq-e744bc9244e3467463f58db2c0e1b4005792d7d4.tar.gz
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>
-rw-r--r--include/fmq/MessageQueueBase.h12
1 files changed, 12 insertions, 0 deletions
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 @@ bool MessageQueueBase<MQDescriptorType, T, flavor>::readBlocking(T* data, size_t
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 @@ size_t MessageQueueBase<MQDescriptorType, T, flavor>::availableToReadBytes() con
* 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);
}