2019-01-28 06:59:40

by Myungho Jung

[permalink] [raw]
Subject: [PATCH] Bluetooth: Add NULL check for tiocmget() and tiocmset()

tiocmget() and tiocmset() operations are optional and some tty drivers
like pty miss the operations. We need NULL check before referencing
them.

Reported-by: [email protected]
Signed-off-by: Myungho Jung <[email protected]>
---
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;
+ }
}

/* 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;
+ }
+
if (enable) {
/* Disable hardware flow control */
ktermios = tty->termios;
--
2.17.1



2019-01-28 12:19:20

by Marcel Holtmann

[permalink] [raw]
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: [email protected]
> Signed-off-by: Myungho Jung <[email protected]>
> ---
> 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


2019-01-30 10:00:51

by Johan Hovold

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Add NULL check for tiocmget() and tiocmset()

On Sun, Jan 27, 2019 at 10:59:13PM -0800, Myungho Jung wrote:
> tiocmget() and tiocmset() operations are optional and some tty drivers
> like pty miss the operations. We need NULL check before referencing
> them.

Good catch. I suggest splitting these fixes in two separate patches
(after addressing Marcel's comments).

Don't forget to CC stable and add a Fixes-tag for each, as we we want to
have this backported to stable.

> Reported-by: [email protected]

Actually, these two bugs were never reported by sysbot AFAIKT so no need
to give credit to anyone else here.

> Signed-off-by: Myungho Jung <[email protected]>
> ---
> drivers/bluetooth/hci_ath.c | 13 ++++++++-----
> drivers/bluetooth/hci_ldisc.c | 5 +++++
> 2 files changed, 13 insertions(+), 5 deletions(-)

Johan

2019-01-31 05:09:32

by Myungho Jung

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Add NULL check for tiocmget() and tiocmset()

On Wed, Jan 30, 2019 at 10:59:38AM +0100, Johan Hovold wrote:
> On Sun, Jan 27, 2019 at 10:59:13PM -0800, Myungho Jung wrote:
> > tiocmget() and tiocmset() operations are optional and some tty drivers
> > like pty miss the operations. We need NULL check before referencing
> > them.
>
> Good catch. I suggest splitting these fixes in two separate patches
> (after addressing Marcel's comments).
>
> Don't forget to CC stable and add a Fixes-tag for each, as we we want to
> have this backported to stable.
>
> > Reported-by: [email protected]
>
> Actually, these two bugs were never reported by sysbot AFAIKT so no need
> to give credit to anyone else here.
>
> > Signed-off-by: Myungho Jung <[email protected]>
> > ---
> > drivers/bluetooth/hci_ath.c | 13 ++++++++-----
> > drivers/bluetooth/hci_ldisc.c | 5 +++++
> > 2 files changed, 13 insertions(+), 5 deletions(-)
>
> Johan

Hi Johan,

Thanks for reviewing my patch. This change is not directly related to the issue
that syzbot reported but the test will keep crashing without this fix because it
will finally reach ath_hci_uart_work(). I updated and resubmitted patch.

Thanks,
Myungho