From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 66124EB64D7 for ; Mon, 26 Jun 2023 16:58:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=thPKt8X7XIApWLd0pT3996Z0stECsH0ztdc0i3Lzxro=; b=f0MsUhwdFhwbZ4 XhnEtvkG8fVuRi04enjfHu/iTA6cX9k50BOxKmDlSFpqjW3EU7q3JPZt2R+HdtwPLGtpk/0PhYLFa dYKZKEAmaMwifJRrzzPOTgW1vcqHG4I0a3yoeroG8IZ3bJyXw9/J+7ip8EKLVvtRSLOM4qtGiOu7I z7Qj9r4wyM9xALY2wPAG2SJlvkEVy7CFnaciQ31tYsNF0GQXnmEXzzDv0R+p18TXWmsh+ZjAjRLSL +LtmT4udNYkEdHxmujD8rih6gsfOc/X0cc2ZqNJPRYtAKWZxKUe+SHmr/EA8wULDC0hQ+bD/3xs21 kTivi15WyMCfrZj5I7DQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qDpXH-00Ah1O-07; Mon, 26 Jun 2023 16:57:55 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qDpXE-00Ah0r-0l for linux-riscv@lists.infradead.org; Mon, 26 Jun 2023 16:57:53 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 702A360E93; Mon, 26 Jun 2023 16:57:51 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4411AC433C8; Mon, 26 Jun 2023 16:57:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1687798670; bh=D7OOp/89DCaiYbQMxKU0tOSDhjvcdtKgZcq1oLiZYw8=; h=From:To:Cc:Subject:Date:From; b=mH7PKJVyDXTVMM0pvqVTZGZvdM1pTfAZhbM2tmvYqv21ZLuWCizd5/AqVqL2/EY6i sFJYZoHET3zvjjKjCXV06M/ruxB21ID8bExYeIy75+ZTY2Frv30nCMAqU4wq8jTBzs lfc49vv+jxFKL4s0cr9XO5JWA+PyLk9E9uurc6k5RZKuyt05qEq2SobHhk051/mB0q q7gwjoJ2UXZc6A6RpUXHPJoZpj3oLfgFqy/tECf4oOrk4zIrRqpWKISigmCKlc8LmI E2klUHvloTfAnOQHCbbUkdsjQP5yqf5gx0eGloy2PVLHQTjFc0sglpyFXTiaupH3Sj GGPSInHOFd0MQ== From: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= To: Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv@lists.infradead.org Cc: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-kernel@vger.kernel.org, linux@rivosinc.com, Palmer Dabbelt , =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= , Darius Rad , Andy Chiu Subject: [PATCH v2] riscv: Discard vector state on syscalls Date: Mon, 26 Jun 2023 18:57:36 +0200 Message-Id: <20230626165736.65927-1-bjorn@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230626_095752_376829_0FA42F7D X-CRM114-Status: GOOD ( 13.01 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org RnJvbTogQmrDtnJuIFTDtnBlbCA8Ympvcm5Acml2b3NpbmMuY29tPgoKVGhlIFJJU0MtViB2ZWN0 b3Igc3BlY2lmaWNhdGlvbiBzdGF0ZXM6CiAgRXhlY3V0aW5nIGEgc3lzdGVtIGNhbGwgY2F1c2Vz IGFsbCBjYWxsZXItc2F2ZWQgdmVjdG9yIHJlZ2lzdGVycwogICh2MC12MzEsIHZsLCB2dHlwZSkg YW5kIHZzdGFydCB0byBiZWNvbWUgdW5zcGVjaWZpZWQuCgpUaGUgdmVjdG9yIHJlZ2lzdGVycyBh cmUgc2V0IHRvIGFsbCAxcywgdmlsbCBpcyBzZXQgKGludmFsaWQpLCBhbmQgdGhlCnZlY3RvciBz dGF0dXMgaXMgc2V0IHRvIEluaXRpYWwuCgpUaGF0IHdheSB3ZSBjYW4gcHJldmVudCB1c2Vyc3Bh Y2UgZnJvbSBhY2NpZGVudGFsbHkgcmVseWluZyBvbiB0aGUKc3RhdGVkIHNhdmUuCgpSw6ltaSBw b2ludGVkIG91dCBbMV0gdGhhdCB3cml0aW5nIHRvIHRoZSByZWdpc3RlcnMgbWlnaHQgYmUKc3Vw ZXJmbHVvdXMsIGFuZCBzZXR0aW5nIHZpbGwgaXMgc3VmZmljaWVudC4KCkxpbms6IGh0dHBzOi8v bG9yZS5rZXJuZWwub3JnL2xpbnV4LXJpc2N2LzEyNzg0MzI2LjlVUFBLM01BZUJAYmFzaWxlLnJl bWxhYi5uZXQvICMgWzFdClN1Z2dlc3RlZC1ieTogRGFyaXVzIFJhZCA8ZGFyaXVzQGJsdWVzcGVj LmNvbT4KU3VnZ2VzdGVkLWJ5OiBQYWxtZXIgRGFiYmVsdCA8cGFsbWVyQHJpdm9zaW5jLmNvbT4K U3VnZ2VzdGVkLWJ5OiBSw6ltaSBEZW5pcy1Db3VybW9udCA8cmVtaUByZW1sYWIubmV0PgpTaWdu ZWQtb2ZmLWJ5OiBCasO2cm4gVMO2cGVsIDxiam9ybkByaXZvc2luYy5jb20+Ci0tLQp2MS0+djI6 CiAgUHJvcGVyIHJlZ2lzdGVyIHJlc3RvcmUgZm9yIGluaXRpYWwgc3RhdGUgKEFuZHkpCiAgU2V0 IHJlZ2lzdGVycyB0byAxcywgYW5kIG5vdCAwcyAoRGFyaXVzKQotLS0KIGFyY2gvcmlzY3YvaW5j bHVkZS9hc20vdmVjdG9yLmggfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0K IGFyY2gvcmlzY3Yva2VybmVsL3RyYXBzLmMgICAgICAgfCAgMiArKwogMiBmaWxlcyBjaGFuZ2Vk LCA0MSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20vdmVjdG9yLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3ZlY3Rvci5o CmluZGV4IDA0YzBiMDdiZjZjZC4uOTNkNzAyZDk5ODhjIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL3ZlY3Rvci5oCisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdmVjdG9y LmgKQEAgLTEzOSwxNCArMTM5LDQ5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByaXNjdl92X3ZzdGF0 ZV9zYXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUg dm9pZCBfX3Jpc2N2X3ZfdnN0YXRlX2Rpc2NhcmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZs LCB2dHlwZV9pbnZhbCA9IDFVTCA8PCAoQklUU19QRVJfTE9ORyAtIDEpOworCisJcmlzY3Zfdl9l bmFibGUoKTsKKwlhc20gdm9sYXRpbGUgKAorCQkiLm9wdGlvbiBwdXNoXG5cdCIKKwkJIi5vcHRp b24gYXJjaCwgK3Zcblx0IgorCQkidnNldHZsaQklMCwgeDAsIGU4LCBtOCwgdGEsIG1hXG5cdCIK KwkJInZtdi52LmkJdjAsIC0xXG5cdCIKKwkJInZtdi52LmkJdjgsIC0xXG5cdCIKKwkJInZtdi52 LmkJdjE2LCAtMVxuXHQiCisJCSJ2bXYudi5pCXYyNCwgLTFcblx0IgorCQkidnNldHZsCQklMCwg eDAsICUxXG5cdCIKKwkJIi5vcHRpb24gcG9wXG5cdCIKKwkJOiAiPSZyIiAodmwpIDogInIiICh2 dHlwZV9pbnZhbCkgOiAibWVtb3J5Iik7CisJcmlzY3Zfdl9kaXNhYmxlKCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCByaXNjdl92X3ZzdGF0ZV9kaXNjYXJkKHN0cnVjdCBwdF9yZWdzICpyZWdz KQoreworCWlmICghcmlzY3Zfdl92c3RhdGVfcXVlcnkocmVncykpCisJCXJldHVybjsKKworCV9f cmlzY3Zfdl92c3RhdGVfZGlzY2FyZCgpOworCXJpc2N2X3ZfdnN0YXRlX29uKHJlZ3MpOworfQor CiBzdGF0aWMgaW5saW5lIHZvaWQgcmlzY3Zfdl92c3RhdGVfcmVzdG9yZShzdHJ1Y3QgdGFza19z dHJ1Y3QgKnRhc2ssCiAJCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaWYgKChyZWdz LT5zdGF0dXMgJiBTUl9WUykgIT0gU1JfVlNfT0ZGKSB7Ci0JCXN0cnVjdCBfX3Jpc2N2X3ZfZXh0 X3N0YXRlICp2c3RhdGUgPSAmdGFzay0+dGhyZWFkLnZzdGF0ZTsKLQorCXN0cnVjdCBfX3Jpc2N2 X3ZfZXh0X3N0YXRlICp2c3RhdGUgPSAmdGFzay0+dGhyZWFkLnZzdGF0ZTsKKwl1bnNpZ25lZCBs b25nIHN0YXR1cyA9IHJlZ3MtPnN0YXR1cyAmIFNSX1ZTOworCisJc3dpdGNoIChzdGF0dXMpIHsK KwljYXNlIFNSX1ZTX0lOSVRJQUw6CisJCV9fcmlzY3Zfdl92c3RhdGVfZGlzY2FyZCgpOworCQli cmVhazsKKwljYXNlIFNSX1ZTX0NMRUFOOgorCWNhc2UgU1JfVlNfRElSVFk6CiAJCV9fcmlzY3Zf dl92c3RhdGVfcmVzdG9yZSh2c3RhdGUsIHZzdGF0ZS0+ZGF0YXApOwogCQlfX3Jpc2N2X3ZfdnN0 YXRlX2NsZWFuKHJlZ3MpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTE3OCw2ICsyMTMsNyBAQCBz dGF0aWMgaW5saW5lIGJvb2wgcmlzY3Zfdl92c3RhdGVfY3RybF91c2VyX2FsbG93ZWQodm9pZCkg eyByZXR1cm4gZmFsc2U7IH0KICNkZWZpbmUgX19zd2l0Y2hfdG9fdmVjdG9yKF9fcHJldiwgX19u ZXh0KQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgcmlzY3Zfdl92c3RhdGVfb2ZmKHJlZ3MpCQlk byB7fSB3aGlsZSAoMCkKICNkZWZpbmUgcmlzY3Zfdl92c3RhdGVfb24ocmVncykJCQlkbyB7fSB3 aGlsZSAoMCkKKyNkZWZpbmUgcmlzY3Zfdl92c3RhdGVfZGlzY2FyZChyZWdzKQkJZG8ge30gd2hp bGUgKDApCiAKICNlbmRpZiAvKiBDT05GSUdfUklTQ1ZfSVNBX1YgKi8KIApkaWZmIC0tZ2l0IGEv YXJjaC9yaXNjdi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3RyYXBzLmMKaW5k ZXggNTE1ODk2MWVhOTc3Li41ZmY2M2E3ODRhNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2Vy bmVsL3RyYXBzLmMKKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvdHJhcHMuYwpAQCAtMjk2LDYgKzI5 Niw4IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIF9fdHJhcF9zZWN0aW9uIHZvaWQgZG9fdHJhcF9l Y2FsbF91KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlyZWdzLT5lcGMgKz0gNDsKIAkJcmVncy0+ b3JpZ19hMCA9IHJlZ3MtPmEwOwogCisJCXJpc2N2X3ZfdnN0YXRlX2Rpc2NhcmQocmVncyk7CisK IAkJc3lzY2FsbCA9IHN5c2NhbGxfZW50ZXJfZnJvbV91c2VyX21vZGUocmVncywgc3lzY2FsbCk7 CiAKIAkJaWYgKHN5c2NhbGwgPCBOUl9zeXNjYWxscykKCmJhc2UtY29tbWl0OiA0ODg4MzNjY2Rj YWMxMThkYTE2NzAxZjRlZTA2NzNiMjBiYTQ3ZmUzCi0tIAoyLjM5LjIKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxp c3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55D69EB64D7 for ; Mon, 26 Jun 2023 16:57:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230061AbjFZQ5z (ORCPT ); Mon, 26 Jun 2023 12:57:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229457AbjFZQ5x (ORCPT ); Mon, 26 Jun 2023 12:57:53 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1E669C4 for ; Mon, 26 Jun 2023 09:57:52 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 7F21760EC7 for ; Mon, 26 Jun 2023 16:57:51 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4411AC433C8; Mon, 26 Jun 2023 16:57:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1687798670; bh=D7OOp/89DCaiYbQMxKU0tOSDhjvcdtKgZcq1oLiZYw8=; h=From:To:Cc:Subject:Date:From; b=mH7PKJVyDXTVMM0pvqVTZGZvdM1pTfAZhbM2tmvYqv21ZLuWCizd5/AqVqL2/EY6i sFJYZoHET3zvjjKjCXV06M/ruxB21ID8bExYeIy75+ZTY2Frv30nCMAqU4wq8jTBzs lfc49vv+jxFKL4s0cr9XO5JWA+PyLk9E9uurc6k5RZKuyt05qEq2SobHhk051/mB0q q7gwjoJ2UXZc6A6RpUXHPJoZpj3oLfgFqy/tECf4oOrk4zIrRqpWKISigmCKlc8LmI E2klUHvloTfAnOQHCbbUkdsjQP5yqf5gx0eGloy2PVLHQTjFc0sglpyFXTiaupH3Sj GGPSInHOFd0MQ== From: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= To: Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-riscv@lists.infradead.org Cc: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-kernel@vger.kernel.org, linux@rivosinc.com, Palmer Dabbelt , =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= , Darius Rad , Andy Chiu Subject: [PATCH v2] riscv: Discard vector state on syscalls Date: Mon, 26 Jun 2023 18:57:36 +0200 Message-Id: <20230626165736.65927-1-bjorn@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Björn Töpel The RISC-V vector specification states: Executing a system call causes all caller-saved vector registers (v0-v31, vl, vtype) and vstart to become unspecified. The vector registers are set to all 1s, vill is set (invalid), and the vector status is set to Initial. That way we can prevent userspace from accidentally relying on the stated save. Rémi pointed out [1] that writing to the registers might be superfluous, and setting vill is sufficient. Link: https://lore.kernel.org/linux-riscv/12784326.9UPPK3MAeB@basile.remlab.net/ # [1] Suggested-by: Darius Rad Suggested-by: Palmer Dabbelt Suggested-by: Rémi Denis-Courmont Signed-off-by: Björn Töpel --- v1->v2: Proper register restore for initial state (Andy) Set registers to 1s, and not 0s (Darius) --- arch/riscv/include/asm/vector.h | 42 ++++++++++++++++++++++++++++++--- arch/riscv/kernel/traps.c | 2 ++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/arch/riscv/include/asm/vector.h b/arch/riscv/include/asm/vector.h index 04c0b07bf6cd..93d702d9988c 100644 --- a/arch/riscv/include/asm/vector.h +++ b/arch/riscv/include/asm/vector.h @@ -139,14 +139,49 @@ static inline void riscv_v_vstate_save(struct task_struct *task, } } +static inline void __riscv_v_vstate_discard(void) +{ + unsigned long vl, vtype_inval = 1UL << (BITS_PER_LONG - 1); + + riscv_v_enable(); + asm volatile ( + ".option push\n\t" + ".option arch, +v\n\t" + "vsetvli %0, x0, e8, m8, ta, ma\n\t" + "vmv.v.i v0, -1\n\t" + "vmv.v.i v8, -1\n\t" + "vmv.v.i v16, -1\n\t" + "vmv.v.i v24, -1\n\t" + "vsetvl %0, x0, %1\n\t" + ".option pop\n\t" + : "=&r" (vl) : "r" (vtype_inval) : "memory"); + riscv_v_disable(); +} + +static inline void riscv_v_vstate_discard(struct pt_regs *regs) +{ + if (!riscv_v_vstate_query(regs)) + return; + + __riscv_v_vstate_discard(); + riscv_v_vstate_on(regs); +} + static inline void riscv_v_vstate_restore(struct task_struct *task, struct pt_regs *regs) { - if ((regs->status & SR_VS) != SR_VS_OFF) { - struct __riscv_v_ext_state *vstate = &task->thread.vstate; - + struct __riscv_v_ext_state *vstate = &task->thread.vstate; + unsigned long status = regs->status & SR_VS; + + switch (status) { + case SR_VS_INITIAL: + __riscv_v_vstate_discard(); + break; + case SR_VS_CLEAN: + case SR_VS_DIRTY: __riscv_v_vstate_restore(vstate, vstate->datap); __riscv_v_vstate_clean(regs); + break; } } @@ -178,6 +213,7 @@ static inline bool riscv_v_vstate_ctrl_user_allowed(void) { return false; } #define __switch_to_vector(__prev, __next) do {} while (0) #define riscv_v_vstate_off(regs) do {} while (0) #define riscv_v_vstate_on(regs) do {} while (0) +#define riscv_v_vstate_discard(regs) do {} while (0) #endif /* CONFIG_RISCV_ISA_V */ diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index 5158961ea977..5ff63a784a6d 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -296,6 +296,8 @@ asmlinkage __visible __trap_section void do_trap_ecall_u(struct pt_regs *regs) regs->epc += 4; regs->orig_a0 = regs->a0; + riscv_v_vstate_discard(regs); + syscall = syscall_enter_from_user_mode(regs, syscall); if (syscall < NR_syscalls) base-commit: 488833ccdcac118da16701f4ee0673b20ba47fe3 -- 2.39.2