diff --git a/06-subroutines-interruptions/fuck-system.c b/06-subroutines-interruptions/fuck-system.c index b3dcdb4..d43b8c1 100644 --- a/06-subroutines-interruptions/fuck-system.c +++ b/06-subroutines-interruptions/fuck-system.c @@ -22,17 +22,22 @@ static int __init fuck_system(void) struct desc_ptr newidtreg; struct desc_ptr oldidtreg; gate_desc *oldidt, *newidt; + + pr_info("nessesary variables created"); // Выделяем память под 256 прерываний unsigned long new_page = __get_free_page(GFP_KERNEL); if (!new_page) { return -ENOMEM; } + pr_info("new page allocated"); store_idt(&oldidtreg); + pr_info("IDT register stored"); newidtreg.address = new_page; newidtreg.size = oldidtreg.size; newidt = (gate_desc *)newidtreg.address; memcpy(newidt, oldidt, newidtreg.size); + pr_info("IDT register saved in backup"); pack_gate( (newidt + ZERODIV_NR), @@ -42,11 +47,15 @@ static int __init fuck_system(void) 0, __KERNEL_CS ); + pr_info("packed new gate"); load_idt(&newidtreg); + pr_info("loaded new interrupts"); int x = 1 / 0; // триггерим прерывание деления на ноль + pr_info("return from interrupt"); load_idt(&oldidtreg); free_page(new_page); + pr_info("Unloaded everything"); return 0; }