From owner-svn-src-projects@FreeBSD.ORG Tue Dec 13 09:57:59 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 892BC1065672; Tue, 13 Dec 2011 09:57:59 +0000 (UTC) (envelope-from lstewart@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6E9D18FC18; Tue, 13 Dec 2011 09:57:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBD9vxws043085; Tue, 13 Dec 2011 09:57:59 GMT (envelope-from lstewart@svn.freebsd.org) Received: (from lstewart@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBD9vxbW043083; Tue, 13 Dec 2011 09:57:59 GMT (envelope-from lstewart@svn.freebsd.org) Message-Id: <201112130957.pBD9vxbW043083@svn.freebsd.org> From: Lawrence Stewart Date: Tue, 13 Dec 2011 09:57:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r228460 - projects/diffused_head/sys/netinet/ipfw X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Dec 2011 09:57:59 -0000 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);