Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2176970imm; Mon, 28 May 2018 03:17:26 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqE2eCBJTWUgsXZbl3JhIBC/1pmOlgODZMoVe1KBCdQZPiBJ3w5V6sF1frKRTDunTS8ktKP X-Received: by 2002:a63:7f07:: with SMTP id a7-v6mr10097418pgd.173.1527502646830; Mon, 28 May 2018 03:17:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527502646; cv=none; d=google.com; s=arc-20160816; b=OlBad37G4P4l22kBKVi67+C04U9iCo3LZMKxS9f2/mTArBNA6g2L+SS+i1IbD156V6 PKWBOy3aKd9nyEt5g1of1yzWYu0qFYx/Bx/ixVhOkT5+wDRXzscxQajRWeRd00IG7ayP jTOrsLMJwPkIycO44/rn5XRTBZlh+EZ465LCXaVQoxECfCJLdzbCjAvQ3LHlhiaEqBr+ +NYUsh34edKzGzofRlJj954E/r3PepZNvB/TPbTMyjMie7N9xdAJgSm2+CSzHIN75tvo jYJKfBslIR4TVcmqEQFQ0GeCYj12i3UOJ1uTIJ2ftT7OllZnEPZr+pcLlHVbEu+AzSz0 vFmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=0S+4yBPzQAqsWib0bwC7XqCY2fgVHBBl4E6yIRoOP7A=; b=cEQ6na/U+jTXeP3Xllmyh6LZeJ7//5Bj4zJrbvV8xPL4Mc52ax0FkzryhqO36zXU2s JXGJSHaX1NN2ExnzgJgMXGkuu3gUofc7U/u0BUlYkpV+BTo/daLj8EC1K/EK3UdonNpE t1aVBCJlyOdi4nbi4MiJXxTt7L09SHHP85jr8sD/PQrjota+62n4XhtTZRfi1XK5LJTm 6GOuGb4CNFjF9TVYe114fy9akWCnGvYpDBhc0A3hU2gnpjakszP6SHKraXkOuT5zC8P5 ain+77QhqqjKtayUHmkK8tD6uNbn18G+gBqa5a0YqJCBzgZBrHxn9phyHrJkHMH+mtxP /WjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Wj6FfzJI; 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 o16-v6si1379487pgv.240.2018.05.28.03.17.12; Mon, 28 May 2018 03:17:26 -0700 (PDT) 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=Wj6FfzJI; 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 S968594AbeE1KQv (ORCPT + 99 others); Mon, 28 May 2018 06:16:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:36918 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966741AbeE1KQr (ORCPT ); Mon, 28 May 2018 06:16:47 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (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 3C181206B7; Mon, 28 May 2018 10:16:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527502606; bh=WBqwkgiq2KdaJ+pkuWkxPNjc1TwxIZG4CsTlp1Jw01g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wj6FfzJIhbb7IrBttsGNWRYaHntCYfbd7mHVQPdgZLPQKXjwagDRpXA91WLon2hxW 4w3j4kGcRXAOYBH0MPuPIh39HQgPop0ydUeZbAzsfvyn7ILby3kPoWIF2zTf5xBzhr zdrvkkcIZSmd71Yv0uKehpOuC8eb4u4iI58r1a60= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Catalin Marinas , Will Deacon , Sasha Levin Subject: [PATCH 4.4 062/268] arm64: spinlock: Fix theoretical trylock() A-B-A with LSE atomics Date: Mon, 28 May 2018 12:00:36 +0200 Message-Id: <20180528100208.956172970@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100202.045206534@linuxfoundation.org> References: <20180528100202.045206534@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Will Deacon [ Upstream commit 202fb4ef81e3ec765c23bd1e6746a5c25b797d0e ] If the spinlock "next" ticket wraps around between the initial LDR and the cmpxchg in the LSE version of spin_trylock, then we can erroneously think that we have successfuly acquired the lock because we only check whether the next ticket return by the cmpxchg is equal to the owner ticket in our updated lock word. This patch fixes the issue by performing a full 32-bit check of the lock word when trying to determine whether or not the CASA instruction updated memory. Reported-by: Catalin Marinas Signed-off-by: Will Deacon Signed-off-by: Catalin Marinas Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- arch/arm64/include/asm/spinlock.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/arch/arm64/include/asm/spinlock.h +++ b/arch/arm64/include/asm/spinlock.h @@ -94,8 +94,8 @@ static inline int arch_spin_trylock(arch " cbnz %w1, 1f\n" " add %w1, %w0, %3\n" " casa %w0, %w1, %2\n" - " and %w1, %w1, #0xffff\n" - " eor %w1, %w1, %w0, lsr #16\n" + " sub %w1, %w1, %3\n" + " eor %w1, %w1, %w0\n" "1:") : "=&r" (lockval), "=&r" (tmp), "+Q" (*lock) : "I" (1 << TICKET_SHIFT)