Received: by 10.223.185.116 with SMTP id b49csp2560802wrg; Thu, 15 Feb 2018 13:40:13 -0800 (PST) X-Google-Smtp-Source: AH8x225zg67Z4jA4TVG86hzJaHMJW46MtB6ajszoGD7barllq2+DyuBEvupvWTiBbg6ggEnyjbjk X-Received: by 2002:a17:902:2006:: with SMTP id n6-v6mr3777512pla.149.1518730813609; Thu, 15 Feb 2018 13:40:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518730813; cv=none; d=google.com; s=arc-20160816; b=skWNuwcwbcS5ilJcVYVN0WifuHXq5DmjSsrIKO1nqc6n1FmQTW6nVoYNdvAqC6grUC xs3YMj4GXuzuQo8zJ2HRRVijqIQGZV0I7Dv8F0VflSsrn+maT57nGHPm9FY6IiZWJ/BU 36oOs1PO6yy7To+cy2YjS9EubQaV7rcZr9o+qDGSzkdNYz0POHSQ4XXfuLJ1pq0+xOmO h5dLNBDU+hKRKpWqLemUmwVvTKpYrfXRM/9Eg3Ta5rR14r7WxHN9KD5RbEsZE2X9OgKk TiJcWXPCjrOFlRDOM0qkPROxI0KNg4zZ37d6Qzrk6xMw2ZVKRiUDqYMl6vRjZBAkjqiE RhkA== 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 :arc-authentication-results; bh=hlTcVeXmQnZQ4dSSyRKSvVwX7TfDkMkWx0GVwAl9YU0=; b=JYrkkvlwPQng+CGn+sVd2sNpcr6J3HCGjpegG34daNbTfpB1oNDGmcm3blD/TWsu8u Q5XKBWrM3lN5AUAH3TatWt2VAEGu9WEJeWP6ZvIGXvXbScelVSiUAbKCvoxNmg9IgHYm OGEbCeeZJR38v3lM7yghnf6iexuH3CasJygblOFnXNV2vrKcbMG6g+yBGBt5eHeYhNiK FDGifpQlsczod9FGfeZGxm4DiHDezgRAuZGK173QjqmGLWzvksnYN2adg/t/FmY0L8t+ kpz8rucX/tENoONMB0w+slelDWoJvo/OqtE271ry7hnGT2dwSj6doUhejZA6efUG94zd IVng== ARC-Authentication-Results: i=1; mx.google.com; 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 9si4396250pgh.687.2018.02.15.13.39.58; Thu, 15 Feb 2018 13:40:13 -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; 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 S1164547AbeBOPcF (ORCPT + 99 others); Thu, 15 Feb 2018 10:32:05 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:56222 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1164491AbeBOPcC (ORCPT ); Thu, 15 Feb 2018 10:32:02 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 50117EC4; Thu, 15 Feb 2018 15:32:01 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mark Rutland , Robin Murphy , Will Deacon , Catalin Marinas , Ard Biesheuvel Subject: [PATCH 4.14 057/195] [Variant 1/Spectre-v1] arm64: Implement array_index_mask_nospec() Date: Thu, 15 Feb 2018 16:15:48 +0100 Message-Id: <20180215151708.585544778@linuxfoundation.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180215151705.738773577@linuxfoundation.org> References: <20180215151705.738773577@linuxfoundation.org> User-Agent: quilt/0.65 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.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Robin Murphy Commit 022620eed3d0 upstream. Provide an optimised, assembly implementation of array_index_mask_nospec() for arm64 so that the compiler is not in a position to transform the code in ways which affect its ability to inhibit speculation (e.g. by introducing conditional branches). This is similar to the sequence used by x86, modulo architectural differences in the carry/borrow flags. Reviewed-by: Mark Rutland Signed-off-by: Robin Murphy Signed-off-by: Will Deacon Signed-off-by: Catalin Marinas Signed-off-by: Ard Biesheuvel Signed-off-by: Greg Kroah-Hartman --- arch/arm64/include/asm/barrier.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- a/arch/arm64/include/asm/barrier.h +++ b/arch/arm64/include/asm/barrier.h @@ -40,6 +40,27 @@ #define dma_rmb() dmb(oshld) #define dma_wmb() dmb(oshst) +/* + * Generate a mask for array_index__nospec() that is ~0UL when 0 <= idx < sz + * and 0 otherwise. + */ +#define array_index_mask_nospec array_index_mask_nospec +static inline unsigned long array_index_mask_nospec(unsigned long idx, + unsigned long sz) +{ + unsigned long mask; + + asm volatile( + " cmp %1, %2\n" + " sbc %0, xzr, xzr\n" + : "=r" (mask) + : "r" (idx), "Ir" (sz) + : "cc"); + + csdb(); + return mask; +} + #define __smp_mb() dmb(ish) #define __smp_rmb() dmb(ishld) #define __smp_wmb() dmb(ishst)