| From 64969ed8f81b605f813c24bdbaf1c7cc686565a1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 12 Mar 2020 14:31:00 +0100 |
| Subject: USB: cdc-acm: fix close_delay and closing_wait units in TIOCSSERIAL |
| |
| From: Anthony Mallet <anthony.mallet@laas.fr> |
| |
| [ Upstream commit 633e2b2ded739a34bd0fb1d8b5b871f7e489ea29 ] |
| |
| close_delay and closing_wait are specified in hundredth of a second but stored |
| internally in jiffies. Use the jiffies_to_msecs() and msecs_to_jiffies() |
| functions to convert from each other. |
| |
| Signed-off-by: Anthony Mallet <anthony.mallet@laas.fr> |
| Cc: stable <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20200312133101.7096-1-anthony.mallet@laas.fr |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/class/cdc-acm.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c |
| index 1930a8ec4b67d..3cb7a23e1253f 100644 |
| --- a/drivers/usb/class/cdc-acm.c |
| +++ b/drivers/usb/class/cdc-acm.c |
| @@ -841,10 +841,10 @@ static int get_serial_info(struct acm *acm, struct serial_struct __user *info) |
| tmp.flags = ASYNC_LOW_LATENCY; |
| tmp.xmit_fifo_size = acm->writesize; |
| tmp.baud_base = le32_to_cpu(acm->line.dwDTERate); |
| - tmp.close_delay = acm->port.close_delay / 10; |
| + tmp.close_delay = jiffies_to_msecs(acm->port.close_delay) / 10; |
| tmp.closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ? |
| ASYNC_CLOSING_WAIT_NONE : |
| - acm->port.closing_wait / 10; |
| + jiffies_to_msecs(acm->port.closing_wait) / 10; |
| |
| if (copy_to_user(info, &tmp, sizeof(tmp))) |
| return -EFAULT; |
| @@ -862,9 +862,10 @@ static int set_serial_info(struct acm *acm, |
| if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) |
| return -EFAULT; |
| |
| - close_delay = new_serial.close_delay * 10; |
| + close_delay = msecs_to_jiffies(new_serial.close_delay * 10); |
| closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ? |
| - ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10; |
| + ASYNC_CLOSING_WAIT_NONE : |
| + msecs_to_jiffies(new_serial.closing_wait * 10); |
| |
| mutex_lock(&acm->port.mutex); |
| |
| -- |
| 2.20.1 |
| |