Add SetCID permission bit
This commit is contained in:
@@ -94,6 +94,7 @@ typedef Bit#(CapAddressW) CapAddress;
|
||||
// The Hardware permissions type
|
||||
typedef struct {
|
||||
Bool reserved;
|
||||
Bool permit_set_CID;
|
||||
Bool acces_sys_regs;
|
||||
Bool permit_unseal;
|
||||
Bool permit_ccall;
|
||||
@@ -866,6 +867,7 @@ instance CHERICap #(CapPipe, 18, 64);
|
||||
|
||||
function HardPerms getHardPerms (CapPipe cap);
|
||||
return HardPerms {
|
||||
permitSetCID: cap.capFat.perms.hard.permit_set_CID,
|
||||
accessSysRegs: cap.capFat.perms.hard.acces_sys_regs,
|
||||
permitUnseal: cap.capFat.perms.hard.permit_unseal,
|
||||
permitCCall: cap.capFat.perms.hard.permit_ccall,
|
||||
@@ -883,6 +885,7 @@ instance CHERICap #(CapPipe, 18, 64);
|
||||
function CapPipe setHardPerms (CapPipe cap, HardPerms perms);
|
||||
cap.capFat.perms.hard = HPerms {
|
||||
reserved: ?,
|
||||
permit_set_CID: perms.permitSetCID,
|
||||
acces_sys_regs: perms.accessSysRegs,
|
||||
permit_unseal: perms.accessSysRegs,
|
||||
permit_ccall: perms.accessSysRegs,
|
||||
|
||||
@@ -35,6 +35,7 @@ package CHERICap;
|
||||
|
||||
typedef Bit#(16) SoftPerms;
|
||||
typedef struct {
|
||||
Bool permitSetCID;
|
||||
Bool accessSysRegs;
|
||||
Bool permitUnseal;
|
||||
Bool permitCCall;
|
||||
@@ -95,7 +96,7 @@ typeclass CHERICap#(type t, numeric type ot, numeric type n)
|
||||
function t setSoftPerms (t cap, SoftPerms softperms);
|
||||
// Get the architectural permissions
|
||||
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
|
||||
function t setPerms (t cap, Bit#(31) perms) =
|
||||
setSoftPerms(setHardPerms(cap, unpack(perms[11:0])), unpack(truncate(perms[30:15])));
|
||||
|
||||
Reference in New Issue
Block a user