eCryptfs: Return error when lower file pointer is NULL
When an eCryptfs inode's lower file has been closed, and the pointer has been set to NULL, return an error when trying to do a lower read or write rather than calling BUG(). https://bugzilla.kernel.org/show_bug.cgi?id=37292 Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com> Cc: <stable@kernel.org>
This commit is contained in:
parent
322a8b0340
commit
f61500e000
|
@ -39,15 +39,16 @@
|
|||
int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data,
|
||||
loff_t offset, size_t size)
|
||||
{
|
||||
struct ecryptfs_inode_info *inode_info;
|
||||
struct file *lower_file;
|
||||
mm_segment_t fs_save;
|
||||
ssize_t rc;
|
||||
|
||||
inode_info = ecryptfs_inode_to_private(ecryptfs_inode);
|
||||
BUG_ON(!inode_info->lower_file);
|
||||
lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
|
||||
if (!lower_file)
|
||||
return -EIO;
|
||||
fs_save = get_fs();
|
||||
set_fs(get_ds());
|
||||
rc = vfs_write(inode_info->lower_file, data, size, &offset);
|
||||
rc = vfs_write(lower_file, data, size, &offset);
|
||||
set_fs(fs_save);
|
||||
mark_inode_dirty_sync(ecryptfs_inode);
|
||||
return rc;
|
||||
|
@ -225,15 +226,16 @@ out:
|
|||
int ecryptfs_read_lower(char *data, loff_t offset, size_t size,
|
||||
struct inode *ecryptfs_inode)
|
||||
{
|
||||
struct ecryptfs_inode_info *inode_info =
|
||||
ecryptfs_inode_to_private(ecryptfs_inode);
|
||||
struct file *lower_file;
|
||||
mm_segment_t fs_save;
|
||||
ssize_t rc;
|
||||
|
||||
BUG_ON(!inode_info->lower_file);
|
||||
lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
|
||||
if (!lower_file)
|
||||
return -EIO;
|
||||
fs_save = get_fs();
|
||||
set_fs(get_ds());
|
||||
rc = vfs_read(inode_info->lower_file, data, size, &offset);
|
||||
rc = vfs_read(lower_file, data, size, &offset);
|
||||
set_fs(fs_save);
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue