From owner-p4-projects@FreeBSD.ORG Sat Oct 21 03:22:20 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7CD3016A47C; Sat, 21 Oct 2006 03:22:20 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4E72716A417 for ; Sat, 21 Oct 2006 03:22:20 +0000 (UTC) (envelope-from mjacob@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id C6D5643D5C for ; Sat, 21 Oct 2006 03:22:19 +0000 (GMT) (envelope-from mjacob@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k9L3MJkS041793 for ; Sat, 21 Oct 2006 03:22:19 GMT (envelope-from mjacob@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k9L3MJK2041780 for perforce@freebsd.org; Sat, 21 Oct 2006 03:22:19 GMT (envelope-from mjacob@freebsd.org) Date: Sat, 21 Oct 2006 03:22:19 GMT Message-Id: <200610210322.k9L3MJK2041780@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mjacob@freebsd.org using -f From: Matt Jacob To: Perforce Change Reviews Cc: Subject: PERFORCE change 108207 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 Oct 2006 03:22:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=108207 Change 108207 by mjacob@newisp on 2006/10/21 03:21:20 IFC Affected files ... .. //depot/projects/newisp/arm/arm/trap.c#3 integrate .. //depot/projects/newisp/dev/pci/pci.c#4 integrate .. //depot/projects/newisp/netinet/ip_fw_pfil.c#3 integrate .. //depot/projects/newisp/netinet/ip_input.c#3 integrate Differences ... ==== //depot/projects/newisp/arm/arm/trap.c#3 (text+ko) ==== @@ -82,7 +82,7 @@ #include "opt_ktrace.h" #include -__FBSDID("$FreeBSD: src/sys/arm/arm/trap.c,v 1.28 2006/10/20 11:00:03 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/trap.c,v 1.30 2006/10/21 00:46:56 cognet Exp $"); #include @@ -900,9 +900,9 @@ nap--; } else if (code == SYS___syscall) { - code = *ap++; + code = ap[_QUAD_LOWWORD]; nap -= 2; - ap++; + ap += 2; } if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; @@ -940,8 +940,23 @@ } switch (error) { case 0: - frame->tf_r0 = td->td_retval[0]; - frame->tf_r1 = td->td_retval[1]; +#ifdef __ARMEB__ + if ((insn & 0x000fffff) == SYS___syscall && + (code != SYS_lseek)) { + /* + * 64-bit return, 32-bit syscall. Fixup byte order + */ + frame->tf_r0 = 0; + frame->tf_r1 = td->td_retval[0]; + } else { + frame->tf_r0 = td->td_retval[0]; + frame->tf_r1 = td->td_retval[1]; + } +#else + frame->tf_r0 = td->td_retval[0]; + frame->tf_r1 = td->td_retval[1]; +#endif + frame->tf_spsr &= ~PSR_C_bit; /* carry bit */ break; ==== //depot/projects/newisp/dev/pci/pci.c#4 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.315 2006/10/09 16:15:55 jmg Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.316 2006/10/20 21:28:11 jmg Exp $"); #include "opt_bus.h" @@ -653,12 +653,37 @@ cfg->vpd.vpd_ros[off].keyword[0] = byte; cfg->vpd.vpd_ros[off].keyword[1] = vpd_nextbyte(&vrs); dflen = vpd_nextbyte(&vrs); - cfg->vpd.vpd_ros[off].value = malloc((dflen + 1) * - sizeof *cfg->vpd.vpd_ros[off].value, - M_DEVBUF, M_WAITOK); + if (dflen == 0 && + strncmp(cfg->vpd.vpd_ros[off].keyword, "RV", + 2) == 0) { + /* + * if this happens, we can't trust the rest + * of the VPD. + */ + printf("pci%d:%d:%d: bad keyword length: %d\n", + cfg->bus, cfg->slot, cfg->func, dflen); + cksumvalid = 0; + end = 1; + break; + } else if (dflen == 0) { + cfg->vpd.vpd_ros[off].value = malloc(1 * + sizeof *cfg->vpd.vpd_ros[off].value, + M_DEVBUF, M_WAITOK); + cfg->vpd.vpd_ros[off].value[0] = '\x00'; + } else + cfg->vpd.vpd_ros[off].value = malloc( + (dflen + 1) * + sizeof *cfg->vpd.vpd_ros[off].value, + M_DEVBUF, M_WAITOK); remain -= 3; i = 0; - state = 3; + /* keep in sync w/ state 3's transistions */ + if (dflen == 0 && remain == 0) + state = 0; + else if (dflen == 0) + state = 2; + else + state = 3; break; case 3: /* VPD-R Keyword Value */ @@ -673,10 +698,13 @@ cfg->bus, cfg->slot, cfg->func, vrs.cksum); cksumvalid = 0; + end = 1; + break; } } dflen--; remain--; + /* keep in sync w/ state 2's transistions */ if (dflen == 0) cfg->vpd.vpd_ros[off++].value[i++] = '\0'; if (dflen == 0 && remain == 0) { @@ -710,13 +738,20 @@ M_DEVBUF, M_WAITOK); remain -= 3; i = 0; - state = 6; + /* keep in sync w/ state 6's transistions */ + if (dflen == 0 && remain == 0) + state = 0; + else if (dflen == 0) + state = 5; + else + state = 6; break; case 6: /* VPD-W Keyword Value */ cfg->vpd.vpd_w[off].value[i++] = byte; dflen--; remain--; + /* keep in sync w/ state 5's transistions */ if (dflen == 0) cfg->vpd.vpd_w[off++].value[i++] = '\0'; if (dflen == 0 && remain == 0) { @@ -736,6 +771,15 @@ break; } } + + if (cksumvalid == 0) { + /* read-only data bad, clean up */ + for (; off; off--) + free(cfg->vpd.vpd_ros[off].value, M_DEVBUF); + + free(cfg->vpd.vpd_ros, M_DEVBUF); + cfg->vpd.vpd_ros = NULL; + } #undef REG } @@ -1111,12 +1155,12 @@ struct vpd_readonly *vrop; vrop = &cfg->vpd.vpd_ros[i]; if (strncmp("CP", vrop->keyword, 2) == 0) - printf("CP: id %d, BAR%d, off %#x\n", + printf("\tCP: id %d, BAR%d, off %#x\n", vrop->value[0], vrop->value[1], le16toh( *(uint16_t *)&vrop->value[2])); else if (strncmp("RV", vrop->keyword, 2) == 0) - printf("RV: %#hhx\n", vrop->value[0]); + printf("\tRV: %#hhx\n", vrop->value[0]); else printf("\t%.2s: %s\n", vrop->keyword, vrop->value); ==== //depot/projects/newisp/netinet/ip_fw_pfil.c#3 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/netinet/ip_fw_pfil.c,v 1.22 2006/10/20 19:32:08 julian Exp $ + * $FreeBSD: src/sys/netinet/ip_fw_pfil.c,v 1.23 2006/10/21 00:16:31 julian Exp $ */ #if !defined(KLD_MODULE) @@ -80,14 +80,6 @@ /* ng_ipfw hooks. */ ng_ipfw_input_t *ng_ipfw_input_p = NULL; -/* - * ipfw_ether and ipfw_bridge hooks. - * XXX: Temporary until those are converted to pfil_hooks as well. - */ -ip_fw_chk_t *ip_fw_chk_ptr = NULL; -ip_dn_io_t *ip_dn_io_ptr = NULL; -int fw_one_pass = 1; - /* Forward declarations. */ static int ipfw_divert(struct mbuf **, int, int); #define DIV_DIR_IN 1 ==== //depot/projects/newisp/netinet/ip_input.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)ip_input.c 8.2 (Berkeley) 1/4/94 - * $FreeBSD: src/sys/netinet/ip_input.c,v 1.321 2006/10/20 19:32:08 julian Exp $ + * $FreeBSD: src/sys/netinet/ip_input.c,v 1.322 2006/10/21 00:16:31 julian Exp $ */ #include "opt_bootp.h" @@ -77,6 +77,10 @@ #include +/* XXX: Temporary until ipfw_ether and ipfw_bridge are converted. */ +#include +#include + int rsvp_on = 0; int ipforwarding = 0; @@ -188,6 +192,14 @@ &ipstealth, 0, ""); #endif +/* + * ipfw_ether and ipfw_bridge hooks. + * XXX: Temporary until those are converted to pfil_hooks as well. + */ +ip_fw_chk_t *ip_fw_chk_ptr = NULL; +ip_dn_io_t *ip_dn_io_ptr = NULL; +int fw_one_pass = 1; + static void ip_freef(struct ipqhead *, struct ipq *); /*