Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2/dist/drm/ttm Guarantee no zero-size ua...



details:   https://anonhg.NetBSD.org/src/rev/bdf7cc0d18e0
branches:  trunk
changeset: 819950:bdf7cc0d18e0
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Sat Dec 24 15:46:50 2016 +0000

description:
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

diffstat:

 sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c |  6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diffs (23 lines):

diff -r 45802b1e6659 -r bdf7cc0d18e0 sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c
--- a/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c       Sat Dec 24 15:42:05 2016 +0000
+++ b/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c       Sat Dec 24 15:46:50 2016 +0000
@@ -203,6 +203,9 @@
        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 @@
        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



Home | Main Index | Thread Index | Old Index