lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZbKVutBWoelt33GM@debug.ba.rivosinc.com>
Date: Thu, 25 Jan 2024 09:09:14 -0800
From: Deepak Gupta <debug@...osinc.com>
To: Stefan O'Rear <sorear@...tmail.com>
Cc: rick.p.edgecombe@...el.com, broonie@...nel.org, Szabolcs.Nagy@....com,
	"kito.cheng@...ive.com" <kito.cheng@...ive.com>,
	Kees Cook <keescook@...omium.org>,
	Andrew Jones <ajones@...tanamicro.com>, paul.walmsley@...ive.com,
	Palmer Dabbelt <palmer@...belt.com>,
	Conor Dooley <conor.dooley@...rochip.com>, cleger@...osinc.com,
	Atish Patra <atishp@...shpatra.org>,
	Alexandre Ghiti <alex@...ti.fr>,
	Björn Töpel <bjorn@...osinc.com>,
	Alexandre Ghiti <alexghiti@...osinc.com>,
	Jonathan Corbet <corbet@....net>, Albert Ou <aou@...s.berkeley.edu>,
	oleg@...hat.com, akpm@...ux-foundation.org, arnd@...db.de,
	"Eric W. Biederman" <ebiederm@...ssion.com>, shuah@...nel.org,
	Christian Brauner <brauner@...nel.org>, guoren <guoren@...nel.org>,
	samitolvanen@...gle.com, Evan Green <evan@...osinc.com>,
	xiao.w.wang@...el.com, Anup Patel <apatel@...tanamicro.com>,
	mchitale@...tanamicro.com, waylingii@...il.com,
	greentime.hu@...ive.com, Heiko Stuebner <heiko@...ech.de>,
	Jisheng Zhang <jszhang@...nel.org>, shikemeng@...weicloud.com,
	david@...hat.com, Charlie Jenkins <charlie@...osinc.com>,
	panqinglin2020@...as.ac.cn, willy@...radead.org,
	Vincent Chen <vincent.chen@...ive.com>,
	Andy Chiu <andy.chiu@...ive.com>, Greg Ungerer <gerg@...nel.org>,
	jeeheng.sia@...rfivetech.com, mason.huo@...rfivetech.com,
	ancientmodern4@...il.com, mathis.salmen@...sal.de,
	cuiyunhui@...edance.com, bhe@...hat.com, ruscur@...sell.cc,
	bgray@...ux.ibm.com, alx@...nel.org, baruch@...s.co.il,
	zhangqing@...ngson.cn, Catalin Marinas <catalin.marinas@....com>,
	revest@...omium.org, josh@...htriplett.org, joey.gouly@....com,
	shr@...kernel.io, omosnace@...hat.com, ojeda@...nel.org,
	jhubbard@...dia.com, linux-doc@...r.kernel.org,
	linux-riscv@...ts.infradead.org, linux-kernel@...r.kernel.org,
	linux-mm@...ck.org, linux-arch@...r.kernel.org,
	linux-kselftest@...r.kernel.org
Subject: Re: [RFC PATCH v1 02/28] riscv: envcfg save and restore on trap
 entry/exit

On Thu, Jan 25, 2024 at 02:19:29AM -0500, Stefan O'Rear wrote:
>On Thu, Jan 25, 2024, at 1:21 AM, debug@...osinc.com wrote:
>> From: Deepak Gupta <debug@...osinc.com>
>>
>> envcfg CSR defines enabling bits for cache management instructions and soon
>> will control enabling for control flow integrity and pointer masking features.
>>
>> Control flow integrity enabling for forward cfi and backward cfi is controlled
>> via envcfg and thus need to be enabled on per thread basis.
>>
>> This patch creates a place holder for envcfg CSR in `thread_info` and adds
>> logic to save and restore on trap entry and exits.
>
>Should only be "restore"?  I don't see saving.

It's always saved in `thread_info` and user mode can't change it.
So no point saving it.

>
>>
>> Signed-off-by: Deepak Gupta <debug@...osinc.com>
>> ---
>>  arch/riscv/include/asm/thread_info.h | 1 +
>>  arch/riscv/kernel/asm-offsets.c      | 1 +
>>  arch/riscv/kernel/entry.S            | 4 ++++
>>  3 files changed, 6 insertions(+)
>>
>> diff --git a/arch/riscv/include/asm/thread_info.h
>> b/arch/riscv/include/asm/thread_info.h
>> index 574779900bfb..320bc899a63b 100644
>> --- a/arch/riscv/include/asm/thread_info.h
>> +++ b/arch/riscv/include/asm/thread_info.h
>> @@ -57,6 +57,7 @@ struct thread_info {
>>  	long			user_sp;	/* User stack pointer */
>>  	int			cpu;
>>  	unsigned long		syscall_work;	/* SYSCALL_WORK_ flags */
>> +	unsigned long envcfg;
>>  #ifdef CONFIG_SHADOW_CALL_STACK
>>  	void			*scs_base;
>>  	void			*scs_sp;
>> diff --git a/arch/riscv/kernel/asm-offsets.c
>> b/arch/riscv/kernel/asm-offsets.c
>> index a03129f40c46..cdd8f095c30c 100644
>> --- a/arch/riscv/kernel/asm-offsets.c
>> +++ b/arch/riscv/kernel/asm-offsets.c
>> @@ -39,6 +39,7 @@ void asm_offsets(void)
>>  	OFFSET(TASK_TI_PREEMPT_COUNT, task_struct, thread_info.preempt_count);
>>  	OFFSET(TASK_TI_KERNEL_SP, task_struct, thread_info.kernel_sp);
>>  	OFFSET(TASK_TI_USER_SP, task_struct, thread_info.user_sp);
>> +	OFFSET(TASK_TI_ENVCFG, task_struct, thread_info.envcfg);
>>  #ifdef CONFIG_SHADOW_CALL_STACK
>>  	OFFSET(TASK_TI_SCS_SP, task_struct, thread_info.scs_sp);
>>  #endif
>> diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S
>> index 54ca4564a926..63c3855ba80d 100644
>> --- a/arch/riscv/kernel/entry.S
>> +++ b/arch/riscv/kernel/entry.S
>> @@ -129,6 +129,10 @@ SYM_CODE_START_NOALIGN(ret_from_exception)
>>  	addi s0, sp, PT_SIZE_ON_STACK
>>  	REG_S s0, TASK_TI_KERNEL_SP(tp)
>>
>> +	/* restore envcfg bits for current thread */
>> +	REG_L s0, TASK_TI_ENVCFG(tp)
>> +	csrw CSR_ENVCFG, s0
>> +
>
>This is redundant if we're repeatedly processing interrupts or exceptions
>within a single task.  We should only be writing envcfg when switching
>between tasks or as part of the prctl.
>
>We need to use an ALTERNATIVE for this since the oldest supported hardware
>does not have envcfg csrs.

Yeah fixing that in next series. Thanks

>
>-s
>
>>  	/* Save the kernel shadow call stack pointer */
>>  	scs_save_current
>>
>> --
>> 2.43.0
>>
>>
>> _______________________________________________
>> linux-riscv mailing list
>> linux-riscv@...ts.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-riscv

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ