Skip to content

Spectre attacks(Spectre-{PHT, BTB RSB} and Spectre v4) on RISC-V ISA.

License

Notifications You must be signed in to change notification settings

zznjupt/Spectre-RISCV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A Study of MCU-level Attacks and Defenses on Power Distribution Fusion Terminals

The work based on this code has been published in CIRED Workshop-Shanghai 2022, A Study of MCU-level Attacks and Defenses on Power Distribution Fusion Terminals.

使用说明

./$ make # This will build .dump and .riscv(bin) files for analysize or installed on Linux OS to run the attacks.

Appendix

BOOM Parameters

[C0] ======BOOM Tile 0 Params======

[C0] ====Overall Frontend Params====

[C0] ==L1-ICache==
[C0] Fetch bytes   : 8
[C0] Block bytes   : 64
[C0] Row bytes     : 8
[C0] Word bits     : 64
[C0] Sets          : 64
[C0] Ways          : 4
[C0] Refill cycles : 8
[C0] RAMs          : (64 x 512) using 1 banks
[C0] Single-banked
[C0] I-TLB ways    : 32

[C0] ==Branch Predictor Memory Sizes==

[C0] bank0 tage_l2: 128 x 44 = 704
[C0] bank0 tage_l4: 128 x 44 = 704
[C0] bank0 tage_l8: 256 x 48 = 1536
[C0] bank0 tage_l16: 256 x 48 = 1536
[C0] bank0 tage_l32: 128 x 52 = 832
[C0] bank0 tage_l64: 128 x 52 = 832
[C0] bank0 btb_meta_way0: 128 x 124 = 1984
[C0] bank0 btb_data_way0: 128 x 56 = 896
[C0] bank0 btb_meta_way1: 128 x 124 = 1984
[C0] bank0 btb_data_way1: 128 x 56 = 896
[C0] bank0 ebtb: 128 x 40 = 640
[C0] bank0 bim: 2048 x 8 = 2048
[C0] Total bpd size: 14 KB

[C0] ====Overall Core Params====

[C0] ===ExecutionUnits===

[C0] ==1-wide Machine==
[C0] ==3 Issue==

[C0] ==ExeUnit==
[C0]  - Mem
[C0] ==ExeUnit==
[C0]  - ALU
[C0]  - Mul
[C0]  - Div
[C0]  - IFPU

[C0] ===FP Pipeline===

[C0] ==Floating Point Regfile==
[C0] Num RF Read Ports     : 3
[C0] Num RF Write Ports    : 2
[C0] RF Cost (R+W)*(R+2W)  : 35
[C0] Bypassable Units      : List(false, false)
[C0] Num Wakeup Ports      : 2
[C0] Num Bypass Ports      : 0

[C0] ==ROB==
[C0] Machine Width      : 1
[C0] Rob Entries        : 32
[C0] Rob Rows           : 32
[C0] Rob Row size       : 5
[C0] log2Ceil(coreWidth): 0
[C0] FPU FFlag Ports    : 2

[C0] ===Other Core Params===
[C0] Fetch Width           : 4
[C0] Decode Width          : 1
[C0] Issue Width           : 3
[C0] ROB Size              : 32
[C0] Issue Window Size     : List(8, 8, 8) (Age-based Priority)
[C0] Load/Store Unit Size  : 8/8
[C0] Num Int Phys Registers: 52
[C0] Num FP  Phys Registers: 48
[C0] Max Branch Count      : 8
[C0] ==Integer Regfile==
[C0] Num RF Read Ports     : 4
[C0] Num RF Write Ports    : 2
[C0] RF Cost (R+W)*(R+2W)  : 48
[C0] Bypassable Units      : List(true, true)

[C0] Num Slow Wakeup Ports : 2
[C0] Num Fast Wakeup Ports : 1
[C0] Num Bypass Ports      : 3

[C0] DCache Ways           : 4
[C0] DCache Sets           : 64
[C0] DCache nMSHRs         : 2
[C0] ICache Ways           : 4
[C0] ICache Sets           : 64
[C0] D-TLB Ways            : 8
[C0] I-TLB Ways            : 32
[C0] Paddr Bits            : 32
[C0] Vaddr Bits            : 39

[C0] Using FPU Unit?       : true
[C0] Using FDivSqrt?       : true
[C0] Using VM?             : true


Interrupt map (2 harts 8 interrupts):
  [1, 8] => gen

/ {
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "freechips,rocketchip-vivado-dev";
        model = "freechips,rocketchip-vivado";
        L14: cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                timebase-frequency = <1000000>;
                L3: cpu@0 {
                        clock-frequency = <0>;
                        compatible = "ucb-bar,boom0", "riscv";
                        d-cache-block-size = <64>;
                        d-cache-sets = <64>;
                        d-cache-size = <16384>;
                        d-tlb-sets = <1>;
                        d-tlb-size = <8>;
                        device_type = "cpu";
                        hardware-exec-breakpoint-count = <0>;
                        i-cache-block-size = <64>;
                        i-cache-sets = <64>;
                        i-cache-size = <16384>;
                        i-tlb-sets = <1>;
                        i-tlb-size = <32>;
                        mmu-type = "riscv,sv39";
                        next-level-cache = <&L9>;
                        reg = <0x0>;
                        riscv,isa = "rv64imafdc";
                        riscv,pmpgranularity = <4>;
                        riscv,pmpregions = <8>;
                        status = "okay";
                        timebase-frequency = <1000000>;
                        tlb-split;
                        L2: interrupt-controller {
                                #interrupt-cells = <1>;
                                compatible = "riscv,cpu-intc";
                                interrupt-controller;
                        };
                };
        };
        L9: memory@80000000 {
                device_type = "memory";
                reg = <0x80000000 0x80000000>;
        };
        L13: soc {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "freechips,rocketchip-vivado-soc", "simple-bus";
                ranges;
                L5: clint@2000000 {
                        compatible = "riscv,clint0";
                        interrupts-extended = <&L2 3 &L2 7>;
                        reg = <0x2000000 0x10000>;
                        reg-names = "control";
                };
                L6: debug-controller@0 {
                        compatible = "sifive,debug-013", "riscv,debug-013";
                        debug-attach = "dmi";
                        interrupts-extended = <&L2 65535>;
                        reg = <0x0 0x1000>;
                        reg-names = "control";
                };
                L1: error-device@3000 {
                        compatible = "sifive,error0";
                        reg = <0x3000 0x1000>;
                };
                L8: external-interrupts {
                        interrupt-parent = <&L4>;
                        interrupts = <1 2 3 4 5 6 7 8>;
                };
                L4: interrupt-controller@c000000 {
                        #interrupt-cells = <1>;
                        compatible = "riscv,plic0";
                        interrupt-controller;
                        interrupts-extended = <&L2 11 &L2 9>;
                        reg = <0xc000000 0x4000000>;
                        reg-names = "control";
                        riscv,max-priority = <7>;
                        riscv,ndev = <8>;
                };
                L10: mmio-port-axi4@60000000 {
                        #address-cells = <1>;
                        #size-cells = <1>;
                        compatible = "simple-bus";
                        ranges = <0x60000000 0x60000000 0x20000000>;
                };
                L11: rom@10000 {
                        compatible = "sifive,rom0";
                        reg = <0x10000 0x10000>;
                        reg-names = "mem";
                };
                L0: subsystem_pbus_clock {
                        #clock-cells = <0>;
                        clock-frequency = <100000000>;
                        clock-output-names = "subsystem_pbus_clock";
                        compatible = "fixed-clock";
                };
        };
};

Generated Address Map
               0 -     1000 ARWX  debug-controller@0
            3000 -     4000 ARWX  error-device@3000
           10000 -    20000  R X  rom@10000
         2000000 -  2010000 ARW   clint@2000000
         c000000 - 10000000 ARW   interrupt-controller@c000000
        60000000 - 80000000  RWX  mmio-port-axi4@60000000
        80000000 - 100000000  RWXC memory@80000000
        ```

About

Spectre attacks(Spectre-{PHT, BTB RSB} and Spectre v4) on RISC-V ISA.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published