Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4494722ybx; Mon, 4 Nov 2019 14:21:08 -0800 (PST) X-Google-Smtp-Source: APXvYqwjCYH/7nNQP67OIeCCyGd7NHOdmWOwRtHlppeOe5wvlgHWXE7Jl41bOSLJ3QDCMKwpmyre X-Received: by 2002:a17:906:27c5:: with SMTP id k5mr25756708ejc.173.1572906068717; Mon, 04 Nov 2019 14:21:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572906068; cv=none; d=google.com; s=arc-20160816; b=SSIFDDe7UB2zYK5Fe80vWpyzb7gf6y4/NYH2PetrQGRHug/6JqagqWEtZ2z0C+X9Z/ 2ocLHwwxZAOyuV8NqBuDZx4yL1ZYQo5zoB47hNBww2gCc9TprygQmE/5Mz+EzHdQzTv7 cUA2zHNN0ehZROASA8zHy922MSEX0ZwFDxds7wG2DaRLit3Wbv/A2KQOmmT4EomfTHsg nvF1LgphFtK2TxhsYXYF13iH4T6H02ot6Km8f2ofkQtXyzE2k8iDCEvX0xtC7B6JpBse yvDzpZKgyXpcydlASc3QT8WBmEYuzglorWooo0nr6GFynBJStnP4q/6t1LTxTOpV2j8Q Qisw== 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=c1TvueVX67rzaC07iiamcDImYp+J59EQ4JoDXeKXHg4=; b=OIb4uYpRwhFAGo4XRHQZTzOHhNjb0o8KW8ERrpcq9Uj6KLR1hgQClkIX1HDy7SpEJW FV5FBcSPqC/7VzdfjycnNvEI5jZOW0ouEKB0YEigbfpHeciPLWkWfSiFK1DSFDCqDGXm Dq3pVsbZnyuGzYCR0iWyaNSs2YSkEWLY5pzVtlkNehMEMJFV1UY194uH4sH78zTDFBOS E59ul5zt46QCLmsGyd5uaEBlUQdP/MIiMW4LZIuqS0EU3cotm9GwSzy3DiBFPxyDZAzn y4zPVWDtMacld+1z8NQsAHfDYimFa4/RimlSipuDyNyK21MRuSmweWTaZotb7Jx2UV0d waMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jze5VVGX; 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 q5si3352898ejz.344.2019.11.04.14.20.45; Mon, 04 Nov 2019 14:21:08 -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=jze5VVGX; 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 S2389985AbfKDWSN (ORCPT + 99 others); Mon, 4 Nov 2019 17:18:13 -0500 Received: from mail.kernel.org ([198.145.29.99]:60366 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389197AbfKDWCE (ORCPT ); Mon, 4 Nov 2019 17:02:04 -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 68A1E20659; Mon, 4 Nov 2019 22:02:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572904923; bh=DCUP1rMU0M3Y1yX9lQVOzFNO32AQS16GN6flBTYc580=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jze5VVGXcmhEvW2vXZX6nTZ5beiw+UzRyMhIHmNE3TS0fO51TM3nx4w0gj5Txq6ab 26eq35/ey/IROJMC3gW4Zkf+cV2SbH/IBOetuAeo0SSYZrrGTeKio9Oh3Ng6kFfplU BWBpV4QNxt5OL1I4auXKe/SlWjY+1+puSnUeobjA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Johan Hovold Subject: [PATCH 4.19 117/149] USB: ldusb: fix ring-buffer locking Date: Mon, 4 Nov 2019 22:45:10 +0100 Message-Id: <20191104212144.528426176@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104212126.090054740@linuxfoundation.org> References: <20191104212126.090054740@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 @@ -495,11 +495,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);