From: Emmanuel D. <ma...@us...> - 2005-09-26 17:47:54
|
Update of /cvsroot/ipsec-tools/ipsec-tools/src/racoon In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6114/src/racoon Modified Files: evt.c Log Message: Fix memory leak when event queue overflows Index: evt.c =================================================================== RCS file: /cvsroot/ipsec-tools/ipsec-tools/src/racoon/evt.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- evt.c 29 Nov 2004 23:30:39 -0000 1.2 +++ evt.c 26 Sep 2005 17:47:46 -0000 1.3 @@ -61,6 +61,23 @@ struct evt *evt; size_t len; + /* If we are above the limit, don't record anything */ + if (evtlist_len > EVTLIST_MAX) { + plog(LLV_DEBUG, LOCATION, NULL, + "Cannot record event: event queue overflowed\n"); + return; + } + + /* If we hit the limit, record an overflow event instead */ + if (evtlist_len == EVTLIST_MAX) { + plog(LLV_ERROR, LOCATION, NULL, + "Cannot record event: event queue overflow\n"); + src = NULL; + dst = NULL; + type = EVTT_OVERFLOW; + optdata = NULL; + } + len = sizeof(*evtdump); if (optdata) len += optdata->l; @@ -92,8 +109,7 @@ evt->dump = evtdump; TAILQ_INSERT_TAIL(&evtlist, evt, next); - if (evtlist_len++ == EVTLIST_MAX) - evt_push(NULL, NULL, EVTT_OVERFLOW, NULL); + evtlist_len++; return; } |