summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2008-06-23 00:27:12 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2008-06-23 00:27:12 +0000
commit788529a4a224f51626b98288c3dd81f180fc5f22 (patch)
treece9d65fe31d1af9fb1bf4b017680ba2fee3e8bbb /sys/arch
parenta6056f82f38fafafcaca4ebec4a8184339a2c3ab (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@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/amd64/amd64/bus_dma.c8
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;