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]
Message-Id: <0D7C928B-8E3E-4986-A6D2-AFCFF4F0E274@holtmann.org>
Date:   Mon, 28 Jan 2019 13:16:42 +0100
From:   Marcel Holtmann <marcel@...tmann.org>
To:     Myungho Jung <mhjungk@...il.com>
Cc:     Johan Hedberg <johan.hedberg@...il.com>,
        linux-bluetooth@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] Bluetooth: Add NULL check for tiocmget() and tiocmset()

Hi Myungho,

> tiocmget() and tiocmset() operations are optional and some tty drivers
> like pty miss the operations. We need NULL check before referencing
> them.
> 
> Reported-by: syzbot+a950165cbb86bdd023a4@...kaller.appspotmail.com
> Signed-off-by: Myungho Jung <mhjungk@...il.com>
> ---
> drivers/bluetooth/hci_ath.c   | 13 ++++++++-----
> drivers/bluetooth/hci_ldisc.c |  5 +++++
> 2 files changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/bluetooth/hci_ath.c b/drivers/bluetooth/hci_ath.c
> index d568fbd94d6c..076700a1e9a8 100644
> --- a/drivers/bluetooth/hci_ath.c
> +++ b/drivers/bluetooth/hci_ath.c
> @@ -94,11 +94,14 @@ static void ath_hci_uart_work(struct work_struct *work)
> 	hu = ath->hu;
> 	tty = hu->tty;
> 
> -	/* verify and wake up controller */
> -	if (ath->cur_sleep) {
> -		status = ath_wakeup_ar3k(tty);
> -		if (!(status & TIOCM_CTS))
> -			return;
> +	/* tiocmget() and tiocmset() operations are optional */
> +	if (tty->driver->ops->tiocmget && tty->driver->ops->tiocmset) {
> +		/* verify and wake up controller */
> +		if (ath->cur_sleep) {
> +			status = ath_wakeup_ar3k(tty);
> +			if (!(status & TIOCM_CTS))
> +				return;
> +		}
> 	}

actually in case of hci_ath.c I would prefer that the setup actually fails. There is no point in continuing here. These are vendor specific hardware routines and you will not run them over TTYs that don’t support it. So instead of ignoring the operating, fail hard and cleanly during setup.

> 	/* Ready to send Data */
> diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
> index fbf7b4df23ab..9f88a8563cf6 100644
> --- a/drivers/bluetooth/hci_ldisc.c
> +++ b/drivers/bluetooth/hci_ldisc.c
> @@ -314,6 +314,11 @@ void hci_uart_set_flow_control(struct hci_uart *hu, bool enable)
> 		return;
> 	}
> 
> +	/* tiocmget() and tiocmset() operations are optional */
> +	if (!tty->driver->ops->tiocmget || !tty->driver->ops->tiocmset) {
> +		return;
> +	}
> +

No { } here please.

> 	if (enable) {
> 		/* Disable hardware flow control */
> 		ktermios = tty->termios;

Regards

Marcel

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ