Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4468910ybx; Mon, 4 Nov 2019 13:57:22 -0800 (PST) X-Google-Smtp-Source: APXvYqzPgVl38Pkds/mu3+C0xmvfZ7S3d+TynY4oxW3G0Y8UdNmLy02LaOuEJwQLFUyUQHCfIuko X-Received: by 2002:a17:906:198c:: with SMTP id g12mr15130267ejd.247.1572904642864; Mon, 04 Nov 2019 13:57:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572904642; cv=none; d=google.com; s=arc-20160816; b=0crYIqiziSP2dEFUsjJvn+YszOx9GwQ7c6KM1RsoHHBt8uqVIMYRL5wnpKmz1gjIle eEPBZceFOzqGQhW2mI4DWcE3q6K2WXDD7gHNS9rp3ZISEp975pZJhdflowBIBHnyyhTN hN7mqrIYov2bChaxDYL8G+rzdQDwtsByasrwzwzV2o3cOHDZp+PhpjGBuQca5FtUr+vW HijwM2/sYjyKvRzWEKWMcA4vojWG49BY9oR2jMxFdkCFcz+fb+5BQ1vN46CQp0kOdANx 4RTHGt9ohQn68G8pED0qzyqoKY3H0+TqZiCnnr0iab7B8nDW+z++WHQUKUneJZdvMieU i44A== 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=4VVJ1b880NzbH2p9UjFVit4EI1yj0s2GjRN4QOZSWzg=; b=OFDb+77cAVLDxQRk2PfD3EYgBMLjQtd8Z6L80s8tVMDgHJOeawkFpl7MreuuJ5aXIq 0O8W1c2qco4bkDjsKZchcw3IHuPlaMD/eVxGatu6uolt1DvkY6sQD1nklojVy7pciJnQ 7qC5k3JJ5f7Pe8pKGJRT7xGk7UBKlbggEClDntaT3rdTlOgTM675nnHyBUcnU0aB+twa Tg3DeOrKwx/lvCzUxpHEUcANYgKjSl63cJNnl79boo98/O9fx0JytO29BvdKX9IYI8Rg pVnfaq2wHFAeJ2hmnTWYsvvkzdrWpSmMSfXtMwqbau1Tu7EWbExBGibtO48Ydh7c/PRM M9TQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=JQHDR7Zj; 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 g20si8504778eda.229.2019.11.04.13.57.00; Mon, 04 Nov 2019 13:57: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=JQHDR7Zj; 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 S2388112AbfKDVzL (ORCPT + 99 others); Mon, 4 Nov 2019 16:55:11 -0500 Received: from mail.kernel.org ([198.145.29.99]:50296 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388075AbfKDVzJ (ORCPT ); Mon, 4 Nov 2019 16:55:09 -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 99930217F4; Mon, 4 Nov 2019 21:55:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572904509; bh=UV1M5/gA4SkMgON+EcMHEN4/oOwh67vj+z8Wz/ZKckc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JQHDR7ZjEjWsfn3cB2KeAyPoF3lMgSFeGO1+fUv4cJCcMOz0PGIXQIiHrPbejw0Zn xD49dsxm1Vm0R9Vu+BoorIy4sXoot8QgIoGiyz3INh8WmK5dxjSDfeH1DlupvzNueu NwtlcGtt3rErgRNBPGDEbm0d8hlwtS69h8JOFq+A= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Johan Hovold Subject: [PATCH 4.14 70/95] USB: ldusb: fix ring-buffer locking Date: Mon, 4 Nov 2019 22:45:08 +0100 Message-Id: <20191104212113.778507135@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104212038.056365853@linuxfoundation.org> References: <20191104212038.056365853@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 @@ -498,11 +498,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);