Module Name: src Committed By: christos Date: Wed Feb 12 22:17:27 UTC 2025
Modified Files: src/external/mpl/dhcp/dist/server: mdb6.c Log Message: Fix 2 bugs when cleaning old leases: 1. in cleanup_old_expired() call iasubopt_dereference() if the subopt did not have an ia. If it did, then we would have already taken acre of it. 2. in ia_remove_iasubopt() call ia_dereference() before calling iasubopt_dereference(), otherwise we might be touching free'd memory if the iasubopt had only one reference and got freed. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/external/mpl/dhcp/dist/server/mdb6.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/mpl/dhcp/dist/server/mdb6.c diff -u src/external/mpl/dhcp/dist/server/mdb6.c:1.7 src/external/mpl/dhcp/dist/server/mdb6.c:1.8 --- src/external/mpl/dhcp/dist/server/mdb6.c:1.7 Fri Sep 23 08:30:52 2022 +++ src/external/mpl/dhcp/dist/server/mdb6.c Wed Feb 12 17:17:27 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: mdb6.c,v 1.7 2022/09/23 12:30:52 christos Exp $ */ +/* $NetBSD: mdb6.c,v 1.8 2025/02/12 22:17:27 christos Exp $ */ /* * Copyright (C) 2007-2017 by Internet Systems Consortium, Inc. ("ISC") @@ -17,7 +17,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: mdb6.c,v 1.7 2022/09/23 12:30:52 christos Exp $"); +__RCSID("$NetBSD: mdb6.c,v 1.8 2025/02/12 22:17:27 christos Exp $"); /*! @@ -487,8 +487,6 @@ ia_remove_iasubopt(struct ia_xx *ia, str for (i=0; i<ia->num_iasubopt; i++) { if (ia->iasubopt[i] == iasubopt) { - /* remove this sub option */ - iasubopt_dereference(&(ia->iasubopt[i]), file, line); /* move remaining suboption pointers down one */ for (j=i+1; j < ia->num_iasubopt; j++) { ia->iasubopt[j-1] = ia->iasubopt[j]; @@ -496,6 +494,8 @@ ia_remove_iasubopt(struct ia_xx *ia, str /* decrease our total count */ /* remove the back-reference in the suboption itself */ ia_dereference(&iasubopt->ia, file, line); + /* remove this sub option */ + iasubopt_dereference(&iasubopt, file, line); ia->num_iasubopt--; return; } @@ -2070,8 +2070,9 @@ cleanup_old_expired(struct ipv6_pool *po ia->iaid_duid.len, MDL); } ia_dereference(&ia, MDL); + } else { + iasubopt_dereference(&tmp, MDL); } - iasubopt_dereference(&tmp, MDL); } }