Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4483966ybx; Mon, 4 Nov 2019 14:11:23 -0800 (PST) X-Google-Smtp-Source: APXvYqwUGSc0bWJpv9XtzW8HgVjIEW6qPyK3di6HBgTdVtyLmLMdYg72i56Vm/02QnuSqay4hkhJ X-Received: by 2002:a17:906:5494:: with SMTP id r20mr25894982ejo.293.1572905483773; Mon, 04 Nov 2019 14:11:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572905483; cv=none; d=google.com; s=arc-20160816; b=pRtpBtPMz9WVqK8a1/ec6m7QMjSJkUbc2J3e327zMtF6O5b0Om2QGr12EbVaOsxV+J y5OI9XdjytbblTITogpNpXzHdnmuUg28rpHi+YYH7ZvQ4DGOOahjIgqV83YoVw4UZ1dE 1JyvBc9J6xGkOid2E/AnSOaK1SImUIrNS1hkgQXsuU2O52xY6RQ2svhejxSVBJ2nKxQm 9l4jePplXdHMCRRYm0qsetliirhDoD38l9fnJfdzCCn7puzRtuqJJDcgT6Rfeu3i4UGa 4mDSnDpD98pnTheKl8w0xNVN0i0BeRq8tElC+9TOjBi+XTHVBBhaIy/SZ4MnBSrWugmw vV5w== 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=gJTgLjDHqw25QLHQUzl1Ji9JJ7rRuMjQiiktQQie2M+OT6wknWy4mqbY5Dn2UegpEE adtyJI0501r/M42F/lUu4+GJoZUnghIcQYfMg7+ctPGjK4oleLwADqLs9w1qRkXkXqf4 MOgnzDdEG3rogGIMUWSsAKjwyfj1mNskSwD7nW1FqPcEfnGQ0hfKTqOlAhSU33i3/udk 3UpjKsNDhl1Z9uaEJ3SeWwjbaWInE6OsGnebmZWIYm2FCAGMrnYSIIzxNmOLhoyJkVDb 3bO4LeUKIrozEwlE3e71U2kvave6921wmqiGzrwwD5QTZBoh/4GTlgwQw2mKx8675l9I bJpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="IT2Gi7E/"; 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 z8si1473009eja.234.2019.11.04.14.11.00; Mon, 04 Nov 2019 14:11:23 -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="IT2Gi7E/"; 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 S2390281AbfKDWIo (ORCPT + 99 others); Mon, 4 Nov 2019 17:08:44 -0500 Received: from mail.kernel.org ([198.145.29.99]:41612 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390274AbfKDWIm (ORCPT ); Mon, 4 Nov 2019 17:08:42 -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 64C61214E0; Mon, 4 Nov 2019 22:08:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572905321; bh=DCUP1rMU0M3Y1yX9lQVOzFNO32AQS16GN6flBTYc580=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IT2Gi7E//NLMX1k+fPubGeIS6AATMf0U3cYBl4e048M7ktvEmhu2BzWbUqGq3bfqi vkuo2r5wwLhyZU8T8aifI3SqnM5PuvRvyhEH5etLoimBXq+SzQRfue7ET8QJ7FJE3S Qs000fwjrw8AGHlnyon+jP6oVD1xocseAyaQFrAo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Johan Hovold Subject: [PATCH 5.3 106/163] USB: ldusb: fix ring-buffer locking Date: Mon, 4 Nov 2019 22:44:56 +0100 Message-Id: <20191104212147.776449557@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104212140.046021995@linuxfoundation.org> References: <20191104212140.046021995@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);