Make sure log-http checks for a valid p->flow ptr before using it.

remotes/origin/master-1.0.x
Victor Julien 15 years ago
parent 51f2bc1d81
commit f442c1f5ec

@ -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)

Loading…
Cancel
Save