ports/85837: fatal error in amd64
Garry Simpson
gsimpson at mail.chilisystems.net
Wed Sep 7 15:50:21 UTC 2005
>Number: 85837
>Category: ports
>Synopsis: fatal error in amd64
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: maintainer-update
>Submitter-Id: current-users
>Arrival-Date: Wed Sep 07 15:50:17 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Adam Jette
>Release: FreeBSD 4.11-RELEASE i386
>Organization:
>Environment:
System: FreeBSD
>Description:
Joerg Wunsch discovered an error in openradius when run in FreeBSD under amd64 that causes it to core dump constantly. He has fixed this error with a patch and I'm submitting it for him until openradius fixes their code.
>How-To-Repeat:
Run openradius in FreeBSD on amd64.
>Fix:
--- openradius.patch begins here ---
diff -ruN openradius.bak/files/patch-ringbuf openradius/files/patch-ringbuf
--- openradius.bak/files/patch-ringbuf Wed Dec 31 19:00:00 1969
+++ openradius/files/patch-ringbuf Wed Sep 7 11:31:47 2005
@@ -0,0 +1,62 @@
+--- common/ringbuf.c.orig Mon Feb 14 16:10:51 2005
++++ common/ringbuf.c Tue Aug 30 13:55:42 2005
+@@ -355,7 +355,7 @@
+ ssize_t ring_count(RING *r, RINGCNTFUNC func, ...)
+ {
+ va_list ap;
+- ssize_t len, ret;
++ ssize_t len, ret = 0;
+
+ len = ring_maxget(r);
+
+@@ -363,37 +363,41 @@
+
+ /* There is data available */
+
+- va_start(ap, func);
+-
+ if (r->r + len <= r->size) {
+
+ /* Message ends before end of buffer */
+
+ /* peek at single part, return whatever the
+ closure returns. */
+- return func(r->buf + r->r, len, 0, ap);
++ va_start(ap, func);
++ ret = func(r->buf + r->r, len, 0, ap);
++ va_end(ap);
+ }
+ else {
+
+ /* Message doesn't end before end of buffer */
+
+ /* peek at first part, till end of buffer */
++ va_start(ap, func);
+ ret = func(r->buf + r->r, r->size - r->r, 0, ap);
++ va_end(ap);
+
+ if (ret < r->size - r->r) {
+ /* Satisfied by first part; return whatever
+ the closure gave us. */
+- return ret;
+ }
+-
+- /* peek at rest, from start of buffer */
+- return ret + func(r->buf, len - (r->size - r->r),
+- ret, ap);
++ else {
++ /* peek at rest, from start of buffer */
++ va_start(ap, func);
++ ret += func(r->buf, len - (r->size - r->r),
++ ret, ap);
++ va_end(ap);
++ }
+ }
+ }
+
+ /* No data available, return 0. */
+- return 0;
++ return ret;
+ }
+
+
--- openradius.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list