Fix a possible unaligned access to savebyte array.

PR:	kern/122195
This commit is contained in:
Pyun YongHyeon 2010-08-23 21:40:03 +00:00
parent 9ae11bbaa6
commit 820b53e152
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=211721

View File

@ -1476,9 +1476,12 @@ ed_pio_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst)
}
} else {
/* NE2000s are a pain */
unsigned char *data;
uint8_t *data;
int len, wantbyte;
unsigned char savebyte[2];
union {
uint16_t w;
uint8_t b[2];
} saveword;
wantbyte = 0;
@ -1488,9 +1491,9 @@ ed_pio_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst)
data = mtod(m, caddr_t);
/* finish the last word */
if (wantbyte) {
savebyte[1] = *data;
saveword.b[1] = *data;
ed_asic_outw(sc, ED_NOVELL_DATA,
*(u_short *)savebyte);
saveword.w);
data++;
len--;
wantbyte = 0;
@ -1504,7 +1507,7 @@ ed_pio_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst)
}
/* save last byte, if necessary */
if (len == 1) {
savebyte[0] = *data;
saveword.b[0] = *data;
wantbyte = 1;
}
}
@ -1512,7 +1515,7 @@ ed_pio_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst)
}
/* spit last byte */
if (wantbyte)
ed_asic_outw(sc, ED_NOVELL_DATA, *(u_short *)savebyte);
ed_asic_outw(sc, ED_NOVELL_DATA, saveword.w);
}
/*