From 98045170693c31b203a37b78a3b0168c6280d012 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 24 Feb 2009 20:06:34 -0800 Subject: Staging: p9auth: fix credential logic From: Greg Kroah-Hartman current->uid is no longer allowed in the 2.6.29 kernel, so use the proper credential api to be able to alter the uid and euid values. Note, this now builds properly, hopefully still works properly, would be good for someone to test it out... Cc: Ashwin Ganti Signed-off-by: Greg Kroah-Hartman --- drivers/staging/p9auth/p9auth.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) --- a/drivers/staging/p9auth/p9auth.c +++ b/drivers/staging/p9auth/p9auth.c @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include "p9auth.h" int cap_major = CAP_MAJOR; @@ -104,6 +106,7 @@ cap_write(struct file * filp, const char struct list_head *pos; struct cap_dev *dev = filp->private_data; ssize_t retval = -ENOMEM; + struct cred *new; int len, target_int, source_int, flag = 0; char *user_buf, *user_buf_running, *source_user, *target_user, *rand_str, *hash_str, *result; @@ -177,7 +180,7 @@ cap_write(struct file * filp, const char /* Check whether the process writing to capuse is actually owned by * the source owner */ - if (source_int != current->uid) { + if (source_int != current_uid()) { printk(KERN_ALERT "Process is not owned by the source user of the capability.\n"); retval = -EFAULT; @@ -187,8 +190,16 @@ cap_write(struct file * filp, const char * Currently I am changing the effective user id * since most of the authorisation decisions are based on it */ - current->uid = (uid_t) target_int; - current->euid = (uid_t) target_int; + new = prepare_creds(); + if (!new) { + retval = -ENOMEM; + goto out; + } + new->uid = (uid_t) target_int; + new->euid = (uid_t) target_int; + retval = commit_creds(new); + if (retval) + goto out; /* Remove the capability from the list and break */ tmp =