From b1df9806f64207f15660eca3bf2ffa702f6e6e87 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Tue, 16 Jun 2009 22:07:46 +0200 Subject: [PATCH] --- yaml --- r: 151481 b: refs/heads/master c: 2f38d70fb4e97e7d00e12eaac45790cf6ebd7b22 h: refs/heads/master i: 151479: 63a3b355594faf657716d88bfb40244162d8b996 v: v3 --- [refs] | 2 +- trunk/fs/fcntl.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 83a153344cda..a8260a4642eb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b3fec0fe35a4ff048484f1408385a27695d4273b +refs/heads/master: 2f38d70fb4e97e7d00e12eaac45790cf6ebd7b22 diff --git a/trunk/fs/fcntl.c b/trunk/fs/fcntl.c index 1ad703150dee..f9c03ca3b2f4 100644 --- a/trunk/fs/fcntl.c +++ b/trunk/fs/fcntl.c @@ -198,15 +198,19 @@ static int setfl(int fd, struct file * filp, unsigned long arg) } static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, - uid_t uid, uid_t euid, int force) + int force) { write_lock_irq(&filp->f_owner.lock); if (force || !filp->f_owner.pid) { put_pid(filp->f_owner.pid); filp->f_owner.pid = get_pid(pid); filp->f_owner.pid_type = type; - filp->f_owner.uid = uid; - filp->f_owner.euid = euid; + + if (pid) { + const struct cred *cred = current_cred(); + filp->f_owner.uid = cred->uid; + filp->f_owner.euid = cred->euid; + } } write_unlock_irq(&filp->f_owner.lock); } @@ -214,14 +218,13 @@ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, int __f_setown(struct file *filp, struct pid *pid, enum pid_type type, int force) { - const struct cred *cred = current_cred(); int err; - + err = security_file_set_fowner(filp); if (err) return err; - f_modown(filp, pid, type, cred->uid, cred->euid, force); + f_modown(filp, pid, type, force); return 0; } EXPORT_SYMBOL(__f_setown); @@ -247,7 +250,7 @@ EXPORT_SYMBOL(f_setown); void f_delown(struct file *filp) { - f_modown(filp, NULL, PIDTYPE_PID, 0, 0, 1); + f_modown(filp, NULL, PIDTYPE_PID, 1); } pid_t f_getown(struct file *filp)