Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/crypto/dist/ipsec-tools/src/racoon fixed some crashes in LIS...
details: https://anonhg.NetBSD.org/src/rev/9f1cc65f072a
branches: trunk
changeset: 771263:9f1cc65f072a
user: vanhu <vanhu%NetBSD.org@localhost>
date: Thu Nov 17 14:41:55 2011 +0000
description:
fixed some crashes in LIST_FOREACH where current element could be removed during the loop
diffstat:
crypto/dist/ipsec-tools/src/racoon/handler.c | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
diffs (52 lines):
diff -r ff0c53884156 -r 9f1cc65f072a crypto/dist/ipsec-tools/src/racoon/handler.c
--- a/crypto/dist/ipsec-tools/src/racoon/handler.c Thu Nov 17 13:47:27 2011 +0000
+++ b/crypto/dist/ipsec-tools/src/racoon/handler.c Thu Nov 17 14:41:55 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: handler.c,v 1.39 2011/03/14 17:18:12 tteras Exp $ */
+/* $NetBSD: handler.c,v 1.40 2011/11/17 14:41:55 vanhu Exp $ */
/* Id: handler.c,v 1.28 2006/05/26 12:17:29 manubsd Exp */
@@ -611,9 +611,11 @@
struct sockaddr *src, *dst;
u_int32_t spid;
{
- struct ph2handle *p;
+ struct ph2handle *p, *next;
- LIST_FOREACH(p, &ph2tree, chain) {
+ for (p = LIST_FIRST(&ph2tree); p; p = next) {
+ next = LIST_NEXT(p, chain);
+
if (spid == p->spid &&
cmpsaddr(src, p->src) <= CMPSADDR_WILDPORT_MATCH &&
cmpsaddr(dst, p->dst) <= CMPSADDR_WILDPORT_MATCH){
@@ -985,9 +987,11 @@
remcontacted(remote)
struct sockaddr *remote;
{
- struct contacted *p;
+ struct contacted *p, *next;
- LIST_FOREACH(p, &ctdtree, chain) {
+ for (p = LIST_FIRST(&ctdtree); p; p = next) {
+ next = LIST_NEXT(p, chain);
+
if (cmpsaddr(remote, p->remote) <= CMPSADDR_WILDPORT_MATCH) {
LIST_REMOVE(p, chain);
racoon_free(p->remote);
@@ -1555,10 +1559,12 @@
purgeph1bylogin(login)
char *login;
{
- struct ph1handle *p;
+ struct ph1handle *p, *next;
int found = 0;
- LIST_FOREACH(p, &ph1tree, chain) {
+ for (p = LIST_FIRST(&ph1tree); p; p = next) {
+ next = LIST_NEXT(p, chain);
+
if (p->mode_cfg == NULL)
continue;
if (strncmp(p->mode_cfg->login, login, LOGINLEN) == 0) {
Home |
Main Index |
Thread Index |
Old Index