|
@@ -685,11 +685,15 @@ void do_coredump(const siginfo_t *siginfo)
|
|
|
if (!S_ISREG(inode->i_mode))
|
|
|
goto close_fail;
|
|
|
/*
|
|
|
- * Dont allow local users get cute and trick others to coredump
|
|
|
- * into their pre-created files.
|
|
|
+ * Don't dump core if the filesystem changed owner or mode
|
|
|
+ * of the file during file creation. This is an issue when
|
|
|
+ * a process dumps core while its cwd is e.g. on a vfat
|
|
|
+ * filesystem.
|
|
|
*/
|
|
|
if (!uid_eq(inode->i_uid, current_fsuid()))
|
|
|
goto close_fail;
|
|
|
+ if ((inode->i_mode & 0677) != 0600)
|
|
|
+ goto close_fail;
|
|
|
if (!(cprm.file->f_mode & FMODE_CAN_WRITE))
|
|
|
goto close_fail;
|
|
|
if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file))
|