--- fs/exec.c.vorrudi Fri Jul 20 05:32:54 2001 +++ fs/exec.c Fri Nov 2 12:23:37 2001 @@ -924,33 +924,55 @@ int do_coredump(long signr, struct pt_regs * regs) { struct linux_binfmt * binfmt; - char corename[6+sizeof(current->comm)]; + char corename[20+sizeof(current->comm)]; struct file * file; struct inode * inode; int retval = 0; lock_kernel(); + printk("Process %d has received Signal %d dumping core ...\n", + current->pid,signr); binfmt = current->binfmt; if (!binfmt || !binfmt->core_dump) + { + printk("Binformat isn't dumpable\n"); goto fail; + } if (!current->mm->dumpable) + { + printk("mm isnt dumpable \n"); goto fail; + } current->mm->dumpable = 0; if (current->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump) + { + printk("limit < min_coredump %d\n",binfmt->min_coredump); goto fail; + } + + snprintf(corename,sizeof(corename),"core.%d.%s",current->pid, + current->comm); +#if 0 memcpy(corename,"core.", 5); #if 0 memcpy(corename+5,current->comm,sizeof(current->comm)); #else corename[4] = '\0'; #endif +#endif file = filp_open(corename, O_CREAT | 2 | O_NOFOLLOW, 0600); if (IS_ERR(file)) + { + printk("Can't open %s \n",corename); goto fail; + } inode = file->f_dentry->d_inode; if (inode->i_nlink > 1) + { + printk("multiple links - don't dump"); goto close_fail; /* multiple links - don't dump */ + } if (d_unhashed(file->f_dentry)) goto close_fail;