/* (C) 2002 Kasper Dupont * This module may be used under the terms of * GPL version 2. This module can be used to * enable core dumps for suid executables, this * can be handy for debugging certain tricky * problems. USE WITH CARE, careless usage will * lead to security problems. */ #ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #define MODULE #endif /* FIXME: remove unneeded includes */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static int pid = 0; MODULE_PARM(pid,"i"); static int __init __dumpable_init() { struct task_struct *p; struct mm_struct *mm; int wasdumpable; if (pid<1) { printk("You must specify pid=\n"); return -EINVAL; } read_lock(&tasklist_lock); p = find_task_by_pid(pid); if (p) { mm=p->mm; if (mm) { wasdumpable=mm->dumpable; mm->dumpable=1; } } read_unlock(&tasklist_lock); if (!p) { printk("Process %d does not exist.\n",pid); return -ESRCH; } if (!mm) { printk("Process %d looks like a kernel thread.\n",pid); return -ENOMEM; }; if (wasdumpable) { printk("Process %d was already dumpable.\n",pid); return -EEXIST; } printk("Process %d is now dumpable.\n",pid); return -EBUSY; } module_init(__dumpable_init);