Testing has shown 1. race conditions in the multithreaded use case 2. a vulnerability against malicious hardware 3. a minor race against disconnect() in flush() in the CDC-WDM driver. All have a common cause in the interactions of the flush() method with other parts of the driver. Hence they require a common rework of the flush() method. Long and exhaustive discussion and testing of these changes, however, revealed that they in turn introduce problems with error reporting and long periods of uninterruptible sleep. Those require further changes to flush() and the implementation of fsync(). The issue dates back to the introduction of the driver so the fixes also should go into stable. Signed-off-by: Oliver Neukum <oneukum@xxxxxxxx>