From 4d1dc29f7953c95820ad3682e13f537275ddedfb Mon Sep 17 00:00:00 2001 From: Marno Date: Wed, 10 Nov 2021 11:48:11 +0000 Subject: [PATCH 1/3] Added ccopytype_bypass --- src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi | 1 + src_Core/RISCY_OOO/procs/lib/Decode.bsv | 1 + src_Core/RISCY_OOO/procs/lib/Exec.bsv | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi b/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi index 018b513..c13ed2c 100644 --- a/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi +++ b/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi @@ -22,4 +22,5 @@ `CAP_CHECK_FIELD(src1_derivable,"src1_derivable") `CAP_CHECK_FIELD(cfromptr_bypass,"cfromptr_bypass") `CAP_CHECK_FIELD(ccseal_bypass,"ccseal_bypass") +`CAP_CHECK_FIELD(ccopytype_bypass,"ccopytype_bypass") `CAP_CHECK_FIELD(cap_exact,"cap_exact") diff --git a/src_Core/RISCY_OOO/procs/lib/Decode.bsv b/src_Core/RISCY_OOO/procs/lib/Decode.bsv index 8287ad4..b9d84df 100755 --- a/src_Core/RISCY_OOO/procs/lib/Decode.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Decode.bsv @@ -1174,6 +1174,7 @@ function DecodeResult decode(Instruction inst, Bool cap_mode); dInst.capChecks.check_low_src = Src1Type; dInst.capChecks.check_high_src = Src1Type; dInst.capChecks.check_inclusive = False; + dInst.capChecks.ccopytype_bypass = True; dInst.iType = Cap; regs.dst = Valid(tagged Gpr rd); diff --git a/src_Core/RISCY_OOO/procs/lib/Exec.bsv b/src_Core/RISCY_OOO/procs/lib/Exec.bsv index ef8a315..c99d5a1 100755 --- a/src_Core/RISCY_OOO/procs/lib/Exec.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Exec.bsv @@ -424,6 +424,10 @@ function ExecResult basicExec(DecodedInst dInst, CapPipe rVal1, CapPipe rVal2, C capException = Invalid; boundsCheck = Invalid; end + if (dInst.capChecks.ccopytype_bypass && isValidCap(rVal1) && getKind(rVal1) == UNSEALED && !validAsType(rVal1, zeroExtend(getKind(rVal1).SEALED_WITH_TYPE))) begin + capException = Invalid; + boundsCheck = Invalid; + end cf.nextPc = setKind(cf.nextPc, UNSEALED); cf.mispredict = cf.nextPc != ppc; From 6ae92f786bda86c0f5724d2928815f6d58a36cdd Mon Sep 17 00:00:00 2001 From: Marno Date: Thu, 11 Nov 2021 11:36:45 +0000 Subject: [PATCH 2/3] Checking tag and seal on rVal2 and checking type on rVal1 in a way that does not use undefined behavior. --- src_Core/RISCY_OOO/procs/lib/Exec.bsv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_Core/RISCY_OOO/procs/lib/Exec.bsv b/src_Core/RISCY_OOO/procs/lib/Exec.bsv index c99d5a1..e31e1e8 100755 --- a/src_Core/RISCY_OOO/procs/lib/Exec.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Exec.bsv @@ -424,7 +424,7 @@ function ExecResult basicExec(DecodedInst dInst, CapPipe rVal1, CapPipe rVal2, C capException = Invalid; boundsCheck = Invalid; end - if (dInst.capChecks.ccopytype_bypass && isValidCap(rVal1) && getKind(rVal1) == UNSEALED && !validAsType(rVal1, zeroExtend(getKind(rVal1).SEALED_WITH_TYPE))) begin + if (dInst.capChecks.ccopytype_bypass && isValidCap(rVal2) && getKind(rVal2) == UNSEALED && (getKind(rVal1) matches tagged SEALED_WITH_TYPE .t ? !validAsType(rVal2, zeroExtend(t)) : True)) begin capException = Invalid; boundsCheck = Invalid; end From 0f86f09b6a677728aa2026cc9300545c9b27c440 Mon Sep 17 00:00:00 2001 From: Marno Date: Thu, 11 Nov 2021 12:15:45 +0000 Subject: [PATCH 3/3] Updated copyright statement --- src_Core/RISCY_OOO/procs/lib/Exec.bsv | 1 + 1 file changed, 1 insertion(+) diff --git a/src_Core/RISCY_OOO/procs/lib/Exec.bsv b/src_Core/RISCY_OOO/procs/lib/Exec.bsv index e31e1e8..d5e64cb 100755 --- a/src_Core/RISCY_OOO/procs/lib/Exec.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Exec.bsv @@ -5,6 +5,7 @@ // Copyright (c) 2020 Alexandre Joannou // Copyright (c) 2020 Peter Rugg // Copyright (c) 2020 Jonathan Woodruff +// Copyright (c) 2021 Marno van der Maas // All rights reserved. // // This software was developed by SRI International and the University of