Date: Sun, 7 Feb 2010 17:50:13 +0000 (UTC) From: Luigi Rizzo <luigi@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r203614 - user/luigi/ipfw3-head/sys/netinet/ipfw Message-ID: <201002071750.o17HoDo9090358@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luigi Date: Sun Feb 7 17:50:13 2010 New Revision: 203614 URL: http://svn.freebsd.org/changeset/base/203614 Log: fix a panic on lock recursion when doing "ipfw set XXX ...". I moved the lock/unlock around the entire switch and forgot to remove the calls internally. Submitted by: Marta Carbone Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_sockopt.c Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_sockopt.c ============================================================================== --- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_sockopt.c Sun Feb 7 17:05:22 2010 (r203613) +++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_fw_sockopt.c Sun Feb 7 17:50:13 2010 (r203614) @@ -343,27 +343,22 @@ del_entry(struct ip_fw_chain *chain, u_i break; case 2: /* move rules with given number to new set */ - IPFW_UH_WLOCK(chain); for (i = 0; i < chain->n_rules; i++) { rule = chain->map[i]; if (rule->rulenum == rulenum) rule->set = new_set; } - IPFW_UH_WUNLOCK(chain); break; case 3: /* move rules with given set number to new set */ - IPFW_UH_WLOCK(chain); for (i = 0; i < chain->n_rules; i++) { rule = chain->map[i]; if (rule->set == rulenum) rule->set = new_set; } - IPFW_UH_WUNLOCK(chain); break; case 4: /* swap two sets */ - IPFW_UH_WLOCK(chain); for (i = 0; i < chain->n_rules; i++) { rule = chain->map[i]; if (rule->set == rulenum) @@ -371,7 +366,6 @@ del_entry(struct ip_fw_chain *chain, u_i else if (rule->set == new_set) rule->set = rulenum; } - IPFW_UH_WUNLOCK(chain); break; } rule = chain->reap;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002071750.o17HoDo9090358>