drm/nouveau: do not allow negative sizes for now
authorMaarten Lankhorst <maarten.lankhorst@canonical.com>
Sun, 7 Jul 2013 08:40:19 +0000 (10:40 +0200)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 10 Jul 2013 00:48:07 +0000 (10:48 +1000)
The API allows up to 64-bits allocations, but size is handled as int
inside nouveau almost everywhere. Until this is fixed it's better to
prevent negative sizes.

The 256 kB before INT_MAX is paranoia, because of the large page
aligning below that could flip it above INT_MAX.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_bo.c

index 459a44550ce59feee69f6240ae49d696b54363a7..4e7ee5f4155c96bce6b1091fdf432a6d46140eab 100644 (file)
@@ -198,6 +198,12 @@ nouveau_bo_new(struct drm_device *dev, int size, int align,
        size_t acc_size;
        int ret;
        int type = ttm_bo_type_device;
+       int max_size = INT_MAX & ~((1 << drm->client.base.vm->vmm->lpg_shift) - 1);
+
+       if (size <= 0 || size > max_size) {
+               nv_warn(drm, "skipped size %x\n", (u32)size);
+               return -EINVAL;
+       }
 
        if (sg)
                type = ttm_bo_type_sg;