diff --git a/src/app-layer-smb.c b/src/app-layer-smb.c index 4bb2ebdf0b..f593c3fef5 100644 --- a/src/app-layer-smb.c +++ b/src/app-layer-smb.c @@ -1205,6 +1205,25 @@ static void *SMBStateAlloc(void) { */ static void SMBStateFree(void *s) { SCEnter(); + SMBState *sstate = (SMBState *) s; + + DCERPCUuidEntry *item; + + while ((item = TAILQ_FIRST(&sstate->dcerpc.dcerpcbindbindack.uuid_list))) { + //printUUID("Free", item); + TAILQ_REMOVE(&sstate->dcerpc.dcerpcbindbindack.uuid_list, item, next); + free(item); + } + if (sstate->dcerpc.dcerpcrequest.stub_data_buffer != NULL) { + free(sstate->dcerpc.dcerpcrequest.stub_data_buffer); + sstate->dcerpc.dcerpcrequest.stub_data_buffer = NULL; + sstate->dcerpc.dcerpcrequest.stub_data_buffer_len = 0; + } + if (sstate->dcerpc.dcerpcresponse.stub_data_buffer != NULL) { + free(sstate->dcerpc.dcerpcresponse.stub_data_buffer); + sstate->dcerpc.dcerpcresponse.stub_data_buffer = NULL; + sstate->dcerpc.dcerpcresponse.stub_data_buffer_len = 0; + } if (s) { SCFree(s);