lkml.org 
[lkml]   [2020]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 70/91] USB: cdc-acm: restore capability check order
    Date
    From: Matthias Reichl <hias@horus.com>

    commit 62d65bdd9d05158aa2547f8ef72375535f3bc6e3 upstream.

    commit b401f8c4f492c ("USB: cdc-acm: fix rounding error in TIOCSSERIAL")
    introduced a regression by changing the order of capability and close
    settings change checks. When running with CAP_SYS_ADMIN setting the
    close settings to the values already set resulted in -EOPNOTSUPP.

    Fix this by changing the check order back to how it was before.

    Fixes: b401f8c4f492c ("USB: cdc-acm: fix rounding error in TIOCSSERIAL")
    Cc: Anthony Mallet <anthony.mallet@laas.fr>
    Cc: stable <stable@vger.kernel.org>
    Cc: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Matthias Reichl <hias@horus.com>
    Link: https://lore.kernel.org/r/20200327150350.3657-1-hias@horus.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/class/cdc-acm.c | 18 +++++++++---------
    1 file changed, 9 insertions(+), 9 deletions(-)

    --- a/drivers/usb/class/cdc-acm.c
    +++ b/drivers/usb/class/cdc-acm.c
    @@ -876,16 +876,16 @@ static int set_serial_info(struct acm *a

    mutex_lock(&acm->port.mutex);

    - if ((new_serial.close_delay != old_close_delay) ||
    - (new_serial.closing_wait != old_closing_wait)) {
    - if (!capable(CAP_SYS_ADMIN))
    + if (!capable(CAP_SYS_ADMIN)) {
    + if ((new_serial.close_delay != old_close_delay) ||
    + (new_serial.closing_wait != old_closing_wait))
    retval = -EPERM;
    - else {
    - acm->port.close_delay = close_delay;
    - acm->port.closing_wait = closing_wait;
    - }
    - } else
    - retval = -EOPNOTSUPP;
    + else
    + retval = -EOPNOTSUPP;
    + } else {
    + acm->port.close_delay = close_delay;
    + acm->port.closing_wait = closing_wait;
    + }

    mutex_unlock(&acm->port.mutex);
    return retval;

    \
     
     \ /
      Last update: 2020-04-01 18:33    [W:4.129 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site