Skip to content

Commit 1ebeeb9

Browse files
author
Lawrence Esswood
committed
Small changes from review
Change-Id: I5d7b7d9d6e7655fa888d2776d9aef988d5a96318
1 parent 190e3d3 commit 1ebeeb9

File tree

5 files changed

+20
-52
lines changed

5 files changed

+20
-52
lines changed

arch/riscv/src/csr/mod.rs

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@
55
//! Tock Register interface for using CSR registers.
66
77
use riscv_csr::csr::{
8-
ReadWriteRiscvCsr, HMPCOUNTER_BASE, MCAUSE, MCYCLE, MEPC, MIE, MINSTRET, MIP, MSCRATCH,
9-
MSECCFG, MSTATUS, MTVAL, MTVEC, PMPADDR0, PMPADDR1, PMPADDR10, PMPADDR11, PMPADDR12, PMPADDR13,
10-
PMPADDR14, PMPADDR15, PMPADDR16, PMPADDR17, PMPADDR18, PMPADDR19, PMPADDR2, PMPADDR20,
11-
PMPADDR21, PMPADDR22, PMPADDR23, PMPADDR24, PMPADDR25, PMPADDR26, PMPADDR27, PMPADDR28,
12-
PMPADDR29, PMPADDR3, PMPADDR30, PMPADDR31, PMPADDR32, PMPADDR33, PMPADDR34, PMPADDR35,
13-
PMPADDR36, PMPADDR37, PMPADDR38, PMPADDR39, PMPADDR4, PMPADDR40, PMPADDR41, PMPADDR42,
14-
PMPADDR43, PMPADDR44, PMPADDR45, PMPADDR46, PMPADDR47, PMPADDR48, PMPADDR49, PMPADDR5,
15-
PMPADDR50, PMPADDR51, PMPADDR52, PMPADDR53, PMPADDR54, PMPADDR55, PMPADDR56, PMPADDR57,
16-
PMPADDR58, PMPADDR59, PMPADDR6, PMPADDR60, PMPADDR61, PMPADDR62, PMPADDR63, PMPADDR7, PMPADDR8,
17-
PMPADDR9, PMPCFG0, PMPCFG10, PMPCFG12, PMPCFG14, PMPCFG2, PMPCFG4, PMPCFG6, PMPCFG8, SATP,
18-
STVEC, UTVEC,
8+
ReadWriteRiscvCsr, MCAUSE, MCYCLE, MEPC, MIE, MINSTRET, MIP, MSCRATCH, MSECCFG, MSTATUS, MTVAL,
9+
MTVEC, PMPADDR0, PMPADDR1, PMPADDR10, PMPADDR11, PMPADDR12, PMPADDR13, PMPADDR14, PMPADDR15,
10+
PMPADDR16, PMPADDR17, PMPADDR18, PMPADDR19, PMPADDR2, PMPADDR20, PMPADDR21, PMPADDR22,
11+
PMPADDR23, PMPADDR24, PMPADDR25, PMPADDR26, PMPADDR27, PMPADDR28, PMPADDR29, PMPADDR3,
12+
PMPADDR30, PMPADDR31, PMPADDR32, PMPADDR33, PMPADDR34, PMPADDR35, PMPADDR36, PMPADDR37,
13+
PMPADDR38, PMPADDR39, PMPADDR4, PMPADDR40, PMPADDR41, PMPADDR42, PMPADDR43, PMPADDR44,
14+
PMPADDR45, PMPADDR46, PMPADDR47, PMPADDR48, PMPADDR49, PMPADDR5, PMPADDR50, PMPADDR51,
15+
PMPADDR52, PMPADDR53, PMPADDR54, PMPADDR55, PMPADDR56, PMPADDR57, PMPADDR58, PMPADDR59,
16+
PMPADDR6, PMPADDR60, PMPADDR61, PMPADDR62, PMPADDR63, PMPADDR7, PMPADDR8, PMPADDR9, PMPCFG0,
17+
PMPCFG10, PMPCFG12, PMPCFG14, PMPCFG2, PMPCFG4, PMPCFG6, PMPCFG8, SATP, STVEC, UTVEC,
1918
};
2019

2120
#[cfg(any(target_arch = "riscv32", not(target_os = "none")))]
@@ -149,20 +148,6 @@ pub struct CSR {
149148
pub pmpaddr62: ReadWriteRiscvCsr<usize, pmpaddr::pmpaddr::Register, PMPADDR62>,
150149
pub pmpaddr63: ReadWriteRiscvCsr<usize, pmpaddr::pmpaddr::Register, PMPADDR63>,
151150

152-
pub hpmcounter3: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 3 }>,
153-
pub hpmcounter4: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 4 }>,
154-
pub hpmcounter5: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 5 }>,
155-
pub hpmcounter6: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 6 }>,
156-
pub hpmcounter7: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 7 }>,
157-
pub hpmcounter8: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 8 }>,
158-
pub hpmcounter9: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 9 }>,
159-
pub hpmcounter10: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 10 }>,
160-
pub hpmcounter11: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 11 }>,
161-
pub hpmcounter12: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 12 }>,
162-
pub hpmcounter13: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 13 }>,
163-
pub hpmcounter14: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 14 }>,
164-
pub hpmcounter15: ReadWriteRiscvCsr<usize, (), { HMPCOUNTER_BASE + 15 }>,
165-
166151
pub mie: ReadWriteRiscvCsr<usize, mie::mie::Register, MIE>,
167152
pub mscratch: ReadWriteRiscvCsr<usize, mscratch::mscratch::Register, MSCRATCH>,
168153
pub mepc: ReadWriteRiscvCsr<usize, mepc::mepc::Register, MEPC>,
@@ -282,20 +267,6 @@ pub const CSR: &CSR = &CSR {
282267
pmpaddr62: ReadWriteRiscvCsr::new(),
283268
pmpaddr63: ReadWriteRiscvCsr::new(),
284269

285-
hpmcounter3: ReadWriteRiscvCsr::new(),
286-
hpmcounter4: ReadWriteRiscvCsr::new(),
287-
hpmcounter5: ReadWriteRiscvCsr::new(),
288-
hpmcounter6: ReadWriteRiscvCsr::new(),
289-
hpmcounter7: ReadWriteRiscvCsr::new(),
290-
hpmcounter8: ReadWriteRiscvCsr::new(),
291-
hpmcounter9: ReadWriteRiscvCsr::new(),
292-
hpmcounter10: ReadWriteRiscvCsr::new(),
293-
hpmcounter11: ReadWriteRiscvCsr::new(),
294-
hpmcounter12: ReadWriteRiscvCsr::new(),
295-
hpmcounter13: ReadWriteRiscvCsr::new(),
296-
hpmcounter14: ReadWriteRiscvCsr::new(),
297-
hpmcounter15: ReadWriteRiscvCsr::new(),
298-
299270
mie: ReadWriteRiscvCsr::new(),
300271
mscratch: ReadWriteRiscvCsr::new(),
301272
mepc: ReadWriteRiscvCsr::new(),

arch/riscv/src/syscall.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ const TAG: [u8; 4] = [b'r', b'v', b'5', b'i'];
8686
const TAG: [u8; 8] = [b'r', b'v', b'5', b'i', b'r', b'v', b'5', b'i'];
8787
const METADATA_LEN: usize = 3;
8888

89-
// TODO: CHERI. This seems to be for swap or some such. Needs thinking about.
90-
9189
const VERSION_IDX: usize = 0;
9290
const SIZE_IDX: usize = 1;
9391
const TAG_IDX: usize = 2;

kernel/src/utilities/arch_helpers.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,9 @@ impl<T: From<SyscallReturnVariant> + Into<usize>> Variant for T {}
196196

197197
/// An extension of TRD104 that works for 32-bit and 64-bit platforms, and can remap variants.
198198
///
199-
/// On 32-bit platforms using.
200199
/// Using TRD104SyscallReturnVariant on a 32-bit platform, this is exactly TRD104.
201200
/// Using TRD105SyscallReturnVariant on any platform should be TRD1105.
202-
/// Archtiectures not following either of these are free to provide their own mappings.
201+
/// Architectures not following either of these are free to provide their own mappings.
203202
/// On 64-bit platforms, both 64-bit and usize values are passed as a single register,
204203
/// shifting down register number if that means fewer registers are needed.
205204
/// For usize, there is no change in number of registers between platforms.
@@ -234,11 +233,11 @@ pub fn encode_syscall_return_with_variant<SyscallVariant: Variant>(
234233
fn variant_to_reg<SyscallVariant: From<SyscallReturnVariant> + Into<usize>>(
235234
v: SyscallReturnVariant,
236235
) -> MachineRegister {
237-
// First map from
236+
// First map from `SyscallReturnVariant` to platform specific `SyscallVariant`
238237
let lowered_to_abi: SyscallVariant = v.into();
239-
// Then cast to usize
238+
// Then cast to usize to pass across user/kernel boundary
240239
let as_usize: usize = lowered_to_abi.into();
241-
// and pack that into a register
240+
// and pack that usize into a register
242241
as_usize.into()
243242
}
244243

kernel/src/utilities/capability_ptr.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,12 @@ impl CapabilityPtr {
155155
// CHERI can distinguish between a valid and invalid capability with zero length.
156156
// Tock, on the other hand, allows length zero allocations at any address.
157157
// This is especially important as NULL and zero are often used with allow
158-
// syscalls, which will reject invalid capabilities.
159-
// We special case length 0 here. This is important for users as they cannot rely
160-
// on the sanctity of zero length allocations to use as tokens. They are likely
161-
// already using length 1 anyway so as not to be confused between adjacent objects.
158+
// syscalls, which will reject invalid capabilities but must accept those values.
159+
// As we special case length 0 here (making it always valid) this can result in the
160+
// kernel accepting an invalid CHERI capability and returning it back to
161+
// userspace as a valid one.
162+
// This means that CHERI Tock users should not rely on tags of zero length
163+
// capabilities for securing any of their own mechanisms.
162164
(length == 0) || cheri_ptr.is_valid_for_operation(length, cheri_perms_for(perms))
163165
}
164166
CfgMatch::False(_) => true,

libraries/riscv-csr/src/csr.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,6 @@ pub const PMPADDR61: usize = 0x3ED;
107107
pub const PMPADDR62: usize = 0x3EE;
108108
pub const PMPADDR63: usize = 0x3EF;
109109

110-
pub const HMPCOUNTER_BASE: usize = 0xC00;
111-
112110
pub const SATP: usize = 0x180;
113111

114112
/// Read/Write registers.

0 commit comments

Comments
 (0)