ocfs2: Safer read_inline_data()
In ocfs2_read_inline_data() we should store file size in loff_t. Although the file size should fit in 32 bits we cannot be sure in case filesystem is corrupted. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
parent
5fa0613ea5
commit
d2849fb294
|
@ -217,7 +217,7 @@ int ocfs2_read_inline_data(struct inode *inode, struct page *page,
|
||||||
struct buffer_head *di_bh)
|
struct buffer_head *di_bh)
|
||||||
{
|
{
|
||||||
void *kaddr;
|
void *kaddr;
|
||||||
unsigned int size;
|
loff_t size;
|
||||||
struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
|
struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
|
||||||
|
|
||||||
if (!(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL)) {
|
if (!(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL)) {
|
||||||
|
@ -231,8 +231,9 @@ int ocfs2_read_inline_data(struct inode *inode, struct page *page,
|
||||||
if (size > PAGE_CACHE_SIZE ||
|
if (size > PAGE_CACHE_SIZE ||
|
||||||
size > ocfs2_max_inline_data(inode->i_sb)) {
|
size > ocfs2_max_inline_data(inode->i_sb)) {
|
||||||
ocfs2_error(inode->i_sb,
|
ocfs2_error(inode->i_sb,
|
||||||
"Inode %llu has with inline data has bad size: %u",
|
"Inode %llu has with inline data has bad size: %Lu",
|
||||||
(unsigned long long)OCFS2_I(inode)->ip_blkno, size);
|
(unsigned long long)OCFS2_I(inode)->ip_blkno,
|
||||||
|
(unsigned long long)size);
|
||||||
return -EROFS;
|
return -EROFS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue