Date: Thu, 26 Feb 2009 09:58:36 GMT From: olli hauer <ohauer@gmx.de> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/132119: [patch] mail/spamd memory leak in grey.c Message-ID: <200902260958.n1Q9wapQ053913@www.freebsd.org> Resent-Message-ID: <200902261000.n1QA0CHx092486@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 132119 >Category: ports >Synopsis: [patch] mail/spamd memory leak in grey.c >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Feb 26 10:00:12 UTC 2009 >Closed-Date: >Last-Modified: >Originator: olli hauer >Release: >Organization: >Environment: >Description: spamd leaking memory, see discussion http://lists.freebsd.org/pipermail/freebsd-pf/2009-February/005000.html The following patch from Bob Beck will solve the issue. http://www.openbsd.org/cgi-bin/cvsweb/src/libexec/spamd/grey.c.diff?r1=1.45;r2=1.46 Regards, olli hauer >How-To-Repeat: >Fix: Patch attached with submission follows: +++ files/patch-grey_c 2009-02-26 10:36:14.000000000 +0100 @@ -0,0 +1,68 @@ +--- spamd/grey.c.orig 2007-06-06 12:43:19.000000000 +0200 ++++ spamd/grey.c 2009-02-26 10:33:33.000000000 +0100 +@@ -376,7 +376,7 @@ + static char buf[MAX_MAIL]; + char *cp; + +- if (*addr == '<'); ++ if (*addr == '<') + addr++; + (void) strlcpy(buf, addr, sizeof(buf)); + cp = strrchr(buf, '>'); +@@ -398,8 +398,11 @@ + size_t len; + struct mail_addr *m; + +- while (!SLIST_EMPTY(&match_suffix)) ++ while (!SLIST_EMPTY(&match_suffix)) { ++ m = SLIST_FIRST(&match_suffix); + SLIST_REMOVE_HEAD(&match_suffix, entry); ++ free(m); ++ } + if ((fp = fopen(alloweddomains_file, "r")) != NULL) { + while ((buf = fgetln(fp, &len))) { + #ifdef __FreeBSD__ +@@ -410,11 +413,11 @@ + buf++; + len--; + } ++ if (len == 0) ++ continue; + /* jump over comments and blank lines */ + if (*buf == '#' || *buf == '\n') + continue; +- if (len == 0) +- continue; + #endif + if (buf[len-1] == '\n') + len--; +@@ -434,8 +437,11 @@ + } + return; + bad: +- while (!SLIST_EMPTY(&match_suffix)) ++ while (!SLIST_EMPTY(&match_suffix)) { ++ m = SLIST_FIRST(&match_suffix); + SLIST_REMOVE_HEAD(&match_suffix, entry); ++ free(m); ++ } + } + + void +@@ -609,6 +615,7 @@ + dbc->act = 0; + dbc->dsiz = 0; + SLIST_REMOVE_HEAD(&db_changes, entry); ++ free(dbc); + + } + return(ret); +@@ -795,7 +802,7 @@ + + now = time(NULL); + /* expiry times have to be in the future */ +- expire = strtonum(expires, now, UINT_MAX, NULL); ++ expire = strtonum(expires, now, INT_MAX, NULL); + if (expire == 0) + return(-1); + >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902260958.n1Q9wapQ053913>