Merge tag 'locks-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux
Pull fcntl fix from Jeff Layton. * tag 'locks-v5.12' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux: fcntl: make F_GETOWN(EX) return 0 on dead owner task
This commit is contained in:
+13
-6
@@ -148,11 +148,15 @@ void f_delown(struct file *filp)
|
||||
|
||||
pid_t f_getown(struct file *filp)
|
||||
{
|
||||
pid_t pid;
|
||||
pid_t pid = 0;
|
||||
read_lock(&filp->f_owner.lock);
|
||||
pid = pid_vnr(filp->f_owner.pid);
|
||||
if (filp->f_owner.pid_type == PIDTYPE_PGID)
|
||||
pid = -pid;
|
||||
rcu_read_lock();
|
||||
if (pid_task(filp->f_owner.pid, filp->f_owner.pid_type)) {
|
||||
pid = pid_vnr(filp->f_owner.pid);
|
||||
if (filp->f_owner.pid_type == PIDTYPE_PGID)
|
||||
pid = -pid;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
read_unlock(&filp->f_owner.lock);
|
||||
return pid;
|
||||
}
|
||||
@@ -200,11 +204,14 @@ static int f_setown_ex(struct file *filp, unsigned long arg)
|
||||
static int f_getown_ex(struct file *filp, unsigned long arg)
|
||||
{
|
||||
struct f_owner_ex __user *owner_p = (void __user *)arg;
|
||||
struct f_owner_ex owner;
|
||||
struct f_owner_ex owner = {};
|
||||
int ret = 0;
|
||||
|
||||
read_lock(&filp->f_owner.lock);
|
||||
owner.pid = pid_vnr(filp->f_owner.pid);
|
||||
rcu_read_lock();
|
||||
if (pid_task(filp->f_owner.pid, filp->f_owner.pid_type))
|
||||
owner.pid = pid_vnr(filp->f_owner.pid);
|
||||
rcu_read_unlock();
|
||||
switch (filp->f_owner.pid_type) {
|
||||
case PIDTYPE_PID:
|
||||
owner.type = F_OWNER_TID;
|
||||
|
||||
Reference in New Issue
Block a user