Commit 961a9b51 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents c57b1f0a cc4a3f88
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -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);
	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);
	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;