Stream reassembly memcap is regulated by the Init and Cleanup
callbacks. If Init fails due to memcap reached, Cleanup had no
way of knowing and it would decrease the memcap even if it hadn't
been increased by Init. This could lead to too much memory use and
memcap counter underflow.
This patch fixes the issue by not calling Cleanup in this case. It's
fair to see a failed Init the responsibility of Init.
}
if (p->Init(pb->data, p->InitData) != 1) {
SCLogError(SC_ERR_POOL_INIT, "init error");
- if (p->Cleanup)
- p->Cleanup(pb->data);
if (p->Free)
p->Free(pb->data);
else
pb->data = (char *)p->data_buffer + u32 * elt_size;
if (p->Init(pb->data, p->InitData) != 1) {
SCLogError(SC_ERR_POOL_INIT, "init error");
- if (p->Cleanup)
- p->Cleanup(pb->data);
pb->data = NULL;
goto error;
}
if (pitem != NULL) {
if (p->Init(pitem, p->InitData) != 1) {
- if (p->Cleanup)
- p->Cleanup(pitem);
if (p->Free != NULL)
p->Free(pitem);
else