diff mbox series

[4.9.258] futex: fix dead code in attach_to_pi_owner()

Message ID 20210224100923.51315-1-nixiaoming@huawei.com
State New
Headers show
Series [4.9.258] futex: fix dead code in attach_to_pi_owner() | expand

Commit Message

Xiaoming Ni Feb. 24, 2021, 10:09 a.m. UTC
The handle_exit_race() function is defined in commit 9c3f39860367
 ("futex: Cure exit race"), which never returns -EBUSY. This results
in a small piece of dead code in the attach_to_pi_owner() function:

	int ret = handle_exit_race(uaddr, uval, p); /* Never return -EBUSY */
	...
	if (ret == -EBUSY)
		*exiting = p; /* dead code */

The return value -EBUSY is added to handle_exit_race() in upsteam
commit ac31c7ff8624409 ("futex: Provide distinct return value when
owner is exiting"). This commit was incorporated into v4.9.255, before
the function handle_exit_race() was introduced, whitout Modify
handle_exit_race().

To fix dead code, extract the change of handle_exit_race() from
commit ac31c7ff8624409 ("futex: Provide distinct return value when owner
 is exiting"), re-incorporated.

Fixes: 9c3f39860367 ("futex: Cure exit race")
Cc: stable@vger.kernel.org # v4.9.258
Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
---
 kernel/futex.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Lee Jones Feb. 25, 2021, 9:17 a.m. UTC | #1
On Wed, 24 Feb 2021, Xiaoming Ni wrote:

> The handle_exit_race() function is defined in commit 9c3f39860367
>  ("futex: Cure exit race"), which never returns -EBUSY. This results
> in a small piece of dead code in the attach_to_pi_owner() function:
> 
> 	int ret = handle_exit_race(uaddr, uval, p); /* Never return -EBUSY */
> 	...
> 	if (ret == -EBUSY)
> 		*exiting = p; /* dead code */
> 
> The return value -EBUSY is added to handle_exit_race() in upsteam
> commit ac31c7ff8624409 ("futex: Provide distinct return value when
> owner is exiting"). This commit was incorporated into v4.9.255, before
> the function handle_exit_race() was introduced, whitout Modify
> handle_exit_race().
> 
> To fix dead code, extract the change of handle_exit_race() from
> commit ac31c7ff8624409 ("futex: Provide distinct return value when owner
>  is exiting"), re-incorporated.
> 
> Fixes: 9c3f39860367 ("futex: Cure exit race")
> Cc: stable@vger.kernel.org # v4.9.258
> Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
> ---
>  kernel/futex.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

To clarify, this is not a wholesale back-port from Mainline.

It takes the remaining functional snippet of:

 ac31c7ff8624409 ("futex: Provide distinct return value when owner is exiting")

... and is the correct fix for this issue.

Reviewed-by: Lee Jones <lee.jones@linaro.org>

> diff --git a/kernel/futex.c b/kernel/futex.c
> index b65dbb5d60bb..0fd785410150 100644
> --- a/kernel/futex.c
> +++ b/kernel/futex.c
> @@ -1207,11 +1207,11 @@ static int handle_exit_race(u32 __user *uaddr, u32 uval,
>  	u32 uval2;
>  
>  	/*
> -	 * If the futex exit state is not yet FUTEX_STATE_DEAD, wait
> -	 * for it to finish.
> +	 * If the futex exit state is not yet FUTEX_STATE_DEAD, tell the
> +	 * caller that the alleged owner is busy.
>  	 */
>  	if (tsk && tsk->futex_state != FUTEX_STATE_DEAD)
> -		return -EAGAIN;
> +		return -EBUSY;
>  
>  	/*
>  	 * Reread the user space value to handle the following situation:
Greg Kroah-Hartman March 1, 2021, 2:19 p.m. UTC | #2
On Thu, Feb 25, 2021 at 09:17:38AM +0000, Lee Jones wrote:
> On Wed, 24 Feb 2021, Xiaoming Ni wrote:

> 

> > The handle_exit_race() function is defined in commit 9c3f39860367

> >  ("futex: Cure exit race"), which never returns -EBUSY. This results

> > in a small piece of dead code in the attach_to_pi_owner() function:

> > 

> > 	int ret = handle_exit_race(uaddr, uval, p); /* Never return -EBUSY */

> > 	...

> > 	if (ret == -EBUSY)

> > 		*exiting = p; /* dead code */

> > 

> > The return value -EBUSY is added to handle_exit_race() in upsteam

> > commit ac31c7ff8624409 ("futex: Provide distinct return value when

> > owner is exiting"). This commit was incorporated into v4.9.255, before

> > the function handle_exit_race() was introduced, whitout Modify

> > handle_exit_race().

> > 

> > To fix dead code, extract the change of handle_exit_race() from

> > commit ac31c7ff8624409 ("futex: Provide distinct return value when owner

> >  is exiting"), re-incorporated.

> > 

> > Fixes: 9c3f39860367 ("futex: Cure exit race")

> > Cc: stable@vger.kernel.org # v4.9.258

> > Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>

> > ---

> >  kernel/futex.c | 6 +++---

> >  1 file changed, 3 insertions(+), 3 deletions(-)

> 

> To clarify, this is not a wholesale back-port from Mainline.

> 

> It takes the remaining functional snippet of:

> 

>  ac31c7ff8624409 ("futex: Provide distinct return value when owner is exiting")

> 

> ... and is the correct fix for this issue.

> 

> Reviewed-by: Lee Jones <lee.jones@linaro.org>


Thanks, now queued up.

greg k-h
diff mbox series

Patch

diff --git a/kernel/futex.c b/kernel/futex.c
index b65dbb5d60bb..0fd785410150 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1207,11 +1207,11 @@  static int handle_exit_race(u32 __user *uaddr, u32 uval,
 	u32 uval2;
 
 	/*
-	 * If the futex exit state is not yet FUTEX_STATE_DEAD, wait
-	 * for it to finish.
+	 * If the futex exit state is not yet FUTEX_STATE_DEAD, tell the
+	 * caller that the alleged owner is busy.
 	 */
 	if (tsk && tsk->futex_state != FUTEX_STATE_DEAD)
-		return -EAGAIN;
+		return -EBUSY;
 
 	/*
 	 * Reread the user space value to handle the following situation: