int main(int argc, char *argv[]) { printf("Usage: %s [item]\n\titem:\n\t"\ "1 - wild pointer dereference\n\t"\ "2 - null pointer dereference\n\t" \ "3 - write to read-only memory\n\t"\ "4 - buffer overflow\n\t"\ "5 - stack overflow\n\t"\ "\nInput item: ", argv[0]); int item = 0; scanf("%d", &item); printf("item = %d\n", item); switch (item) { case 1: wild_ptr_dereference(); break; case 2: null_ptr_dereference(); break; case 3: wirte_to_readonly_memory(); break; case 4: check_buffer_overflow(); break; case 5: check_stack_overflow(); break; default: break; } return 0; }
asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs) { struct pt_regs *old_regs = set_irq_regs(regs); irq_enter(); check_stack_overflow(irq); /* * Some hardware gives randomly wrong interrupts. Rather * than crashing, do something sensible. */ if (irq >= NR_IRQS) handle_bad_irq(&bad_irq_desc); else generic_handle_irq(irq); maybe_lower_to_irq14(); irq_exit(); set_irq_regs(old_regs); }
static void check_stack_overflow() { return check_stack_overflow(); }