drm compat: fix euid for >=2.6.28
authorPekka Paalanen <pq@iki.fi>
Tue, 27 Jan 2009 20:39:50 +0000 (22:39 +0200)
committerPekka Paalanen <pq@iki.fi>
Tue, 27 Jan 2009 21:10:36 +0000 (23:10 +0200)
drm_fops.c reads the current process' EUID directly from task_struct.
Apparently starting in 2.6.28-rc4 this fails to build.

In Linus' tree, commit b6dff3ec5e116e3af6f537d4caedcad6b9e5082a
"CRED: Separate task security context from task_struct"
moves the euid field from task_struct to another struct.

Earlier commit 9e2b2dc4133f65272a6d3c5dcb2ce63f8a87cae9
"CRED: Introduce credential access wrappers" implements the wrapper
macros to access e.g. euid. This is in 2.6.27-rc4, and this contains the
definition of current_euid() that will be used in the DRM compatibility header
for kernels before 2.6.27. That commit also creates <linux/cred.h>, which
contains the upstream definition of current_euid().

drm_fops.c is fixed to use current_euid(), and drm_compat.h will offer
the compatibility definition for kernels <2.6.27.

Signed-off-by: Pekka Paalanen <pq@iki.fi>
linux-core/drm_compat.h
linux-core/drm_fops.c

index bc4d2e5..4ae4ba6 100644 (file)
 #define module_param(name, type, perm)
 #endif
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
+#define current_euid() (current->euid)
+#else
+#include <linux/cred.h>
+#endif
+
 /* older kernels had different irq args */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
 #undef DRM_IRQ_ARGS
index ec52110..837645a 100644 (file)
@@ -250,7 +250,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
        memset(priv, 0, sizeof(*priv));
        filp->private_data = priv;
        priv->filp = filp;
-       priv->uid = current->euid;
+       priv->uid = current_euid();
        priv->pid = current->pid;
        priv->minor = idr_find(&drm_minors_idr, minor_id);
        priv->ioctl_count = 0;