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

Commit afaae084 authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman
Browse files

hci_ath: Fix the mess in this driver



Was this exploitable - who knows, but it was certainly totally broken

Signed-of-by: default avatarAlan Cox <alan@linux.intel.com>

Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8d075b19
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -51,32 +51,32 @@ struct ath_struct {

static int ath_wakeup_ar3k(struct tty_struct *tty)
{
	struct termios settings;
	int status = tty->driver->ops->tiocmget(tty, NULL);
	struct ktermios ktermios;
	int status = tty->driver->ops->tiocmget(tty);

	if (status & TIOCM_CTS)
		return status;

	/* Disable Automatic RTSCTS */
	n_tty_ioctl_helper(tty, NULL, TCGETS, (unsigned long)&settings);
	settings.c_cflag &= ~CRTSCTS;
	n_tty_ioctl_helper(tty, NULL, TCSETS, (unsigned long)&settings);
	memcpy(&ktermios, tty->termios, sizeof(ktermios));
	ktermios.c_cflag &= ~CRTSCTS;
	tty_set_termios(tty, &ktermios);

	/* Clear RTS first */
	status = tty->driver->ops->tiocmget(tty, NULL);
	tty->driver->ops->tiocmset(tty, NULL, 0x00, TIOCM_RTS);
	status = tty->driver->ops->tiocmget(tty);
	tty->driver->ops->tiocmset(tty, 0x00, TIOCM_RTS);
	mdelay(20);

	/* Set RTS, wake up board */
	status = tty->driver->ops->tiocmget(tty, NULL);
	tty->driver->ops->tiocmset(tty, NULL, TIOCM_RTS, 0x00);
	status = tty->driver->ops->tiocmget(tty);
	tty->driver->ops->tiocmset(tty, TIOCM_RTS, 0x00);
	mdelay(20);

	status = tty->driver->ops->tiocmget(tty, NULL);
	status = tty->driver->ops->tiocmget(tty);

	n_tty_ioctl_helper(tty, NULL, TCGETS, (unsigned long)&settings);
	settings.c_cflag |= CRTSCTS;
	n_tty_ioctl_helper(tty, NULL, TCSETS, (unsigned long)&settings);
	/* Disable Automatic RTSCTS */
	ktermios.c_cflag |= CRTSCTS;
	status = tty_set_termios(tty, &ktermios);

	return status;
}