Module Name:    src
Committed By:   riastradh
Date:           Sat Dec 24 15:46:50 UTC 2016

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/ttm: ttm_tt.c

Log Message:
Guarantee no zero-size uao/kmem allocations via ttm.

It may be that all callers guarantee no zero-size ttm objects, but I
can't prove that in five minutes of browsing callers.  Rather than
add a KASSERT, lacking proof, we'll add a warning message so that if
it does happen then it happens noisily, but we'll also prevent the
bad consequences of passing zero into uao_create by rounding up to a
harmless nonzero allocation.

XXX pullup-7


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c
diff -u src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c:1.7 src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c:1.8
--- src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c:1.7	Sun Apr 24 04:26:12 2016
+++ src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c	Sat Dec 24 15:46:50 2016
@@ -203,6 +203,9 @@ int ttm_tt_init(struct ttm_tt *ttm, stru
 	ttm->dummy_read_page = dummy_read_page;
 	ttm->state = tt_unpopulated;
 #ifdef __NetBSD__
+	WARN(size == 0, "zero-size allocation in %s, please file a NetBSD PR",
+	    __func__);	/* paranoia -- can't prove in five minutes */
+	size = MAX(size, 1);
 	ttm->swap_storage = uao_create(roundup2(size, PAGE_SIZE), 0);
 	uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(bdev->dmat));
 #else
@@ -245,6 +248,9 @@ int ttm_dma_tt_init(struct ttm_dma_tt *t
 	ttm->dummy_read_page = dummy_read_page;
 	ttm->state = tt_unpopulated;
 #ifdef __NetBSD__
+	WARN(size == 0, "zero-size allocation in %s, please file a NetBSD PR",
+	    __func__);	/* paranoia -- can't prove in five minutes */
+	size = MAX(size, 1);
 	ttm->swap_storage = uao_create(roundup2(size, PAGE_SIZE), 0);
 	uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(bdev->dmat));
 #else

Reply via email to