Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4463603ybx; Mon, 4 Nov 2019 13:51:22 -0800 (PST) X-Google-Smtp-Source: APXvYqziY7ttLI8B5yFeiNkJSAHMzCJ7kCF5b7WuUEb9RtFTx6N0Dr/JJc9io3zx+PZE8c6JOiEG X-Received: by 2002:a50:f05c:: with SMTP id u28mr31665659edl.265.1572904282464; Mon, 04 Nov 2019 13:51:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572904282; cv=none; d=google.com; s=arc-20160816; b=Ribc6BnFRSFTlU1Jj1XDK1gWRnUrVLqRin4eWIWSmdWecdCW9qXozWRTopahMPaxOo RexNRuDcKiWZDZireFFGut8Qw60VAL7IeekX+zCY3mBx7nJ7UNFQtHCnLyFlN2lepbKE B1hh6JDCvAvRppA803hlzrHFlz7kYbgNGX9fiDgQZIByVderQrS350NMYM4FLtwY2dWH hRh8OTnoZmkyXQ9rftz3ApR1eY61t+UPioXP2WUMunTpxD7dU/XIr35cwAD28boXCkRm 4WnA6qBi5/SXZ+0jDuOuYWoxivQalmRdyDBwfDjnwILUedv/1A3FiF/6d8k3ocmC07/f mLfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=X/AQ5pJ0NxJXjZQy8OwgxNvvfSOKSopjuXEl3h22tA0=; b=sNc8Cz7IvdE9sBr4IVGvaUXuPtmy7dS4wDTAcNDMu8hwCxwNRdw5kL1wOLGaPxFTKE H464B/3Yt2ctG6tWsczp88OTwhYwNYX4h6Um4Tm+kbCLqIhD5xcDlPtzygUpDDjRpCvF ast5ziJ8ShMuGgB7M4jwc9DipG5pUlp650baqzoWr7brEBmbwnUgH7YCZtlXXCWnhYxd NSGpkgKPltBRE8fglv8RkQo2l669AgJNaBiX9IZrln0nnN3yCCvgzEUymIXAC1ChOpI/ R9S40aPqfQG8i/RA0bbYx0aHyPQbqUGX1aSWP6n4sNJ2lsNbLrYyNrUW+7v5f2KGyuG1 l3Sg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2PZ1Ea33; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ay3si101417ejb.408.2019.11.04.13.50.59; Mon, 04 Nov 2019 13:51:22 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2PZ1Ea33; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387482AbfKDVtl (ORCPT + 99 others); Mon, 4 Nov 2019 16:49:41 -0500 Received: from mail.kernel.org ([198.145.29.99]:41094 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387466AbfKDVtj (ORCPT ); Mon, 4 Nov 2019 16:49:39 -0500 Received: from localhost (6.204-14-84.ripe.coltfrance.com [84.14.204.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id BC65C20B7C; Mon, 4 Nov 2019 21:49:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572904178; bh=/Ys8JP9U4GHYI+d6hD1pxpt4rHg0+OqteyS7APFzBx8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2PZ1Ea33lQv/c+XZw654KIwdTMKeHaQiodguyN+y29zTdUcuFvOltC2MTuWwxw9Be 4Ig9b34FvAEAd0MLCIrIOy0Fl8CuajQOLyasI1DaF/xBYDnN3n4sRthk6ORdY4Wwb7 V7KrJ4x7mNmaDozsJXnKl7d08aWTYhv8BfTpsb2I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Johan Hovold Subject: [PATCH 4.4 30/46] USB: ldusb: fix ring-buffer locking Date: Mon, 4 Nov 2019 22:45:01 +0100 Message-Id: <20191104211902.812567843@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104211830.912265604@linuxfoundation.org> References: <20191104211830.912265604@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johan Hovold commit d98ee2a19c3334e9343df3ce254b496f1fc428eb upstream. The custom ring-buffer implementation was merged without any locking or explicit memory barriers, but a spinlock was later added by commit 9d33efd9a791 ("USB: ldusb bugfix"). The lock did not cover the update of the tail index once the entry had been processed, something which could lead to memory corruption on weakly ordered architectures or due to compiler optimisations. Specifically, a completion handler running on another CPU might observe the incremented tail index and update the entry before ld_usb_read() is done with it. Fixes: 2824bd250f0b ("[PATCH] USB: add ldusb driver") Fixes: 9d33efd9a791 ("USB: ldusb bugfix") Cc: stable # 2.6.13 Signed-off-by: Johan Hovold Link: https://lore.kernel.org/r/20191022143203.5260-2-johan@kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/usb/misc/ldusb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/drivers/usb/misc/ldusb.c +++ b/drivers/usb/misc/ldusb.c @@ -499,11 +499,11 @@ static ssize_t ld_usb_read(struct file * retval = -EFAULT; goto unlock_exit; } - dev->ring_tail = (dev->ring_tail+1) % ring_buffer_size; - retval = bytes_to_read; spin_lock_irq(&dev->rbsl); + dev->ring_tail = (dev->ring_tail + 1) % ring_buffer_size; + if (dev->buffer_overflow) { dev->buffer_overflow = 0; spin_unlock_irq(&dev->rbsl);