Module Name:    src
Committed By:   rmind
Date:           Sun Dec 10 01:18:21 UTC 2017

Modified Files:
        src/sys/net/npf: npf_ctl.c npf_impl.h npf_ruleset.c npf_worker.c

Log Message:
- npf_mk_rules: enforce unique names for the dynamic rulesets.
- npf_worker_unregister: merge fix for the standalone NPF.


To generate a diff of this commit:
cvs rdiff -u -r1.49 -r1.50 src/sys/net/npf/npf_ctl.c
cvs rdiff -u -r1.69 -r1.70 src/sys/net/npf/npf_impl.h
cvs rdiff -u -r1.45 -r1.46 src/sys/net/npf/npf_ruleset.c
cvs rdiff -u -r1.3 -r1.4 src/sys/net/npf/npf_worker.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/npf/npf_ctl.c
diff -u src/sys/net/npf/npf_ctl.c:1.49 src/sys/net/npf/npf_ctl.c:1.50
--- src/sys/net/npf/npf_ctl.c:1.49	Mon Oct 30 03:02:35 2017
+++ src/sys/net/npf/npf_ctl.c	Sun Dec 10 01:18:21 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: npf_ctl.c,v 1.49 2017/10/30 03:02:35 ozaki-r Exp $	*/
+/*	$NetBSD: npf_ctl.c,v 1.50 2017/12/10 01:18:21 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2009-2014 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_ctl.c,v 1.49 2017/10/30 03:02:35 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_ctl.c,v 1.50 2017/12/10 01:18:21 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -371,12 +371,18 @@ npf_mk_rules(npf_t *npf, npf_ruleset_t *
 	it = prop_array_iterator(rules);
 	while ((rldict = prop_object_iterator_next(it)) != NULL) {
 		npf_rule_t *rl = NULL;
+		const char *name;
 
-		/* Generate a single rule. */
 		error = npf_mk_singlerule(npf, rldict, rpset, &rl, errdict);
 		if (error) {
 			break;
 		}
+		if (prop_dictionary_get_cstring_nocopy(rldict, "name", &name) &&
+		    npf_ruleset_lookup(rlset, name) != NULL) {
+			NPF_ERR_DEBUG(errdict);
+			npf_rule_free(rl);
+			return EEXIST;
+		}
 		npf_ruleset_insert(rlset, rl);
 	}
 	prop_object_iterator_release(it);

Index: src/sys/net/npf/npf_impl.h
diff -u src/sys/net/npf/npf_impl.h:1.69 src/sys/net/npf/npf_impl.h:1.70
--- src/sys/net/npf/npf_impl.h:1.69	Sun Feb 19 02:11:19 2017
+++ src/sys/net/npf/npf_impl.h	Sun Dec 10 01:18:21 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: npf_impl.h,v 1.69 2017/02/19 02:11:19 christos Exp $	*/
+/*	$NetBSD: npf_impl.h,v 1.70 2017/12/10 01:18:21 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2009-2014 The NetBSD Foundation, Inc.
@@ -330,6 +330,7 @@ npf_natpolicy_t *npf_ruleset_findnat(npf
 void		npf_ruleset_freealg(npf_ruleset_t *, npf_alg_t *);
 int		npf_ruleset_export(npf_t *, const npf_ruleset_t *, prop_array_t);
 
+npf_rule_t *	npf_ruleset_lookup(npf_ruleset_t *, const char *);
 int		npf_ruleset_add(npf_ruleset_t *, const char *, npf_rule_t *);
 int		npf_ruleset_remove(npf_ruleset_t *, const char *, uint64_t);
 int		npf_ruleset_remkey(npf_ruleset_t *, const char *,

Index: src/sys/net/npf/npf_ruleset.c
diff -u src/sys/net/npf/npf_ruleset.c:1.45 src/sys/net/npf/npf_ruleset.c:1.46
--- src/sys/net/npf/npf_ruleset.c:1.45	Sun Jan 29 00:15:54 2017
+++ src/sys/net/npf/npf_ruleset.c	Sun Dec 10 01:18:21 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: npf_ruleset.c,v 1.45 2017/01/29 00:15:54 christos Exp $	*/
+/*	$NetBSD: npf_ruleset.c,v 1.46 2017/12/10 01:18:21 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2009-2015 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_ruleset.c,v 1.45 2017/01/29 00:15:54 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_ruleset.c,v 1.46 2017/12/10 01:18:21 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -208,7 +208,7 @@ npf_ruleset_insert(npf_ruleset_t *rlset,
 	}
 }
 
-static npf_rule_t *
+npf_rule_t *
 npf_ruleset_lookup(npf_ruleset_t *rlset, const char *name)
 {
 	npf_rule_t *rl;

Index: src/sys/net/npf/npf_worker.c
diff -u src/sys/net/npf/npf_worker.c:1.3 src/sys/net/npf/npf_worker.c:1.4
--- src/sys/net/npf/npf_worker.c:1.3	Mon Jan  2 21:49:51 2017
+++ src/sys/net/npf/npf_worker.c	Sun Dec 10 01:18:21 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: npf_worker.c,v 1.3 2017/01/02 21:49:51 rmind Exp $	*/
+/*	$NetBSD: npf_worker.c,v 1.4 2017/12/10 01:18:21 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2010-2015 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_worker.c,v 1.3 2017/01/02 21:49:51 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_worker.c,v 1.4 2017/12/10 01:18:21 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -148,9 +148,12 @@ void
 npf_worker_unregister(npf_t *npf, npf_workfunc_t func)
 {
 	const unsigned idx = npf->worker_id;
-	npf_worker_t *wrk = &npf_workers[idx];
+	npf_worker_t *wrk;
 	npf_t *instance;
 
+	if (!npf_worker_count)
+		return;
+	wrk = &npf_workers[idx];
 	mutex_enter(&wrk->worker_lock);
 	npf_worker_testset(wrk, func, NULL);
 	if ((instance = wrk->instances) == npf) {

Reply via email to