diff options
author | 2009-06-02 18:06:31 +0000 | |
---|---|---|
committer | 2009-06-02 18:06:31 +0000 | |
commit | 79d84f1b4ffbf58fe0436090d17ba94127b08466 (patch) | |
tree | ceb93fce6cc1a9562b0fa548cb4cc5870f8c5110 | |
parent | Fix the long-standing crash when >NXNAME characters were inserted (diff) | |
download | wireguard-openbsd-79d84f1b4ffbf58fe0436090d17ba94127b08466.tar.xz wireguard-openbsd-79d84f1b4ffbf58fe0436090d17ba94127b08466.zip |
The two "firmware" arrays only contained 16 bit values, but were being
being stored in an array of 32 bits. waste of memory. The bandpass
filter table only contained 16 bit values, but was being treaded as if it
was in an array of 32 bit values, thus what was being loaded into the chip
was totally wrong and this probably explains why I remember it sounded
horrid.
Not tested on real hardware; incorrect array accesses discovered by Parfait
ok oga
-rw-r--r-- | sys/dev/microcode/esa/esadsp.h | 6 | ||||
-rw-r--r-- | sys/dev/pci/esa.c | 8 |
2 files changed, 7 insertions, 7 deletions
diff --git a/sys/dev/microcode/esa/esadsp.h b/sys/dev/microcode/esa/esadsp.h index 52221edf3b4..632890d7dd2 100644 --- a/sys/dev/microcode/esa/esadsp.h +++ b/sys/dev/microcode/esa/esadsp.h @@ -1,4 +1,4 @@ -/* $OpenBSD: esadsp.h,v 1.2 2003/06/26 00:53:43 mickey Exp $ */ +/* $OpenBSD: esadsp.h,v 1.3 2009/06/02 18:06:34 deraadt Exp $ */ /* $NetBSD: esadsp.h,v 1.4 2002/01/07 07:33:09 jmcneill Exp $ */ /* @@ -94,7 +94,7 @@ static const struct rec_vals { { ESA_SRC3_DIRECTION_OFFSET + 22, 0xff} }; -static const u_int32_t esa_assp_kernel_image[] = { +static const u_int16_t esa_assp_kernel_image[] = { 0x7980, 0x0030, 0x7980, 0x03b4, 0x7980, 0x03b4, 0x7980, 0x00fb, 0x7980, 0x00dd, 0x7980, 0x03b4, 0x7980, 0x0332, 0x7980, 0x0287, 0x7980, 0x03b4, 0x7980, 0x03b4, 0x7980, 0x03b4, 0x7980, 0x03b4, @@ -216,7 +216,7 @@ static const u_int32_t esa_assp_kernel_image[] = { 0x0267, 0x0368, 0x0469, 0x056a, 0xbe3a, }; -static const u_int32_t esa_assp_minisrc_image[] = { +static const u_int16_t esa_assp_minisrc_image[] = { 0xbf80, 0x101e, 0x906e, 0x006e, 0x8b88, 0x6980, 0xef88, 0x906f, 0x0d6f, 0x6900, 0xeb08, 0x0412, 0xbc20, 0x696e, 0xb801, 0x906e, 0x7980, 0x0403, 0xb90e, diff --git a/sys/dev/pci/esa.c b/sys/dev/pci/esa.c index 798aa358a1c..0158338ffd2 100644 --- a/sys/dev/pci/esa.c +++ b/sys/dev/pci/esa.c @@ -1,4 +1,4 @@ -/* $OpenBSD: esa.c,v 1.16 2008/10/25 22:30:43 jakemsr Exp $ */ +/* $OpenBSD: esa.c,v 1.17 2009/06/02 18:06:31 deraadt Exp $ */ /* $NetBSD: esa.c,v 1.12 2002/03/24 14:17:35 jmcneill Exp $ */ /* @@ -1333,18 +1333,18 @@ esa_init(struct esa_softc *sc) /* Write kernel code into memory */ size = sizeof(esa_assp_kernel_image); - for (i = 0; i < size / 2; i++) + for (i = 0; i < size; i++) esa_write_assp(sc, ESA_MEMTYPE_INTERNAL_CODE, ESA_REV_B_CODE_MEMORY_BEGIN + i, esa_assp_kernel_image[i]); size = sizeof(esa_assp_minisrc_image); - for (i = 0; i < size / 2; i++) + for (i = 0; i < size; i++) esa_write_assp(sc, ESA_MEMTYPE_INTERNAL_CODE, 0x400 + i, esa_assp_minisrc_image[i]); /* Write the coefficients for the low pass filter */ size = sizeof(esa_minisrc_lpf_image); - for (i = 0; i < size / 2; i++) + for (i = 0; i < size; i++) esa_write_assp(sc, ESA_MEMTYPE_INTERNAL_CODE, 0x400 + ESA_MINISRC_COEF_LOC + i, esa_minisrc_lpf_image[i]); esa_write_assp(sc, ESA_MEMTYPE_INTERNAL_CODE, |