Re: cdc-acm: v4.6-rc1: Kernel panic in acm_start_wb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2016-04-04 at 12:31 +0200, Torsten Hilbrich wrote:

> commit a81cf9799ad7299b03a4dff020d9685f9ac5f3e0
> Author: Oliver Neukum <oneukum@xxxxxxxx>
> Date:   Wed Feb 10 10:39:49 2016 +0100
> 
>     cdc-acm: implement put_char() and flush_chars()

Hi,

does this fix the issue?

	Regards
		Oliver

From e533cede8ccb9f5778f7894ee039f63ac083a334 Mon Sep 17 00:00:00 2001
From: Oliver Neukum <oneukum@xxxxxxxx>
Date: Mon, 4 Apr 2016 13:04:44 +0200
Subject: [PATCH] cdc-acm: fix crash if flushed with nothing buffered

Under some circumstances acm_tty_flush_chars() is called
with no buffer to flush. We simply need to do nothing.

Signed-off-by: Oliver Neukum <ONeukum@xxxxxxxx>
Reported-by: Torsten Hilbrich <torsten.hilbrich@xxxxxxxxxxx>
---
 drivers/usb/class/cdc-acm.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 83fd30b..a6c4a1b 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -744,11 +744,15 @@ static void acm_tty_flush_chars(struct tty_struct *tty)
 	int err;
 	unsigned long flags;
 
+	if (!cur) /* nothing to do */
+		return;
+
 	acm->putbuffer = NULL;
 	err = usb_autopm_get_interface_async(acm->control);
 	spin_lock_irqsave(&acm->write_lock, flags);
 	if (err < 0) {
 		cur->use = 0;
+		acm->putbuffer = cur;
 		goto out;
 	}
 
-- 
2.1.4


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux