PERFORCE change 108207 for review
Matt Jacob
mjacob at FreeBSD.org
Fri Oct 20 20:22:20 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=108207
Change 108207 by mjacob at 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 <sys/cdefs.h>
-__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 <sys/types.h>
@@ -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 <sys/cdefs.h>
-__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 <sys/socketvar.h>
+/* XXX: Temporary until ipfw_ether and ipfw_bridge are converted. */
+#include <netinet/ip_fw.h>
+#include <netinet/ip_dummynet.h>
+
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 *);
/*
More information about the p4-projects
mailing list