summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hellstrom <unichrome@shipmail.org>2004-12-21 17:13:22 +0000
committerThomas Hellstrom <unichrome@shipmail.org>2004-12-21 17:13:22 +0000
commit02c35ec0a28b4fffcfc09ca444f7dc0c0912216d (patch)
tree988aa44f498d6251ad28d76663ec786e625537d1
parent47c178da08c01501890e23219cbac8319992a453 (diff)
via DRM: Tightened the security for some functions of the
DRM_IOCTL_VIA_DMA_INIT IOCTL. Bumped patchlevel and driver date. XFree86 bug: 2119
-rw-r--r--shared-core/via_dma.c13
-rw-r--r--shared-core/via_drv.h4
-rw-r--r--shared/via.h4
-rw-r--r--shared/via_dma.c13
4 files changed, 24 insertions, 10 deletions
diff --git a/shared-core/via_dma.c b/shared-core/via_dma.c
index ce471a25..cfeb53b8 100644
--- a/shared-core/via_dma.c
+++ b/shared-core/via_dma.c
@@ -191,13 +191,20 @@ int via_dma_init(DRM_IOCTL_ARGS)
switch (init.func) {
case VIA_INIT_DMA:
- retcode = via_initialize(dev, dev_priv, &init);
+ if (!capable(CAP_SYS_ADMIN))
+ retcode = DRM_ERR(EPERM);
+ else
+ retcode = via_initialize(dev, dev_priv, &init);
break;
case VIA_CLEANUP_DMA:
- retcode = via_dma_cleanup(dev);
+ if (!capable(CAP_SYS_ADMIN))
+ retcode = DRM_ERR(EPERM);
+ else
+ retcode = via_dma_cleanup(dev);
break;
case VIA_DMA_INITIALIZED:
- retcode = (dev_priv->ring.virtual_start != NULL) ? 0: DRM_ERR( EFAULT );
+ retcode = (dev_priv->ring.virtual_start != NULL) ?
+ 0: DRM_ERR( EFAULT );
break;
default:
retcode = DRM_ERR(EINVAL);
diff --git a/shared-core/via_drv.h b/shared-core/via_drv.h
index 01d36e4b..b2422fcf 100644
--- a/shared-core/via_drv.h
+++ b/shared-core/via_drv.h
@@ -28,11 +28,11 @@
#define DRIVER_NAME "via"
#define DRIVER_DESC "VIA Unichrome"
-#define DRIVER_DATE "20041220"
+#define DRIVER_DATE "20041221"
#define DRIVER_MAJOR 2
#define DRIVER_MINOR 3
-#define DRIVER_PATCHLEVEL 2
+#define DRIVER_PATCHLEVEL 3
typedef struct drm_via_ring_buffer {
drm_map_t map;
diff --git a/shared/via.h b/shared/via.h
index 960f5e2d..2811d786 100644
--- a/shared/via.h
+++ b/shared/via.h
@@ -30,11 +30,11 @@
#define DRIVER_NAME "via"
#define DRIVER_DESC "VIA Unichrome"
-#define DRIVER_DATE "20041220"
+#define DRIVER_DATE "20041221"
#define DRIVER_MAJOR 2
#define DRIVER_MINOR 3
-#define DRIVER_PATCHLEVEL 2
+#define DRIVER_PATCHLEVEL 3
#define DRIVER_IOCTLS \
[DRM_IOCTL_NR(DRM_IOCTL_VIA_ALLOCMEM)] = { via_mem_alloc, 1, 0 }, \
diff --git a/shared/via_dma.c b/shared/via_dma.c
index a5c4b0a3..000d4b0c 100644
--- a/shared/via_dma.c
+++ b/shared/via_dma.c
@@ -192,13 +192,20 @@ int via_dma_init(DRM_IOCTL_ARGS)
switch (init.func) {
case VIA_INIT_DMA:
- retcode = via_initialize(dev, dev_priv, &init);
+ if (!capable(CAP_SYS_ADMIN))
+ retcode = DRM_ERR(EPERM);
+ else
+ retcode = via_initialize(dev, dev_priv, &init);
break;
case VIA_CLEANUP_DMA:
- retcode = via_dma_cleanup(dev);
+ if (!capable(CAP_SYS_ADMIN))
+ retcode = DRM_ERR(EPERM);
+ else
+ retcode = via_dma_cleanup(dev);
break;
case VIA_DMA_INITIALIZED:
- retcode = (dev_priv->ring.virtual_start != NULL) ? 0: DRM_ERR( EFAULT );
+ retcode = (dev_priv->ring.virtual_start != NULL) ?
+ 0: DRM_ERR( EFAULT );
break;
default:
retcode = DRM_ERR(EINVAL);