We found a memory leak in our getifaddrs() and if_nameindex() implementation in libinet6 library. We do not think that users can gain privilege using this bug. However, we encourage you to apply following patch and rebuild all binary files linked with that library. Index: usagi/libinet6/ifaddrs.c =================================================================== RCS file: /cvsroot/usagi/usagi/usagi/libinet6/ifaddrs.c,v retrieving revision 1.17.4.1 retrieving revision 1.17.4.2 diff -u -r1.17.4.1 -r1.17.4.2 --- usagi/libinet6/ifaddrs.c 28 Mar 2002 12:26:17 -0000 1.17.4.1 +++ usagi/libinet6/ifaddrs.c 8 Dec 2002 08:22:22 -0000 1.17.4.2 @@ -1,4 +1,4 @@ -/* $USAGI: ifaddrs.c,v 1.17.4.1 2002/03/28 12:26:17 yoshfuji Exp $ */ +/* $USAGI: ifaddrs.c,v 1.17.4.2 2002/12/08 08:22:22 yoshfuji Exp $ */ /************************************************************************** * ifaddrs.c @@ -347,16 +347,20 @@ static void free_nlmsglist(struct nlmsg_list *nlm0) { - struct nlmsg_list *nlm; + struct nlmsg_list *nlm, *nlm_next; int saved_errno; if (!nlm0) return; saved_errno = errno; - for (nlm=nlm0; nlm; nlm=nlm->nlm_next){ + nlm = nlm0; + while (nlm) + { if (nlm->nlh) free(nlm->nlh); + nlm_next = nlm->nlm_next; + free(nlm); + nlm = nlm_next; } - free(nlm0); __set_errno(saved_errno); } Index: usagi/libinet6/ifnames.c =================================================================== RCS file: /cvsroot/usagi/usagi/usagi/libinet6/ifnames.c,v retrieving revision 1.19 retrieving revision 1.19.4.1 diff -u -r1.19 -r1.19.4.1 --- usagi/libinet6/ifnames.c 22 Oct 2001 10:28:18 -0000 1.19 +++ usagi/libinet6/ifnames.c 8 Dec 2002 08:22:22 -0000 1.19.4.1 @@ -1,4 +1,4 @@ -/* $USAGI: ifnames.c,v 1.19 2001/10/22 10:28:18 yoshfuji Exp $ */ +/* $USAGI: ifnames.c,v 1.19.4.1 2002/12/08 08:22:22 yoshfuji Exp $ */ /************************************************************************** * ifnames.c @@ -222,16 +222,20 @@ static void free_nlmsglist(struct nlmsg_list *nlm0) { - struct nlmsg_list *nlm; + struct nlmsg_list *nlm, *nlm_next; int saved_errno; if (!nlm0) return; saved_errno = errno; - for (nlm=nlm0; nlm; nlm=nlm->nlm_next){ + nlm = nlm0; + while (nlm) + { if (nlm->nlh) free(nlm->nlh); + nlm_next = nlm->nlm_next; + free(nlm); + nlm = nlm_next; } - free(nlm0); __set_errno(saved_errno); } .