crossing into kernel space
DESCRIPTION
How to go from libc into the kernel InterruptsTRANSCRIPT
![Page 1: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/1.jpg)
cs4414 Fall 2013University of Virginia
David Evans
Class 20:Crossing into Kernel Space
![Page 2: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/2.jpg)
University of Virginia cs4414 2
Plan for Today
Between libc and the kernelPS3 Benchmarking ResultsProject Time
7 November 2013
![Page 3: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/3.jpg)
University of Virginia cs4414 3
Recap
7 November 2013
run::Process::new(program, argv, options)
Rust
Run
time
spawn_process_os(prog, args, env, dir, in_fd, …)
fork()
libc: fork()
linux kernel: fork syscall
Today
![Page 4: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/4.jpg)
University of Virginia cs4414 4
libst
d/rt
/io/
nativ
e/pr
oces
s.rs
7 November 2013
#[cfg(unix)]fn spawn_process_os(prog: &str, args: &[~str], env: Option<~[(~str, ~str)]>, dir: Option<&Path>, in_fd: c_int, out_fd: c_int, err_fd: c_int) -> SpawnProcessResult { … #[cfg(not(target_os = "macos"), not(windows))] unsafe fn set_environ(envp: *c_void) { extern { static mut environ: *c_void; } environ = envp; }
unsafe {
let pid = fork(); if pid < 0 { fail!("failure in fork: {}", os::last_os_error()); } else if pid > 0 { return SpawnProcessResult {pid: pid, handle: ptr::null()}; }
… // 25 lines of failure-handing code}
![Page 5: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/5.jpg)
University of Virginia cs4414 5
Test Program
7 November 2013
use std::libc::funcs::posix88::unistd::fork;
#[fixed_stack_segment]fn main() { let pid = unsafe { fork() } ; println(fmt!("pid = %?", pid));}
> rustc fork.rs> ./forkpid = 0i32pid = 15039i32$ ./forkpid = 15043i32pid = 0i32
![Page 6: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/6.jpg)
University of Virginia cs4414 67 November 2013
use std::libc::funcs::posix88::unistd::fork;
#[fixed_stack_segment]fn main() { unsafe { fork() } ; }
> rustc -O -S fork.rs> wc -l fork.S 72 fork.S
.section __TEXT,__text,regular,pure_instructions .align 4, 0x90__ZN4main18h8b6694fe33a5855ag4v0.0E: .cfi_startproc leaq -2097152(%rsp), %r11 cmpq %gs:816, %r11 ja LBB0_2 movabsq $2097152, %r10 movabsq $0, %r11 callq ___morestack retLBB0_2: pushq %rbpLtmp2: .cfi_def_cfa_offset 16Ltmp3: .cfi_offset %rbp, -16 movq %rsp, %rbp
Ltmp4: .cfi_def_cfa_register %rbp popq %rbp jmp _fork .cfi_endproc
.globl _main.align 4, 0x90
_main: .cfi_startproc cmpq %gs:816, %rsp ja LBB1_2 movabsq $8, %r10 movabsq $0, %r11 callq ___morestack retLBB1_2: pushq %rbpLtmp7: .cfi_def_cfa_offset 16Ltmp8: .cfi_offset %rbp, -16 movq %rsp, %rbp
Ltmp9: .cfi_def_cfa_register %rbp movq %rsi, %rax movq %rdi, %rcx movq %rsi, %rax movq %rdi, %rcx leaq __ZN4main18h8b6694fe33a5855ag4v0.0E(%rip), %rsi xorl %edi, %edi movq %rcx, %rdx movq %rax, %rcx popq %rbp jmp __ZN8unstable4lang5start17hf72eb8b3c3a0a9ac4v0.8E .cfi_endproc
.section __DATA,__data .globl __rust_crate_map_toplevel .align 4__rust_crate_map_toplevel: .long 1 .space 4 .quad __rust_mod_map .quad __rust_crate_map_std_0.8_6c65cf4b443341b1 .quad 0
.zerofill __DATA,__bss,__rust_mod_map,16,3 .section __TEXT,__const .globl _rust_abi_version .align 3_rust_abi_version: .quad 1
.subsections_via_symbols
![Page 7: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/7.jpg)
University of Virginia cs4414 7
Could actual call to kernel fork be a regular call?
7 November 2013
![Page 8: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/8.jpg)
University of Virginia cs4414 8
Entering the Kernel
7 November 2013
run::Process::new(program, argv, options)
Rust
Run
time
spawn_process_os(prog, args, env, dir, in_fd, …)
fork()
libc: fork()
linux kernel: fork syscall
![Page 9: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/9.jpg)
University of Virginia cs4414 9
Supervisor Mode
What would happen if user-level code could just jump into kernel code?
7 November 2013
Kernel code needs (or at least uses) special privileges!
![Page 10: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/10.jpg)
University of Virginia cs4414 10
Entering the Kernel
7 November 2013
User-Level Code…movl $SYS_fork,%eaxint $0x80
int instruction generates an interrupt
![Page 11: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/11.jpg)
University of Virginia cs4414 11
Traditional PC Design
7 November 2013
CPUProgrammable
Interrupt Controller
(PIC)
Interval TimerKeyboard
![Page 12: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/12.jpg)
University of Virginia cs4414 127 November 2013
Page 2213 of Intel x86 Manual:http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
Modern x86 Design: “APIC” = “Advanced PIC”
![Page 13: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/13.jpg)
University of Virginia cs4414 137 November 2013
Page 2213 of Intel x86 Manual:http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
What should generate an “External Interrupt”?
What should generate a “Local Interrupt”?
![Page 14: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/14.jpg)
University of Virginia cs4414 147 November 2013
![Page 15: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/15.jpg)
University of Virginia cs4414 157 November 2013
![Page 16: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/16.jpg)
University of Virginia cs4414 167 November 2013
![Page 17: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/17.jpg)
University of Virginia cs4414 17
Handling Syscall
Interrupts
7 November 2013
…movl $SYS_fork,%eaxint $0x80
CPUProgrammable
Interrupt Controller
(PIC)
![Page 18: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/18.jpg)
University of Virginia cs4414 187 November 2013
![Page 19: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/19.jpg)
University of Virginia cs4414 197 November 2013
![Page 20: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/20.jpg)
University of Virginia cs4414 207 November 2013
Intel manual, p. 146:
![Page 21: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/21.jpg)
University of Virginia cs4414 217 November 2013
![Page 22: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/22.jpg)
University of Virginia cs4414 22
Running in Supervisor Mode
7 November 2013
run::Process::new(program, argv, options)
Rust
Run
time
spawn_process_os(prog, args, env, dir, in_fd, …)
fork()
libc: fork()
linux kernel: fork syscall
int 0x80
jumps into kernel codesets supervisor mode
![Page 23: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/23.jpg)
PS3 Bakeoff Winners
![Page 24: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/24.jpg)
University of Virginia cs4414 245 November 2013
reference zhtta
0 50 100 150 2000
1,000
2,000
3,000
4,000
5,000
6,000
Series1; 531.3
3902.7
960.8989.7
5701.3
3908.1
0.6
Total Duration (seconds)
Aver
age
Resp
onse
Tim
e (m
illis
econ
ds)
![Page 25: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/25.jpg)
University of Virginia cs4414 257 November 2013
8pm FridayRouss/Robertson Hall Room 120
![Page 26: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/26.jpg)
University of Virginia cs4414 267 November 2013
Decoy Project!
![Page 27: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/27.jpg)
University of Virginia cs4414 277 November 2013
![Page 28: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/28.jpg)
University of Virginia cs4414 285 November 2013
reference zhtta
0 50 100 150 2000
1,000
2,000
3,000
4,000
5,000
6,000
Series1; 531.3
3902.7
960.8989.7
5701.3
3908.1
0.6
Total Duration (seconds)
Aver
age
Resp
onse
Tim
e (m
illis
econ
ds)
Kiet, Mark, Tanmoy
Harriet, Kevin, Zeming
Hong, Jireh, MarshallChris, Tong, Yicheng
![Page 29: Crossing into Kernel Space](https://reader038.vdocuments.site/reader038/viewer/2022102901/55613057d8b42aa2118b4812/html5/thumbnails/29.jpg)
University of Virginia cs4414 29
Charge
7 November 2013
Find a team and project!
Decoy projects are only allowed in security classes.Sneaking around my house is no longer permitted.