lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 24 Mar 2017 14:11:26 -0700
From:   Darren Hart <dvhart@...radead.org>
To:     Peter Zijlstra <peterz@...radead.org>
Cc:     tglx@...utronix.de, mingo@...nel.org, juri.lelli@....com,
        rostedt@...dmis.org, xlpang@...hat.com, bigeasy@...utronix.de,
        linux-kernel@...r.kernel.org, mathieu.desnoyers@...icios.com,
        jdesfossez@...icios.com, bristot@...hat.com
Subject: Re: [PATCH -v6 01/13] futex: Cleanup variable names for
 futex_top_waiter()

On Wed, Mar 22, 2017 at 11:35:48AM +0100, Peter Zijlstra wrote:
> futex_top_waiter() returns the top-waiter on the pi_mutex. Assinging
> this to a variable 'match' totally obscures the code.
> 
> Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org>

Yup, still happy to see this one.

Reviewed-by: Darren Hart (VMware) <dvhart@...radead.org>

> ---
>  kernel/futex.c |   30 +++++++++++++++---------------
>  1 file changed, 15 insertions(+), 15 deletions(-)
> 
> --- a/kernel/futex.c
> +++ b/kernel/futex.c
> @@ -1120,14 +1120,14 @@ static int attach_to_pi_owner(u32 uval,
>  static int lookup_pi_state(u32 uval, struct futex_hash_bucket *hb,
>  			   union futex_key *key, struct futex_pi_state **ps)
>  {
> -	struct futex_q *match = futex_top_waiter(hb, key);
> +	struct futex_q *top_waiter = futex_top_waiter(hb, key);
>  
>  	/*
>  	 * If there is a waiter on that futex, validate it and
>  	 * attach to the pi_state when the validation succeeds.
>  	 */
> -	if (match)
> -		return attach_to_pi_state(uval, match->pi_state, ps);
> +	if (top_waiter)
> +		return attach_to_pi_state(uval, top_waiter->pi_state, ps);
>  
>  	/*
>  	 * We are the first waiter - try to look up the owner based on
> @@ -1174,7 +1174,7 @@ static int futex_lock_pi_atomic(u32 __us
>  				struct task_struct *task, int set_waiters)
>  {
>  	u32 uval, newval, vpid = task_pid_vnr(task);
> -	struct futex_q *match;
> +	struct futex_q *top_waiter;
>  	int ret;
>  
>  	/*
> @@ -1200,9 +1200,9 @@ static int futex_lock_pi_atomic(u32 __us
>  	 * Lookup existing state first. If it exists, try to attach to
>  	 * its pi_state.
>  	 */
> -	match = futex_top_waiter(hb, key);
> -	if (match)
> -		return attach_to_pi_state(uval, match->pi_state, ps);
> +	top_waiter = futex_top_waiter(hb, key);
> +	if (top_waiter)
> +		return attach_to_pi_state(uval, top_waiter->pi_state, ps);
>  
>  	/*
>  	 * No waiter and user TID is 0. We are here because the
> @@ -1292,11 +1292,11 @@ static void mark_wake_futex(struct wake_
>  	q->lock_ptr = NULL;
>  }
>  
> -static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this,
> +static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *top_waiter,
>  			 struct futex_hash_bucket *hb)
>  {
>  	struct task_struct *new_owner;
> -	struct futex_pi_state *pi_state = this->pi_state;
> +	struct futex_pi_state *pi_state = top_waiter->pi_state;
>  	u32 uninitialized_var(curval), newval;
>  	DEFINE_WAKE_Q(wake_q);
>  	bool deboost;
> @@ -1317,11 +1317,11 @@ static int wake_futex_pi(u32 __user *uad
>  
>  	/*
>  	 * It is possible that the next waiter (the one that brought
> -	 * this owner to the kernel) timed out and is no longer
> +	 * top_waiter owner to the kernel) timed out and is no longer
>  	 * waiting on the lock.
>  	 */
>  	if (!new_owner)
> -		new_owner = this->task;
> +		new_owner = top_waiter->task;
>  
>  	/*
>  	 * We pass it to the next owner. The WAITERS bit is always
> @@ -2631,7 +2631,7 @@ static int futex_unlock_pi(u32 __user *u
>  	u32 uninitialized_var(curval), uval, vpid = task_pid_vnr(current);
>  	union futex_key key = FUTEX_KEY_INIT;
>  	struct futex_hash_bucket *hb;
> -	struct futex_q *match;
> +	struct futex_q *top_waiter;
>  	int ret;
>  
>  retry:
> @@ -2655,9 +2655,9 @@ static int futex_unlock_pi(u32 __user *u
>  	 * all and we at least want to know if user space fiddled
>  	 * with the futex value instead of blindly unlocking.
>  	 */
> -	match = futex_top_waiter(hb, &key);
> -	if (match) {
> -		ret = wake_futex_pi(uaddr, uval, match, hb);
> +	top_waiter = futex_top_waiter(hb, &key);
> +	if (top_waiter) {
> +		ret = wake_futex_pi(uaddr, uval, top_waiter, hb);
>  		/*
>  		 * In case of success wake_futex_pi dropped the hash
>  		 * bucket lock.
> 
> 
> 

-- 
Darren Hart
VMware Open Source Technology Center

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ