diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2008-06-23 00:27:12 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2008-06-23 00:27:12 +0000 |
commit | 788529a4a224f51626b98288c3dd81f180fc5f22 (patch) | |
tree | ce9d65fe31d1af9fb1bf4b017680ba2fee3e8bbb | |
parent | a6056f82f38fafafcaca4ebec4a8184339a2c3ab (diff) |
amd64s bus_dma internals use a pointer to a lastaddr variable to keep
track of where it was up to when building dmamaps. that lastaddr variable
is not initialised every time you start to load a dmamap, so it was using
random stack garbage as state when first writing the sg list.
fortunately the way it was used meant it was extremely unlikely to cause a
problem, but why allow even that possibility? this inits lastaddr to 0 in
all the callers of load_buffer.
ok miod@
-rw-r--r-- | sys/arch/amd64/amd64/bus_dma.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/arch/amd64/amd64/bus_dma.c b/sys/arch/amd64/amd64/bus_dma.c index b09e63dc11d..37459ac7b8a 100644 --- a/sys/arch/amd64/amd64/bus_dma.c +++ b/sys/arch/amd64/amd64/bus_dma.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bus_dma.c,v 1.10 2007/09/17 15:34:38 chl Exp $ */ +/* $OpenBSD: bus_dma.c,v 1.11 2008/06/23 00:27:11 dlg Exp $ */ /* $NetBSD: bus_dma.c,v 1.3 2003/05/07 21:33:58 fvdl Exp $ */ /*- @@ -189,7 +189,7 @@ int _bus_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf, bus_size_t buflen, struct proc *p, int flags) { - bus_addr_t lastaddr; + bus_addr_t lastaddr = 0; int seg, error; /* @@ -218,7 +218,7 @@ int _bus_dmamap_load_mbuf(bus_dma_tag_t t, bus_dmamap_t map, struct mbuf *m0, int flags) { - paddr_t lastaddr; + paddr_t lastaddr = 0; int seg, error, first; struct mbuf *m; @@ -260,7 +260,7 @@ int _bus_dmamap_load_uio(bus_dma_tag_t t, bus_dmamap_t map, struct uio *uio, int flags) { - paddr_t lastaddr; + paddr_t lastaddr = 0; int seg, i, error, first; bus_size_t minlen, resid; struct proc *p = NULL; |