summaryrefslogtreecommitdiff
path: root/linux-core
diff options
context:
space:
mode:
authorPekka Paalanen <pq@iki.fi>2009-01-27 22:39:50 +0200
committerPekka Paalanen <pq@iki.fi>2009-01-27 23:10:36 +0200
commit26ca0bca9bd5e23b1d31bc6dfb6d58b62143447b (patch)
tree215eccaefe596e6d27b1d7ad78d5e9abe84bc34d /linux-core
parente6a062c21a73ac4ab420648e78c6fe1798de6cbd (diff)
drm compat: fix euid for >=2.6.28
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>
Diffstat (limited to 'linux-core')
-rw-r--r--linux-core/drm_compat.h6
-rw-r--r--linux-core/drm_fops.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/linux-core/drm_compat.h b/linux-core/drm_compat.h
index bc4d2e58..4ae4ba6d 100644
--- a/linux-core/drm_compat.h
+++ b/linux-core/drm_compat.h
@@ -56,6 +56,12 @@
#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
diff --git a/linux-core/drm_fops.c b/linux-core/drm_fops.c
index ec521101..837645ae 100644
--- a/linux-core/drm_fops.c
+++ b/linux-core/drm_fops.c
@@ -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;