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

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

@ -91,6 +91,11 @@ TmEcode LogHttpLogIPv4(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq)
char timebuf[64]; char timebuf[64];
uint8_t i = 0; 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 */ /* check if we have HTTP state or not */
SCMutexLock(&p->flow->m); SCMutexLock(&p->flow->m);
uint16_t proto = AppLayerGetProtoFromPacket(p); 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; htp_state->flags &= ~HTP_FLAG_NEW_REQUEST;
end: end:
SCMutexUnlock(&p->flow->m); SCMutexUnlock(&p->flow->m);
SCReturnUInt(TM_ECODE_OK); SCReturnInt(TM_ECODE_OK);
} }
TmEcode LogHttpLogIPv6(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) 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]; char timebuf[64];
uint8_t i = 0; 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 */ /* check if we have HTTP state or not */
SCMutexLock(&p->flow->m); SCMutexLock(&p->flow->m);
uint16_t proto = AppLayerGetProtoFromPacket(p); 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; htp_state->flags &= ~HTP_FLAG_NEW_REQUEST;
end: end:
SCMutexUnlock(&p->flow->m); SCMutexUnlock(&p->flow->m);
SCReturnUInt(TM_ECODE_OK); SCReturnInt(TM_ECODE_OK);
} }
TmEcode LogHttpLog (ThreadVars *tv, Packet *p, void *data, PacketQueue *pq) TmEcode LogHttpLog (ThreadVars *tv, Packet *p, void *data, PacketQueue *pq)
{ {
if (!(PKT_IS_TCP(p))) SCEnter();
return TM_ECODE_OK;
/* 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)) { if (PKT_IS_IPV4(p)) {
return LogHttpLogIPv4(tv, p, data, pq); SCReturnInt(LogHttpLogIPv4(tv, p, data, pq));
} else if (PKT_IS_IPV6(p)) { } 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) TmEcode LogHttpLogThreadInit(ThreadVars *t, void *initdata, void **data)

Loading…
Cancel
Save