diff options
author | Keith Packard <keithp@keithp.com> | 2008-05-02 17:13:11 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2008-05-02 17:13:11 -0700 |
commit | 5f0614b86ff5760016bef87c6f6012fe4f42e14e (patch) | |
tree | 5b19b903f50d2938a52fe02d6b3517ffb80ebbab /linux-core/drm_gem.c | |
parent | ab3549d1336fc6c08581a9fd14a83513649d9187 (diff) |
Check for do_mmap errors
Diffstat (limited to 'linux-core/drm_gem.c')
-rw-r--r-- | linux-core/drm_gem.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/linux-core/drm_gem.c b/linux-core/drm_gem.c index db12f9a6..80d5a350 100644 --- a/linux-core/drm_gem.c +++ b/linux-core/drm_gem.c @@ -306,6 +306,7 @@ drm_gem_mmap_ioctl(struct drm_device *dev, void *data, struct drm_gem_mmap *args = data; struct drm_gem_object *obj; loff_t offset; + unsigned long addr; if (!(dev->driver->driver_features & DRIVER_GEM)) return -ENODEV; @@ -317,12 +318,15 @@ drm_gem_mmap_ioctl(struct drm_device *dev, void *data, offset = args->offset; down_write(¤t->mm->mmap_sem); - args->addr_ptr = (uint64_t) do_mmap(obj->filp, 0, args->size, - PROT_READ | PROT_WRITE, MAP_SHARED, - args->offset); + addr = do_mmap(obj->filp, 0, args->size, + PROT_READ | PROT_WRITE, MAP_SHARED, + args->offset); up_write(¤t->mm->mmap_sem); - drm_gem_object_unreference(obj); + if (IS_ERR((void *)addr)) + return (int) addr; + + args->addr_ptr = (uint64_t) addr; return 0; } |