From cfecef53765415e0310a707604c7ad22c71219d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 17 Jul 2026 15:15:19 +0200 Subject: [PATCH] Channels: fix off-by-one bound in decryptForHash (#11046) decryptForHash accepted chIndex == getNumChannels() before reading getHash(chIndex), which indexes one past hashes[MAX_NUM_CHANNELS]. Use >= so an out-of-range index is rejected before the array read. --- src/mesh/Channels.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesh/Channels.cpp b/src/mesh/Channels.cpp index b086f5e6b..f1d97ebb4 100644 --- a/src/mesh/Channels.cpp +++ b/src/mesh/Channels.cpp @@ -516,7 +516,7 @@ bool Channels::hasDefaultChannel() */ bool Channels::decryptForHash(ChannelIndex chIndex, ChannelHash channelHash) { - if (chIndex > getNumChannels() || getHash(chIndex) != channelHash) { + if (chIndex >= getNumChannels() || getHash(chIndex) != channelHash) { // LOG_DEBUG("Skip channel %d (hash %x) due to invalid hash/index, want=%x", chIndex, getHash(chIndex), // channelHash); return false;