Studie en implementatie van input replay Cornelis Frank
INPUTPROCESSING OUTPUT Normaal verloop: Recording: INPUT PROCESSING OUTPUT RECORDING Replay: INPUTPROCESSINGOUTPUT REPLAY
Doel input replay: dezelfde output genereren ! Dit is soms niet gewenst bv: append bij files Algemeen: OUTPUT niet state-less of history-dependent bv: robotarm, neuraal netwerk OUTPUT perceptionele OUTPUT Oplossing: selectieve output bij replay-fase
Recording Soorten input –Externe IPC ( SYSV IPC) –Interne IPC
Recording: externe IPC USER PROGRAM Linux KERNEL syscall U1U2KERNEL SYSV IPC
Recording: interne IPC USER PROGRAM task1task2 CLONE Niet-deterministisch scheduler, IRQs, CPU Een lock-protocol verhelpt dit niet!
Recording methodes Brute force: full context recording –Memory space –Processor state Selectief –Registers –Geheugen
Selectieve recording: registers Tabelleren: manueel werk syscallR1R2R3 writeXX readXX Automatiseren: at compile-time GCC.section magic
Selectieve recording: geheugen Comparing: traag, oude copy nodig Vóór de system callNa de system call cmp
Dirty-flags in paging systeem Nog steeds lineair scannen Selectieve recording: geheugen PDBR Page Directory Page Table Page 4KB dirty flags read-only flags
Read-only flags + exception handler COW conflict bij fork Write-macro’s instrumenteren –put_user(value, *addr) –copy_to_user(*to, *from, count) Selectieve recording: geheugen
Input Recording task_struct User data memoryUser Code entry.S kernel module put_user int 0x80 mm linux kernel if (current->ptrace & PT_PTRACED) { … } current
Opvragen van de input record Via een extensie op de ptrace system call Parent process Child process linux kernel tracing ptrace peek/poke extensie ptrace
ptrace uitbreidingen long int ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data) PTRACE_RAWMEMDIFF Opvragen van de raw memory record PTRACE_DIFFMEM Opvragen van de genormaliseerde record PTRACE_PATCHMEM Opnieuw invoeren van een record (bij replay)
Normalisatie User data memory raw record genormaliseerde record
Input replay: besluit Recording perfect mogelijk m.b.v. extended ptrace kernel patch Replay mogelijk in de meeste gevallen… Implementatie nog te schrijven