Skip to content

Commit b36ccda

Browse files
committed
Optimize error naming
1 parent 09562e6 commit b36ccda

File tree

12 files changed

+76
-78
lines changed

12 files changed

+76
-78
lines changed

definitions/src/asm.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ pub const RET_OUT_OF_BOUND: u8 = 7;
1515
pub const RET_INVALID_PERMISSION: u8 = 8;
1616
pub const RET_SLOWPATH: u8 = 9;
1717
pub const RET_PAUSE: u8 = 10;
18-
pub const RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED: u8 = 11;
19-
pub const RET_SHADOW_STACK_NOT_LPAD: u8 = 12;
20-
pub const RET_SHADOW_STACK_LABEL_WRONG: u8 = 13;
21-
pub const RET_SHADOW_STACK_VALUE_WRONG: u8 = 14;
22-
pub const RET_SHADOW_STACK_STACK_OUT_OF_STACK: u8 = 15;
18+
pub const RET_CFI_LPAD_NOT_4BYTE_ALIGNED: u8 = 11;
19+
pub const RET_CFI_LPAD_NOT_FOUND: u8 = 12;
20+
pub const RET_CFI_LPAD_LABEL_MISMATCH: u8 = 13;
21+
pub const RET_CFI_SS_VALUE_FAULT: u8 = 14;
22+
pub const RET_CFI_SS_OUT_OF_STACK: u8 = 15;
2323

2424
#[inline(always)]
2525
pub fn calculate_slot(addr: u64) -> usize {

definitions/src/generate_asm_constants.rs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ use ckb_vm_definitions::{
22
DEFAULT_SHADOW_STACK_SIZE, MEMORY_FRAME_PAGE_SHIFTS, MEMORY_FRAME_SHIFTS, MEMORY_FRAMESIZE,
33
RISCV_PAGE_SHIFTS, RISCV_PAGESIZE,
44
asm::{
5-
AsmCoreMachine, FixedTrace, InvokeData, RET_CYCLES_OVERFLOW, RET_DECODE_TRACE,
6-
RET_DYNAMIC_JUMP, RET_EBREAK, RET_ECALL, RET_INVALID_PERMISSION, RET_MAX_CYCLES_EXCEEDED,
7-
RET_OUT_OF_BOUND, RET_PAUSE, RET_SHADOW_STACK_LABEL_WRONG,
8-
RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED, RET_SHADOW_STACK_NOT_LPAD,
9-
RET_SHADOW_STACK_STACK_OUT_OF_STACK, RET_SHADOW_STACK_VALUE_WRONG, RET_SLOWPATH,
10-
TRACE_ITEM_LENGTH,
5+
AsmCoreMachine, FixedTrace, InvokeData, RET_CFI_LPAD_LABEL_MISMATCH,
6+
RET_CFI_LPAD_NOT_4BYTE_ALIGNED, RET_CFI_LPAD_NOT_FOUND, RET_CFI_SS_OUT_OF_STACK,
7+
RET_CFI_SS_VALUE_FAULT, RET_CYCLES_OVERFLOW, RET_DECODE_TRACE, RET_DYNAMIC_JUMP,
8+
RET_EBREAK, RET_ECALL, RET_INVALID_PERMISSION, RET_MAX_CYCLES_EXCEEDED, RET_OUT_OF_BOUND,
9+
RET_PAUSE, RET_SLOWPATH, TRACE_ITEM_LENGTH,
1110
},
1211
for_each_inst,
1312
instructions::{MAXIMUM_OPCODE, MINIMAL_OPCODE, instruction_opcode_name},
@@ -74,24 +73,24 @@ fn main() {
7473
println!("#define CKB_VM_ASM_RET_SLOWPATH {}", RET_SLOWPATH);
7574
println!("#define CKB_VM_ASM_RET_PAUSE {}", RET_PAUSE);
7675
println!(
77-
"#define CKB_VM_ASM_RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED {}",
78-
RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED
76+
"#define CKB_VM_ASM_RET_CFI_LPAD_NOT_4BYTE_ALIGNED {}",
77+
RET_CFI_LPAD_NOT_4BYTE_ALIGNED
7978
);
8079
println!(
81-
"#define CKB_VM_ASM_RET_SHADOW_STACK_NOT_LPAD {}",
82-
RET_SHADOW_STACK_NOT_LPAD
80+
"#define CKB_VM_ASM_RET_CFI_LPAD_NOT_FOUND {}",
81+
RET_CFI_LPAD_NOT_FOUND
8382
);
8483
println!(
85-
"#define CKB_VM_ASM_RET_SHADOW_STACK_LABEL_WRONG {}",
86-
RET_SHADOW_STACK_LABEL_WRONG
84+
"#define CKB_VM_ASM_RET_CFI_LPAD_LABEL_MISMATCH {}",
85+
RET_CFI_LPAD_LABEL_MISMATCH
8786
);
8887
println!(
89-
"#define CKB_VM_ASM_RET_SHADOW_STACK_VALUE_WRONG {}",
90-
RET_SHADOW_STACK_VALUE_WRONG
88+
"#define CKB_VM_ASM_RET_CFI_SS_VALUE_FAULT {}",
89+
RET_CFI_SS_VALUE_FAULT
9190
);
9291
println!(
93-
"#define CKB_VM_ASM_RET_SHADOW_STACK_STACK_OUT_OF_STACK {}",
94-
RET_SHADOW_STACK_STACK_OUT_OF_STACK
92+
"#define CKB_VM_ASM_RET_CFI_SS_OUT_OF_STACK {}",
93+
RET_CFI_SS_OUT_OF_STACK
9594
);
9695
println!();
9796

src/decoder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ impl DefaultDecoder {
124124
if let Some(instruction) = factory(instruction_bits, self.version, self.cfi) {
125125
// Shadow Stack Software Check for LPAD instruction.
126126
if extract_opcode(instruction) == insts::OP_LPAD && pc % 4 != 0 {
127-
return Err(Error::ShadowStackLpadNot4ByteAligned);
127+
return Err(Error::CFILpadNot4ByteAligned);
128128
}
129129
self.instructions_cache[instruction_cache_key] = (pc, instruction);
130130
return Ok(instruction);

src/error.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ pub enum Error {
5252
#[display("yield")]
5353
Yield,
5454
#[display("shadow stack lpad not 4-byte aligned")]
55-
ShadowStackLpadNot4ByteAligned,
55+
CFILpadNot4ByteAligned,
5656
#[display("shadow stack not lpad")]
57-
ShadowStackNotLpad,
57+
CFILpadNotFound,
5858
#[display("shadow stack label wrong")]
59-
ShadowStackLabelWrong,
59+
CFILpadLabelMismatched,
6060
#[display("shadow stack value wrong")]
61-
ShadowStackValueWrong,
61+
CFIShadowStackValueFault,
6262
#[display("shadow stack out of stack")]
63-
ShadowStackOutOfStack,
63+
CFIShadowStackOutOfStack,
6464
}
6565

6666
#[derive(Debug, PartialEq, Clone, Eq, Display)]

src/instructions/execute.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1514,13 +1514,13 @@ pub fn handle_lpad<Mac: Machine>(machine: &mut Mac, inst: Instruction) -> Result
15141514
}
15151515
// If PC not 4-byte aligned then software-check exception.
15161516
if machine.pc().to_u64() % 4 != 0 {
1517-
return Err(Error::ShadowStackLpadNot4ByteAligned);
1517+
return Err(Error::CFILpadNot4ByteAligned);
15181518
}
15191519
// If landing pad label not matched -> software-check exception
15201520
let lpl = Utype(inst).immediate_u();
15211521
let x7l = machine.registers()[T2].to_u32() & 0xFFFFF000;
15221522
if lpl != x7l && lpl != 0 {
1523-
return Err(Error::ShadowStackLabelWrong);
1523+
return Err(Error::CFILpadLabelMismatched);
15241524
}
15251525
machine.set_elp(0);
15261526
Ok(())
@@ -1532,7 +1532,7 @@ pub fn handle_sspush<Mac: Machine>(machine: &mut Mac, inst: Instruction) -> Resu
15321532
let ssp = machine.ssp().clone();
15331533
let ssp = ssp.overflowing_sub(&Mac::REG::from_u8(Mac::REG::BITS / 8));
15341534
if ssp.to_u64() == 0 {
1535-
return Err(Error::ShadowStackOutOfStack);
1535+
return Err(Error::CFIShadowStackOutOfStack);
15361536
}
15371537
machine.set_ra(&ssp, &rs2_value)?;
15381538
machine.set_ssp(&ssp);
@@ -1546,7 +1546,7 @@ pub fn handle_sspopchk<Mac: Machine>(machine: &mut Mac, inst: Instruction) -> Re
15461546
let ret = machine.ra(&ssp)?.clone();
15471547
let ssp = ssp.overflowing_add(&Mac::REG::from_u8(Mac::REG::BITS / 8));
15481548
if ret.to_u64() != rs1_value.to_u64() {
1549-
return Err(Error::ShadowStackValueWrong);
1549+
return Err(Error::CFIShadowStackValueFault);
15501550
}
15511551
machine.set_ssp(&ssp);
15521552
Ok(())

src/machine/asm/cdefinitions_generated.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
#define CKB_VM_ASM_RET_INVALID_PERMISSION 8
1818
#define CKB_VM_ASM_RET_SLOWPATH 9
1919
#define CKB_VM_ASM_RET_PAUSE 10
20-
#define CKB_VM_ASM_RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED 11
21-
#define CKB_VM_ASM_RET_SHADOW_STACK_NOT_LPAD 12
22-
#define CKB_VM_ASM_RET_SHADOW_STACK_LABEL_WRONG 13
23-
#define CKB_VM_ASM_RET_SHADOW_STACK_VALUE_WRONG 14
24-
#define CKB_VM_ASM_RET_SHADOW_STACK_STACK_OUT_OF_STACK 15
20+
#define CKB_VM_ASM_RET_CFI_LPAD_NOT_4BYTE_ALIGNED 11
21+
#define CKB_VM_ASM_RET_CFI_LPAD_NOT_FOUND 12
22+
#define CKB_VM_ASM_RET_CFI_LPAD_LABEL_MISMATCH 13
23+
#define CKB_VM_ASM_RET_CFI_SS_VALUE_FAULT 14
24+
#define CKB_VM_ASM_RET_CFI_SS_OUT_OF_STACK 15
2525

2626
#define CKB_VM_ASM_REGISTER_RA 1
2727
#define CKB_VM_ASM_REGISTER_SP 2

src/machine/asm/execute_aarch64.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,16 +2005,16 @@ ckb_vm_x64_execute:
20052005
mov x0, CKB_VM_ASM_RET_INVALID_PERMISSION
20062006
b .exit
20072007
.exit_shadow_stack_not_lpad:
2008-
mov x0, CKB_VM_ASM_RET_SHADOW_STACK_NOT_LPAD
2008+
mov x0, CKB_VM_ASM_RET_CFI_LPAD_NOT_FOUND
20092009
b .exit
20102010
.exit_shadow_stack_label_wrong:
2011-
mov x0, CKB_VM_ASM_RET_SHADOW_STACK_LABEL_WRONG
2011+
mov x0, CKB_VM_ASM_RET_CFI_LPAD_LABEL_MISMATCH
20122012
b .exit
20132013
.exit_shadow_stack_value_wrong:
2014-
mov x0, CKB_VM_ASM_RET_SHADOW_STACK_VALUE_WRONG
2014+
mov x0, CKB_VM_ASM_RET_CFI_SS_VALUE_FAULT
20152015
b .exit
20162016
.exit_shadow_stack_stack_out_of_stack:
2017-
mov x0, CKB_VM_ASM_RET_SHADOW_STACK_STACK_OUT_OF_STACK
2017+
mov x0, CKB_VM_ASM_RET_CFI_SS_OUT_OF_STACK
20182018
b .exit
20192019
.exit_pause:
20202020
mov x0, CKB_VM_ASM_RET_PAUSE

src/machine/asm/execute_x64.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2496,19 +2496,19 @@ ckb_vm_x64_execute:
24962496
jmp .exit
24972497
.p2align 3
24982498
.exit_shadow_stack_not_lpad:
2499-
mov $CKB_VM_ASM_RET_SHADOW_STACK_NOT_LPAD, ARG_RETd
2499+
mov $CKB_VM_ASM_RET_CFI_LPAD_NOT_FOUND, ARG_RETd
25002500
jmp .exit
25012501
.p2align 3
25022502
.exit_shadow_stack_label_wrong:
2503-
mov $CKB_VM_ASM_RET_SHADOW_STACK_LABEL_WRONG, ARG_RETd
2503+
mov $CKB_VM_ASM_RET_CFI_LPAD_LABEL_MISMATCH, ARG_RETd
25042504
jmp .exit
25052505
.p2align 3
25062506
.exit_shadow_stack_value_wrong:
2507-
mov $CKB_VM_ASM_RET_SHADOW_STACK_VALUE_WRONG, ARG_RETd
2507+
mov $CKB_VM_ASM_RET_CFI_SS_VALUE_FAULT, ARG_RETd
25082508
jmp .exit
25092509
.p2align 3
25102510
.exit_shadow_stack_stack_out_of_stack:
2511-
mov $CKB_VM_ASM_RET_SHADOW_STACK_STACK_OUT_OF_STACK, ARG_RETd
2511+
mov $CKB_VM_ASM_RET_CFI_SS_OUT_OF_STACK, ARG_RETd
25122512
jmp .exit
25132513
/*
25142514
* Some instructions that are difficult to implement will be interpreted and

src/machine/asm/mod.rs

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ use ckb_vm_definitions::{
77
ISA_MOP, MEMORY_FRAME_PAGE_SHIFTS, MEMORY_FRAMESIZE, RISCV_GENERAL_REGISTER_NUMBER,
88
RISCV_PAGE_SHIFTS,
99
asm::{
10-
FixedTrace, InvokeData, RET_CYCLES_OVERFLOW, RET_DECODE_TRACE, RET_DYNAMIC_JUMP,
11-
RET_EBREAK, RET_ECALL, RET_INVALID_PERMISSION, RET_MAX_CYCLES_EXCEEDED, RET_OUT_OF_BOUND,
12-
RET_PAUSE, RET_SHADOW_STACK_LABEL_WRONG, RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED,
13-
RET_SHADOW_STACK_NOT_LPAD, RET_SHADOW_STACK_STACK_OUT_OF_STACK,
14-
RET_SHADOW_STACK_VALUE_WRONG, RET_SLOWPATH,
10+
FixedTrace, InvokeData, RET_CFI_LPAD_LABEL_MISMATCH, RET_CFI_LPAD_NOT_4BYTE_ALIGNED,
11+
RET_CFI_LPAD_NOT_FOUND, RET_CFI_SS_OUT_OF_STACK, RET_CFI_SS_VALUE_FAULT,
12+
RET_CYCLES_OVERFLOW, RET_DECODE_TRACE, RET_DYNAMIC_JUMP, RET_EBREAK, RET_ECALL,
13+
RET_INVALID_PERMISSION, RET_MAX_CYCLES_EXCEEDED, RET_OUT_OF_BOUND, RET_PAUSE, RET_SLOWPATH,
1514
},
1615
};
1716
use rand::{SeedableRng, prelude::RngCore};
@@ -154,7 +153,7 @@ where
154153
let size = Self::REG::BITS as usize / 8;
155154
let (end, overflowed) = offset.overflowing_add(size);
156155
if overflowed || end > DEFAULT_SHADOW_STACK_SIZE {
157-
return Err(Error::ShadowStackOutOfStack);
156+
return Err(Error::CFIShadowStackOutOfStack);
158157
}
159158
let ra = self
160159
.as_ref()
@@ -172,7 +171,7 @@ where
172171
let size = Self::REG::BITS as usize / 8;
173172
let (end, overflowed) = offset.overflowing_add(size);
174173
if overflowed || end > DEFAULT_SHADOW_STACK_SIZE {
175-
return Err(Error::ShadowStackOutOfStack);
174+
return Err(Error::CFIShadowStackOutOfStack);
176175
}
177176
let bytes = value.to_le_bytes().to_vec();
178177
self.as_mut().shadow_stack[offset..end].copy_from_slice(&bytes);
@@ -870,21 +869,21 @@ impl<R: AsmCoreMachineRevealer, D: TraceDecoder> DefaultMachineRunner for Abstra
870869
self.machine.pause.free();
871870
return Err(Error::Pause);
872871
}
873-
RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED => {
872+
RET_CFI_LPAD_NOT_4BYTE_ALIGNED => {
874873
// Should not be caught. The check occurs during the decoder phase.
875874
unreachable!();
876875
}
877-
RET_SHADOW_STACK_NOT_LPAD => {
878-
return Err(Error::ShadowStackNotLpad);
876+
RET_CFI_LPAD_NOT_FOUND => {
877+
return Err(Error::CFILpadNotFound);
879878
}
880-
RET_SHADOW_STACK_LABEL_WRONG => {
881-
return Err(Error::ShadowStackLabelWrong);
879+
RET_CFI_LPAD_LABEL_MISMATCH => {
880+
return Err(Error::CFILpadLabelMismatched);
882881
}
883-
RET_SHADOW_STACK_VALUE_WRONG => {
884-
return Err(Error::ShadowStackValueWrong);
882+
RET_CFI_SS_VALUE_FAULT => {
883+
return Err(Error::CFIShadowStackValueFault);
885884
}
886-
RET_SHADOW_STACK_STACK_OUT_OF_STACK => {
887-
return Err(Error::ShadowStackOutOfStack);
885+
RET_CFI_SS_OUT_OF_STACK => {
886+
return Err(Error::CFIShadowStackOutOfStack);
888887
}
889888
_ => return Err(Error::Asm(result)),
890889
}
@@ -949,21 +948,21 @@ impl<R: AsmCoreMachineRevealer, D: TraceDecoder> AbstractAsmMachine<R, D> {
949948
let instruction = decoder.decode(self.machine.memory_mut(), pc)?;
950949
execute_instruction(instruction, &mut self.machine)?;
951950
}
952-
RET_SHADOW_STACK_LPAD_NOT_4BYTE_ALIGNED => {
951+
RET_CFI_LPAD_NOT_4BYTE_ALIGNED => {
953952
// Should not be caught. The check occurs during the decoder phase.
954953
unreachable!();
955954
}
956-
RET_SHADOW_STACK_NOT_LPAD => {
957-
return Err(Error::ShadowStackNotLpad);
955+
RET_CFI_LPAD_NOT_FOUND => {
956+
return Err(Error::CFILpadNotFound);
958957
}
959-
RET_SHADOW_STACK_LABEL_WRONG => {
960-
return Err(Error::ShadowStackLabelWrong);
958+
RET_CFI_LPAD_LABEL_MISMATCH => {
959+
return Err(Error::CFILpadLabelMismatched);
961960
}
962-
RET_SHADOW_STACK_VALUE_WRONG => {
963-
return Err(Error::ShadowStackValueWrong);
961+
RET_CFI_SS_VALUE_FAULT => {
962+
return Err(Error::CFIShadowStackValueFault);
964963
}
965-
RET_SHADOW_STACK_STACK_OUT_OF_STACK => {
966-
return Err(Error::ShadowStackOutOfStack);
964+
RET_CFI_SS_OUT_OF_STACK => {
965+
return Err(Error::CFIShadowStackOutOfStack);
967966
}
968967
_ => return Err(Error::Asm(result)),
969968
}

src/machine/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ impl<R: Register, M: Memory<REG = R>> CoreMachine for DefaultCoreMachine<R, M> {
466466
let size = Self::REG::BITS as usize / 8;
467467
let (end, overflowed) = offset.overflowing_add(size);
468468
if overflowed || end > DEFAULT_SHADOW_STACK_SIZE {
469-
return Err(Error::ShadowStackOutOfStack);
469+
return Err(Error::CFIShadowStackOutOfStack);
470470
}
471471
let ra = self
472472
.shadow_stack
@@ -491,7 +491,7 @@ impl<R: Register, M: Memory<REG = R>> CoreMachine for DefaultCoreMachine<R, M> {
491491
let size = Self::REG::BITS as usize / 8;
492492
let (end, overflowed) = offset.overflowing_add(size);
493493
if overflowed || end > DEFAULT_SHADOW_STACK_SIZE {
494-
return Err(Error::ShadowStackOutOfStack);
494+
return Err(Error::CFIShadowStackOutOfStack);
495495
}
496496
let bytes = match size {
497497
4 => value.to_u32().to_le_bytes().to_vec(),
@@ -933,7 +933,7 @@ impl<Inner: SupportMachine, Decoder> DefaultMachine<Inner, Decoder> {
933933
decoder.decode(memory, pc)?
934934
};
935935
if self.elp() != 0 && extract_opcode(instruction) != insts::OP_LPAD {
936-
return Err(Error::ShadowStackNotLpad);
936+
return Err(Error::CFILpadNotFound);
937937
}
938938
let cycles = self.instruction_cycle_func()(instruction);
939939
self.add_cycles(cycles)?;

0 commit comments

Comments
 (0)