Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Dec 2011 09:57:59 +0000 (UTC)
From:      Lawrence Stewart <lstewart@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r228460 - projects/diffused_head/sys/netinet/ipfw
Message-ID:  <201112130957.pBD9vxbW043083@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: lstewart
Date: Tue Dec 13 09:57:59 2011
New Revision: 228460
URL: http://svn.freebsd.org/changeset/base/228460

Log:
  Fix a kernel panic by ensuring the kernel uses the correct structure types
  (_ctl_) when decoding control messages from userspace.

Modified:
  projects/diffused_head/sys/netinet/ipfw/ip_diffuse.c

Modified: projects/diffused_head/sys/netinet/ipfw/ip_diffuse.c
==============================================================================
--- projects/diffused_head/sys/netinet/ipfw/ip_diffuse.c	Tue Dec 13 09:49:41 2011	(r228459)
+++ projects/diffused_head/sys/netinet/ipfw/ip_diffuse.c	Tue Dec 13 09:57:59 2011	(r228460)
@@ -1534,7 +1534,7 @@ compute_space_feature(struct di_oid *cmd
 	needed = 0;
 
 	if (cmd != NULL)
-		name = ((struct di_feature *)cmd)->name;
+		name = ((struct di_ctl_feature *)cmd)->name;
 	else
 		name = "all";
 	
@@ -1543,12 +1543,12 @@ compute_space_feature(struct di_oid *cmd
 		if (s == NULL)
 			return (-1);
 
-		needed += sizeof(struct di_feature);
+		needed += sizeof(struct di_ctl_feature);
 		needed += s->alg->get_conf(&s->conf, NULL, 1);
 	} else {
 		/* All feature instances. */
 		LIST_FOREACH(s, &di_config.feature_inst_list, next) {
-			needed += sizeof(struct di_feature);
+			needed += sizeof(struct di_ctl_feature);
 			needed += s->alg->get_conf(&s->conf, NULL, 1);
 		}
 	}
@@ -1568,20 +1568,20 @@ compute_space_class(struct di_oid *cmd)
 	int needed;
 
 	needed = 0;
-	name = ((struct di_classifier *)cmd)->name;
+	name = ((struct di_ctl_classifier *)cmd)->name;
 
 	if (strcmp(name, "all")) {
 		s = search_classifier_instance(name);
 		if (s == NULL)
 			return (-1);
 
-		needed += sizeof(struct di_classifier);
+		needed += sizeof(struct di_ctl_classifier);
 		needed += (s->fscnt + s->ccnt)* sizeof(struct di_feature_stat);
 		needed += s->alg->get_conf(&s->conf, NULL, 1);
 	} else {
 		/* All classifier instances. */
 		LIST_FOREACH(s, &di_config.classifier_inst_list, next) {
-			needed += sizeof(struct di_classifier);
+			needed += sizeof(struct di_ctl_classifier);
 			needed += (s->fscnt + s->ccnt) * sizeof(struct di_feature_stat);
 		}
 	}
@@ -1601,18 +1601,18 @@ compute_space_export(struct di_oid *cmd)
 	int needed;
 
 	needed = 0;
-	name = ((struct di_export *)cmd)->name;
+	name = ((struct di_ctl_export *)cmd)->name;
 
 	if (strcmp(name, "all")) {
 		s = search_export_instance(name);
 		if (s == NULL)
 			return (-1);
 
-		needed += sizeof(struct di_export);
+		needed += sizeof(struct di_ctl_export);
 	} else {
 		/* All export instances. */
 		LIST_FOREACH(s, &di_config.export_list, next) {
-			needed += sizeof(struct di_export);
+			needed += sizeof(struct di_ctl_export);
 		}
 	}
 
@@ -1629,7 +1629,7 @@ copy_feature(char *buf, struct di_featur
 
 	f->oid.type = DI_FEATURE;
 	f->oid.subtype = 0;
-	f->oid.len = sizeof(struct di_feature);
+	f->oid.len = sizeof(struct di_ctl_feature);
 	strcpy(f->name, s->name);
 	strcpy(f->mod_name, s->alg->name);
 
@@ -1664,7 +1664,7 @@ copy_features(struct di_oid *cmd, char *
 	size = 0;
 
 	if (cmd != NULL)
-		name = ((struct di_feature *)cmd)->name;
+		name = ((struct di_ctl_feature *)cmd)->name;
 	else
 		name = "all";
 
@@ -1704,7 +1704,7 @@ copy_classifier(char *buf, struct di_cla
 
 	c->oid.type = DI_CLASSIFIER;
 	c->oid.subtype = 0;
-	c->oid.len = sizeof(struct di_classifier) +
+	c->oid.len = sizeof(struct di_ctl_classifier) +
 	    (s->fscnt + s->ccnt) * sizeof(struct di_feature_stat);
 	strcpy(c->name, s->name);
 	strcpy(c->mod_name, s->alg->name);
@@ -1746,7 +1746,7 @@ copy_classifiers(struct di_oid *cmd, cha
 	int r, size;
 
 	size = 0;
-	name = ((struct di_classifier *)cmd)->name;
+	name = ((struct di_ctl_classifier *)cmd)->name;
 
 	if (strcmp(name, "all")) {
 		s = search_classifier_instance(name);
@@ -1781,11 +1781,11 @@ copy_export(char *buf, struct di_export 
 
 	e->oid.type = DI_EXPORT;
 	e->oid.subtype = 0;
-	e->oid.len = sizeof(struct di_export);
+	e->oid.len = sizeof(struct di_ctl_export);
 	strcpy(e->name, s->name);
 	e->conf = s->conf;
 
-	return (sizeof(struct di_export));
+	return (sizeof(struct di_ctl_export));
 }
 
 /*
@@ -1800,7 +1800,7 @@ copy_exports(struct di_oid *cmd, char **
 	int r, size;
 
 	size = 0;
-	name = ((struct di_export *)cmd)->name;
+	name = ((struct di_ctl_export *)cmd)->name;
 
 	if (strcmp(name, "all")) {
 		s = search_export_instance(name);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201112130957.pBD9vxbW043083>