Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78b4a56c authored by Jiejing Zhang's avatar Jiejing Zhang Committed by Gustavo Padovan
Browse files

Bluetooth: hci_uart: check the return value of recv()



Check the return value of hu->proto->recv() in hci_uart_tty_receive()
the recv() may return error, check it, not add this to statistics.

Signed-off-by: default avatarJiejing Zhang <jiejing.zhang@freescale.com>
Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
parent e1ba1f15
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -201,8 +201,13 @@ static struct sk_buff *ath_dequeue(struct hci_uart *hu)
/* Recv data */
static int ath_recv(struct hci_uart *hu, void *data, int count)
{
	if (hci_recv_stream_fragment(hu->hdev, data, count) < 0)
	int ret;

	ret = hci_recv_stream_fragment(hu->hdev, data, count);
	if (ret < 0) {
		BT_ERR("Frame Reassembly Failed");
		return ret;
	}

	return count;
}
+4 −2
Original line number Diff line number Diff line
@@ -359,6 +359,7 @@ static void hci_uart_tty_wakeup(struct tty_struct *tty)
 */
static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *flags, int count)
{
	int ret;
	struct hci_uart *hu = (void *)tty->disc_data;

	if (!hu || tty != hu->tty)
@@ -368,7 +369,8 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data, char *f
		return;

	spin_lock(&hu->rx_lock);
	hu->proto->recv(hu, (void *) data, count);
	ret = hu->proto->recv(hu, (void *) data, count);
	if (ret > 0)
		hu->hdev->stat.byte_rx += count;
	spin_unlock(&hu->rx_lock);