From 5537680e54c8d47a45dc9b8c638de5b80fd92b64 Mon Sep 17 00:00:00 2001 From: Kevin Schoedel <67607049+kpschoedel@users.noreply.github.com> Date: Fri, 9 Jul 2021 10:45:28 -0400 Subject: [PATCH] Fix PacketBuffer allocation size when using LwIP (#8226) #### Problem LwIP `pbuf_alloc()` was called with a size including the `struct pbuf` header, but expects the size to exclude that. #### Change overview Call `pbuf_alloc()` with the correct size. This imports a fragment of https://github.com/openweave/openweave-core/pull/608 #### Testing Added `PacketBuffer::kMaxSizeWithoutReserve` to the cases checked by `PacketBufferTest::CheckNew()`. --- src/system/SystemPacketBuffer.cpp | 2 +- src/system/tests/TestSystemPacketBuffer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/SystemPacketBuffer.cpp b/src/system/SystemPacketBuffer.cpp index 076410d39af4f6..4cc91b5dff326e 100644 --- a/src/system/SystemPacketBuffer.cpp +++ b/src/system/SystemPacketBuffer.cpp @@ -466,7 +466,7 @@ PacketBufferHandle PacketBufferHandle::New(size_t aAvailableSize, uint16_t aRese #if CHIP_SYSTEM_PACKETBUFFER_STORE == CHIP_SYSTEM_PACKETBUFFER_STORE_LWIP_POOL || \ CHIP_SYSTEM_PACKETBUFFER_STORE == CHIP_SYSTEM_PACKETBUFFER_STORE_LWIP_CUSTOM - lPacket = static_cast(pbuf_alloc(PBUF_RAW, static_cast(lBlockSize), PBUF_POOL)); + lPacket = static_cast(pbuf_alloc(PBUF_RAW, static_cast(lAllocSize), PBUF_POOL)); SYSTEM_STATS_UPDATE_LWIP_PBUF_COUNTS(); diff --git a/src/system/tests/TestSystemPacketBuffer.cpp b/src/system/tests/TestSystemPacketBuffer.cpp index e2c199c34f966f..aaa35b214ac463 100644 --- a/src/system/tests/TestSystemPacketBuffer.cpp +++ b/src/system/tests/TestSystemPacketBuffer.cpp @@ -191,7 +191,7 @@ class PacketBufferTest std::vector handles; }; -const uint16_t sTestReservedSizes[] = { 0, 10, 128, 1536, PacketBufferTest::kBlockSize }; +const uint16_t sTestReservedSizes[] = { 0, 10, 128, 1536, PacketBuffer::kMaxSizeWithoutReserve, PacketBufferTest::kBlockSize }; const uint16_t sTestLengths[] = { 0, 1, 10, 128, PacketBufferTest::kBlockSize, UINT16_MAX }; PacketBufferTest::TestContext sContext = {