lkml.org 
[lkml]   [2011]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/6] hci_ath: Fix the mess in this driver
    Date
    From: Alan Cox <alan@linux.intel.com>

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

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

    drivers/bluetooth/hci_ath.c | 26 +++++++++++++-------------
    1 files changed, 13 insertions(+), 13 deletions(-)


    diff --git a/drivers/bluetooth/hci_ath.c b/drivers/bluetooth/hci_ath.c
    index 6a160c1..bd34406 100644
    --- a/drivers/bluetooth/hci_ath.c
    +++ b/drivers/bluetooth/hci_ath.c
    @@ -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;
    }


    \
     
     \ /
      Last update: 2011-02-14 17:59    [W:0.022 / U:0.908 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site