Author: nwhitehorn
Date: Wed Oct 2 15:00:04 2013
New Revision: 255990
URL: http://svnweb.freebsd.org/changeset/base/255990
Log:
MFC r255614,255639:
Fix bug in busdma: if segs is a preexisting buffer, we memcpy it
into the DMA map. The length of the buffer had not yet been
initialized, however, so this would copy gibberish unless it
happened to be right by chance. This bug mostly only affected
systems with IOMMUs.
Modified:
stable/9/sys/powerpc/powerpc/busdma_machdep.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/powerpc/powerpc/busdma_machdep.c
==============================================================================
--- stable/9/sys/powerpc/powerpc/busdma_machdep.c Wed Oct 2 14:43:17
2013 (r255989)
+++ stable/9/sys/powerpc/powerpc/busdma_machdep.c Wed Oct 2 15:00:04
2013 (r255990)
@@ -843,16 +843,19 @@ _bus_dmamap_complete(bus_dma_tag_t dmat,
bus_dma_segment_t *segs, int nsegs, int error)
{
+ map->nsegs = nsegs;
if (segs != NULL)
memcpy(map->segments, segs, map->nsegs*sizeof(segs[0]));
- else
- segs = map->segments;
- map->nsegs = nsegs;
if (dmat->iommu != NULL)
IOMMU_MAP(dmat->iommu, map->segments, &map->nsegs,
dmat->lowaddr, dmat->highaddr, dmat->alignment,
dmat->boundary, dmat->iommu_cookie);
+ if (segs != NULL)
+ memcpy(segs, map->segments, map->nsegs*sizeof(segs[0]));
+ else
+ segs = map->segments;
+
return (segs);
}
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "[email protected]"