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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 07 Feb 2013 16:11:52 +0100
From:	Jiri Slaby <jslaby@...e.cz>
To:	Peter Hurley <peter@...leysoftware.com>
CC:	Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
	Alan Cox <alan@...ux.intel.com>,
	Sasha Levin <levinsasha928@...il.com>,
	Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
	linux-serial@...r.kernel.org, linux-kernel@...r.kernel.org,
	Ilya Zykov <ilya@...x.ru>, Dave Jones <davej@...hat.com>
Subject: Re: [PATCH v3 04/23] tty: Refactor wait for ldisc refs out of tty_ldisc_hangup()

On 02/05/2013 09:20 PM, Peter Hurley wrote:
> Refactor tty_ldisc_hangup() to extract standalone function,
> tty_ldisc_hangup_wait_idle(), to wait for ldisc references
> to be released.
> 
> Signed-off-by: Peter Hurley <peter@...leysoftware.com>
> ---
>  drivers/tty/tty_ldisc.c | 54 ++++++++++++++++++++++++++++++++-----------------
>  1 file changed, 36 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
> index 904bf75..70d2b86 100644
> --- a/drivers/tty/tty_ldisc.c
> +++ b/drivers/tty/tty_ldisc.c
> @@ -551,6 +551,41 @@ static int tty_ldisc_halt(struct tty_struct *tty)
>  }
>  
>  /**
> + *	tty_ldisc_hangup_wait_idle - wait for the ldisc to become idle
> + *	@tty: tty to wait for
> + *
> + *	Wait for the line discipline to become idle. The discipline must
> + *	have been halted for this to guarantee it remains idle.
> + *
> + *	Caller must hold legacy and ->ldisc_mutex.
> + */
> +static bool tty_ldisc_hangup_wait_idle(struct tty_struct *tty)
> +{
> +	while (tty->ldisc) {	/* Not yet closed */
> +		if (atomic_read(&tty->ldisc->users) != 1) {
> +			char cur_n[TASK_COMM_LEN], tty_n[64];
> +			long timeout = 3 * HZ;
> +			tty_unlock(tty);
> +
> +			while (tty_ldisc_wait_idle(tty, timeout) == -EBUSY) {
> +				timeout = MAX_SCHEDULE_TIMEOUT;
> +				printk_ratelimited(KERN_WARNING
> +					"%s: waiting (%s) for %s took too long, but we keep waiting...\n",
> +					__func__, get_task_comm(cur_n, current),
> +					tty_name(tty, tty_n));
> +			}
> +			/* must reacquire both locks and preserve lock order */
> +			mutex_unlock(&tty->ldisc_mutex);
> +			tty_lock(tty);
> +			mutex_lock(&tty->ldisc_mutex);
> +			continue;
> +		}
> +		break;

That continue and break at the end of the loop look weird.

What about:
while (tty->ldisc) {
  if (atomic_read(&tty->ldisc->users) == 1)
     break;
  THE_REST_OF_THE_BODY_WITHOUT_CONTINUE
}

Or even:
while (tty->ldisc && atomic_read(&tty->ldisc->users) != 1) {
  THE_REST_OF_THE_BODY_WITHOUT_CONTINUE
}

For me, this does not look so hard to understand as it is w/ cont+brk now.

And now, when we have a separate function, the declarations would look
nicer to be at the beginning of the function.

> +	}
> +	return !!(tty->ldisc);

Just a nit, the parenthesis are not needed.

-- 
js
suse labs
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ