Browse Source

firewall: protect iptables invocations with locks in interface ops, it might run concurrently due to hotplug invocations on network restart

SVN-Revision: 23090
Jo-Philipp Wich 15 years ago
parent
commit
b07620df31
2 changed files with 5 additions and 1 deletions
  1. 1 1
      package/firewall/Makefile
  2. 4 0
      package/firewall/files/lib/core_interface.sh

+ 1 - 1
package/firewall/Makefile

@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=firewall
 
 PKG_VERSION:=2
-PKG_RELEASE:=16
+PKG_RELEASE:=17
 
 include $(INCLUDE_DIR)/package.mk
 

+ 4 - 0
package/firewall/files/lib/core_interface.sh

@@ -72,6 +72,8 @@ fw_configure_interface() {
 			*/*.*) fw_log info "zone $zone does not support IPv4 address family, skipping"; return ;;
 		esac
 
+		lock /var/run/firewall-interface.lock
+
 		fw $action $mode f ${chain}_ACCEPT ACCEPT $ { -o "$ifname" $onet }
 		fw $action $mode f ${chain}_ACCEPT ACCEPT $ { -i "$ifname" $inet }
 		fw $action $mode f ${chain}_DROP   DROP   $ { -o "$ifname" $onet }
@@ -86,6 +88,8 @@ fw_configure_interface() {
 		fw $action $mode n PREROUTING ${chain}_prerouting $ { -i "$ifname" $inet }
 		fw $action $mode r PREROUTING ${chain}_notrack    $ { -i "$ifname" $inet }
 		fw $action $mode n POSTROUTING ${chain}_nat       $ { -o "$ifname" $onet }
+
+		lock -u /var/run/firewall-interface.lock
 	}
 
 	local old_zones old_ifname old_subnets