From 07ce871da4b385f6f1d86310f5dcdf00e6c79692 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 5 Nov 2021 20:05:43 +0100 Subject: [PATCH] packetpool: reset PacketRelease on return to pool Reset PacketRelease callback to make sure its not set to a capture specific callback. As an example: 0x000055e00af09d35 in AFPReleaseDataFromRing (p=0x7f1d884cb830) at source-af-packet.c:653 0x000055e00af09dd0 in AFPReleasePacket (p=0x7f1d884cb830) at source-af-packet.c:678 0x000055e00ab53d7e in TmqhOutputPacketpool (t=0x55e00fb79250, p=0x7f1d884cb830) at tmqh-packetpool.c:465 0x000055e00af08dec in TmThreadsSlotProcessPkt (tv=0x55e00fb79250, s=0x55e012134790, p=0x7f1d884cb830) at tm-threads.h:201 0x000055e00af08e70 in TmThreadsCaptureInjectPacket (tv=0x55e00fb79250, p=0x7f1d884cb830) at tm-threads.h:221 0x000055e00af08f2e in TmThreadsCaptureHandleTimeout (tv=0x55e00fb79250, p=0x0) at tm-threads.h:245 0x000055e00af0ba76 in ReceiveAFPLoop (tv=0x55e00fb79250, data=0x7f1d884ccb60, slot=0x55e01198e4b0) at source-af-packet.c:1321 0x000055e00ab55257 in TmThreadsSlotPktAcqLoop (td=0x55e00fb79250) at tm-threads.c:312 0x00007f1dca9d5609 in start_thread (arg=) at pthread_create.c:477 0x00007f1dca7c6293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 Here the packet was a pseudo packet to handle a timeout condition. But the ReleasePacket callback was still set to AFPReleasePacket from a previous use of the Packet. Bug: #4807. --- src/decode.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/decode.c b/src/decode.c index c91b747c51..d75c637522 100644 --- a/src/decode.c +++ b/src/decode.c @@ -172,8 +172,10 @@ void PacketFreeOrRelease(Packet *p) { if (p->flags & PKT_ALLOC) PacketFree(p); - else + else { + p->ReleasePacket = PacketPoolReturnPacket; PacketPoolReturnPacket(p); + } } /** -- 2.47.2