intr5.c
up: index
prev: intr4.c
next: intr6.c
#include <inttypes.h>
#include <cheriintrin.h>
#include <stdio.h>
#include "capprint.h"
void real_f() { }
int main()
{
void (*x)() = &real_f;
fprintf(stderr,"Original: %" PTR_FMT "\n", sptr((void*)x));
void (*y)() = cheri_perms_and(x, 0l);
fprintf(stderr,"Modified: %" PTR_FMT "\n", sptr((void*)y));
}
Experimental data (what does this mean?)
cerberus-cheri-no-pnvi
cerberus-cheri-revocation-no-pnvi
cerberus-cheri-cornucopia-no-pnvi Original: (@disabled, 0x100000385 [rxR,0x100000385-0x100000387] (sentry))
Modified: (@disabled, 0x100000385 [,0x100000385-0x100000387] (invalid,sentry))
cerberus-cheri
cerberus-cheri-revocation
cerberus-cheri-cornucopia Original: (@empty, 0x100000385 [rxR,0x100000385-0x100000387] (sentry))
Modified: (@empty, 0x100000385 [,0x100000385-0x100000387] (invalid,sentry))
clang-riscv-O3-bounds-subobject-safe exit codes: compile 0 / execute 1
Program received signal SIGPROT, CHERI protection violation.
Capability sealed fault caused by register ca0.
main () at tests/cheri/intr5.c:12
12 void (*y)() = cheri_perms_and(x, 0l);
#0 main () at tests/cheri/intr5.c:12
y = <optimized out>
x = <optimized out>
Original: 0x101fd4 [rxR,0x100000-0x104480] (sentry,capmode)
clang-riscv-O0-bounds-subobject-safe
clang-riscv-O0-bounds-aggressive
clang-riscv-O0-bounds-very-aggressive
clang-riscv-O0-bounds-everywhere-unsafe exit codes: compile 0 / execute 1
Program received signal SIGPROT, CHERI protection violation.
Capability sealed fault caused by register ca2.
0x0000000000102046 in main () at tests/cheri/intr5.c:12
12 void (*y)() = cheri_perms_and(x, 0l);
#0 0x0000000000102046 in main () at tests/cheri/intr5.c:12
x = 0x101fb2 <real_f> [rxR,0x100000-0x104440] (sentry,capmode)
y = 0x4011416a <rtld_nop_exit> [rxR,0x40104000-0x4012c300] (sentry,capmode)
Original: 0x101fb2 [rxR,0x100000-0x104440] (sentry,capmode)
clang-riscv-O3-bounds-conservative exit codes: compile 0 / execute 1
Program received signal SIGPROT, CHERI protection violation.
Capability sealed fault caused by register ca0.
0x000000000010207c in main () at tests/cheri/intr5.c:12
12 void (*y)() = cheri_perms_and(x, 0l);
#0 0x000000000010207c in main () at tests/cheri/intr5.c:12
y = <optimized out>
x = <optimized out>
Original: 0x101fee [rxR,0x100000-0x1044a0] (sentry,capmode)
clang-riscv-O0-bounds-conservative
clang-riscv-O0-bounds-references-only exit codes: compile 0 / execute 1
Program received signal SIGPROT, CHERI protection violation.
Capability sealed fault caused by register ca2.
0x000000000010201a in main () at tests/cheri/intr5.c:12
12 void (*y)() = cheri_perms_and(x, 0l);
#0 0x000000000010201a in main () at tests/cheri/intr5.c:12
x = 0x101f92 <real_f> [rxR,0x100000-0x104400] (sentry,capmode)
y = 0x4011416a <rtld_nop_exit> [rxR,0x40104000-0x4012c300] (sentry,capmode)
Original: 0x101f92 [rxR,0x100000-0x104400] (sentry,capmode)
clang-morello-O3-bounds-subobject-safe Original: 0x111001 [rxR,0x100000-0x131580] (sentry)
Modified: 0x111001 [,0x100000-0x131580] (invalid,sentry)
clang-morello-O0-bounds-subobject-safe
clang-morello-O0-bounds-aggressive
clang-morello-O0-bounds-very-aggressive
clang-morello-O0-bounds-everywhere-unsafe Original: 0x110e31 [rxR,0x100000-0x131340] (sentry)
Modified: 0x110e31 [,0x100000-0x131340] (invalid,sentry)
clang-morello-O3-bounds-conservative Original: 0x111041 [rxR,0x100000-0x1315c0] (sentry)
Modified: 0x111041 [,0x100000-0x1315c0] (invalid,sentry)
clang-morello-O0-bounds-conservative
clang-morello-O0-bounds-references-only Original: 0x110e11 [rxR,0x100000-0x131300] (sentry)
Modified: 0x110e11 [,0x100000-0x131300] (invalid,sentry)
gcc-morello-O3 tests/cheri/intr5.c: In function 'main':
tests/cheri/intr5.c:11:53: warning: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic]
11 | fprintf(stderr,"Original: %" PTR_FMT "\n", sptr((void*)x));
| ^
tests/cheri/intr5.c:13:53: warning: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic]
13 | fprintf(stderr,"Modified: %" PTR_FMT "\n", sptr((void*)y));
| ^
Original: 0x402fa1 [rxRE,0x400000-0x4271c0] (sentry)
Modified: 0x402fa1 [,0x400000-0x4271c0] (invalid,sentry)
gcc-morello-O0 tests/cheri/intr5.c: In function 'main':
tests/cheri/intr5.c:11:53: warning: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic]
11 | fprintf(stderr,"Original: %" PTR_FMT "\n", sptr((void*)x));
| ^
tests/cheri/intr5.c:13:53: warning: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic]
13 | fprintf(stderr,"Modified: %" PTR_FMT "\n", sptr((void*)y));
| ^
Original: 0x403805 [rxRE,0x400000-0x427600] (sentry)
Modified: 0x403805 [,0x400000-0x427600] (invalid,sentry)