btrfs: use file_remove_suid() after i_mutex is held
PATCH v3 1/1 btrfs: use file_remove_suid() after i_mutex is held
V2 -> V3:
set 'err' to -ENOMEM when kmalloc() fails. Thanks to Tao.
V1 -> V2:
Move kmalloc() before mutex_lock(), suggested by Arjan.
file_remove_suid() should be called with i_mutex held, file_update_time() too. So move them after mutex_lock().
Plus, check the return value of kmalloc().
Signed-off-by WANG Cong <[email protected]>
Cc Arjan <[email protected]>
Cc Chris Mason <[email protected]>
Cc Yan Zheng <[email protected]>
Cc Sven Wegener <[email protected]>
Cc Josef Bacik <[email protected]>
Cc Jeff Mahoney <[email protected]>
Cc Tao Ma <[email protected]>
---
fs/btrfs/file.c +9 -4
@@ -944,14 +944,19 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf,if (count ==0 ) goto out_nolock; + pages =kmalloc (nrptrs *sizeof (struct page *),GFP_KERNEL ); +if (!pages) { + err = -ENOMEM ; + goto out_nolock; + } + +mutex_lock (&inode->i_mutex); + err =file_remove_suid (file);if (err) - goto out_nolock; + goto out;file_update_time (file); - pages =kmalloc (nrptrs *sizeof (struct page *),GFP_KERNEL ); - -mutex_lock (&inode->i_mutex);BTRFS_I (inode)->sequence++; first_index = pos >>PAGE_CACHE_SHIFT ; last_index = (pos + count) >>PAGE_CACHE_SHIFT ;
Quoted 40 lines · Amerigo Wang
V2 -> V3:
set 'err' to-ENOMEMwhenkmalloc()fails. Thanks to Tao.V1 -> V2:
Movekmalloc()beforemutex_lock(), suggested by Arjan.
file_remove_suid()should be called withi_mutexheld,file_update_time()too. So move them aftermutex_lock().Plus, check the return value of
kmalloc().Signed-off-by WANG Cong <[email protected]>Cc Arjan <[email protected]>Cc Chris Mason <[email protected]>Cc Yan Zheng <[email protected]>Cc Sven Wegener <[email protected]>Cc Josef Bacik <[email protected]>Cc Jeff Mahoney <[email protected]>Cc Tao Ma <[email protected]>---
fs/btrfs/file.c +8
-0@@ -944,14 +944,19 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf,if (count ==0 ) goto out_nolock; + pages =kmalloc (nrptrs *sizeof (struct page *),GFP_KERNEL ); +if (!pages) { + err = -ENOMEM ; + goto out_nolock; + } + +mutex_lock (&inode->i_mutex); + err =file_remove_suid (file);if (err)
fs/btrfs/file.c static ssize_t btrfs_file_write(struct file *file, const char __user *buf, · line 962
Quoted 10 lines
fs/btrfs/file.c +1
-4- goto out_nolock; + goto out;file_update_time (file); - pages =kmalloc (nrptrs *sizeof (struct page *),GFP_KERNEL ); - -mutex_lock (&inode->i_mutex);BTRFS_I (inode)->sequence++; first_index = pos >>PAGE_CACHE_SHIFT ; last_index = (pos + count) >>PAGE_CACHE_SHIFT ;
Acked-by Josef Bacik <[email protected]>
Thanks,
Josef