Add SetCID permission bit

This commit is contained in:
Peter Rugg
2019-03-19 17:59:54 +00:00
parent 5504d1380e
commit aaa150091f
2 changed files with 5 additions and 1 deletions

View File

@@ -94,6 +94,7 @@ typedef Bit#(CapAddressW) CapAddress;
// The Hardware permissions type // The Hardware permissions type
typedef struct { typedef struct {
Bool reserved; Bool reserved;
Bool permit_set_CID;
Bool acces_sys_regs; Bool acces_sys_regs;
Bool permit_unseal; Bool permit_unseal;
Bool permit_ccall; Bool permit_ccall;
@@ -866,6 +867,7 @@ instance CHERICap #(CapPipe, 18, 64);
function HardPerms getHardPerms (CapPipe cap); function HardPerms getHardPerms (CapPipe cap);
return HardPerms { return HardPerms {
permitSetCID: cap.capFat.perms.hard.permit_set_CID,
accessSysRegs: cap.capFat.perms.hard.acces_sys_regs, accessSysRegs: cap.capFat.perms.hard.acces_sys_regs,
permitUnseal: cap.capFat.perms.hard.permit_unseal, permitUnseal: cap.capFat.perms.hard.permit_unseal,
permitCCall: cap.capFat.perms.hard.permit_ccall, permitCCall: cap.capFat.perms.hard.permit_ccall,
@@ -883,6 +885,7 @@ instance CHERICap #(CapPipe, 18, 64);
function CapPipe setHardPerms (CapPipe cap, HardPerms perms); function CapPipe setHardPerms (CapPipe cap, HardPerms perms);
cap.capFat.perms.hard = HPerms { cap.capFat.perms.hard = HPerms {
reserved: ?, reserved: ?,
permit_set_CID: perms.permitSetCID,
acces_sys_regs: perms.accessSysRegs, acces_sys_regs: perms.accessSysRegs,
permit_unseal: perms.accessSysRegs, permit_unseal: perms.accessSysRegs,
permit_ccall: perms.accessSysRegs, permit_ccall: perms.accessSysRegs,

View File

@@ -35,6 +35,7 @@ package CHERICap;
typedef Bit#(16) SoftPerms; typedef Bit#(16) SoftPerms;
typedef struct { typedef struct {
Bool permitSetCID;
Bool accessSysRegs; Bool accessSysRegs;
Bool permitUnseal; Bool permitUnseal;
Bool permitCCall; Bool permitCCall;
@@ -95,7 +96,7 @@ typeclass CHERICap#(type t, numeric type ot, numeric type n)
function t setSoftPerms (t cap, SoftPerms softperms); function t setSoftPerms (t cap, SoftPerms softperms);
// Get the architectural permissions // Get the architectural permissions
function Bit#(31) getPerms (t cap) = function Bit#(31) getPerms (t cap) =
zeroExtend({pack(getSoftPerms(cap)), 4'h0, pack(getHardPerms(cap))}); zeroExtend({pack(getSoftPerms(cap)), 3'h0, pack(getHardPerms(cap))});
// Set the architectural permissions // Set the architectural permissions
function t setPerms (t cap, Bit#(31) perms) = function t setPerms (t cap, Bit#(31) perms) =
setSoftPerms(setHardPerms(cap, unpack(perms[11:0])), unpack(truncate(perms[30:15]))); setSoftPerms(setHardPerms(cap, unpack(perms[11:0])), unpack(truncate(perms[30:15])));