From f442c1f5ec8003dbcaac366030ab166b0a85a685 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 19 Feb 2010 10:42:53 +0100 Subject: [PATCH] Make sure log-http checks for a valid p->flow ptr before using it. --- src/log-httplog.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/log-httplog.c b/src/log-httplog.c index b6796444c2..b8f3e2d609 100644 --- a/src/log-httplog.c +++ b/src/log-httplog.c @@ -91,6 +91,11 @@ TmEcode LogHttpLogIPv4(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) char timebuf[64]; uint8_t i = 0; + /* no flow, no htp state */ + if (p->flow == NULL) { + SCReturnInt(TM_ECODE_OK); + } + /* check if we have HTTP state or not */ SCMutexLock(&p->flow->m); uint16_t proto = AppLayerGetProtoFromPacket(p); @@ -185,7 +190,7 @@ TmEcode LogHttpLogIPv4(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) htp_state->flags &= ~HTP_FLAG_NEW_REQUEST; end: SCMutexUnlock(&p->flow->m); - SCReturnUInt(TM_ECODE_OK); + SCReturnInt(TM_ECODE_OK); } TmEcode LogHttpLogIPv6(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) @@ -195,6 +200,11 @@ TmEcode LogHttpLogIPv6(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) char timebuf[64]; uint8_t i = 0; + /* no flow, no htp state */ + if (p->flow == NULL) { + SCReturnInt(TM_ECODE_OK); + } + /* check if we have HTTP state or not */ SCMutexLock(&p->flow->m); uint16_t proto = AppLayerGetProtoFromPacket(p); @@ -289,21 +299,29 @@ TmEcode LogHttpLogIPv6(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) htp_state->flags &= ~HTP_FLAG_NEW_REQUEST; end: SCMutexUnlock(&p->flow->m); - SCReturnUInt(TM_ECODE_OK); + SCReturnInt(TM_ECODE_OK); } TmEcode LogHttpLog (ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) { - if (!(PKT_IS_TCP(p))) - return TM_ECODE_OK; + SCEnter(); + + /* no flow, no htp state */ + if (p->flow == NULL) { + SCReturnInt(TM_ECODE_OK); + } + + if (!(PKT_IS_TCP(p))) { + SCReturnInt(TM_ECODE_OK); + } if (PKT_IS_IPV4(p)) { - return LogHttpLogIPv4(tv, p, data, pq); + SCReturnInt(LogHttpLogIPv4(tv, p, data, pq)); } else if (PKT_IS_IPV6(p)) { - return LogHttpLogIPv6(tv, p, data, pq); + SCReturnInt(LogHttpLogIPv6(tv, p, data, pq)); } - return TM_ECODE_OK; + SCReturnInt(TM_ECODE_OK); } TmEcode LogHttpLogThreadInit(ThreadVars *t, void *initdata, void **data)