mptcp: free resources when the port number is mismatched
[linux-2.6-microblaze.git] / fs / coredump.c
index a2f6ecc..ae77893 100644 (file)
@@ -703,6 +703,7 @@ void do_coredump(const kernel_siginfo_t *siginfo)
                        goto close_fail;
                }
        } else {
+               struct user_namespace *mnt_userns;
                struct inode *inode;
                int open_flags = O_CREAT | O_RDWR | O_NOFOLLOW |
                                 O_LARGEFILE | O_EXCL;
@@ -780,13 +781,15 @@ void do_coredump(const kernel_siginfo_t *siginfo)
                 * a process dumps core while its cwd is e.g. on a vfat
                 * filesystem.
                 */
-               if (!uid_eq(inode->i_uid, current_fsuid()))
+               mnt_userns = file_mnt_user_ns(cprm.file);
+               if (!uid_eq(i_uid_into_mnt(mnt_userns, inode), 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))
+               if (do_truncate(mnt_userns, cprm.file->f_path.dentry,
+                               0, 0, cprm.file))
                        goto close_fail;
        }
 
@@ -931,7 +934,8 @@ void dump_truncate(struct coredump_params *cprm)
        if (file->f_op->llseek && file->f_op->llseek != no_llseek) {
                offset = file->f_op->llseek(file, 0, SEEK_CUR);
                if (i_size_read(file->f_mapping->host) < offset)
-                       do_truncate(file->f_path.dentry, offset, 0, file);
+                       do_truncate(file_mnt_user_ns(file), file->f_path.dentry,
+                                   offset, 0, file);
        }
 }
 EXPORT_SYMBOL(dump_truncate);