Commit 1833633803c7ef4d8f09877d3f1549cbd252f477

Authored by Nick Piggin
Committed by Linus Torvalds
1 parent e228929bc2

fix some conversion overflows

Fix page index to offset conversion overflows in buffer layer, ecryptfs,
and ocfs2.

It would be nice to convert the whole tree to page_offset, but for now
just fix the bugs.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: Michael Halcrow <mhalcrow@us.ibm.com>
Cc: Mark Fasheh <mark.fasheh@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 3 changed files with 4 additions and 5 deletions Side-by-side Diff

... ... @@ -2221,7 +2221,7 @@
2221 2221 lock_page(page);
2222 2222 size = i_size_read(inode);
2223 2223 if ((page->mapping != inode->i_mapping) ||
2224   - ((page->index << PAGE_CACHE_SHIFT) > size)) {
  2224 + (page_offset(page) > size)) {
2225 2225 /* page got truncated out from underneath us */
2226 2226 goto out_unlock;
2227 2227 }
... ... @@ -409,8 +409,7 @@
409 409 if (!PageUptodate(page))
410 410 rc = ecryptfs_do_readpage(file, page, page->index);
411 411 if (page->index != 0) {
412   - loff_t end_of_prev_pg_pos =
413   - (((loff_t)page->index << PAGE_CACHE_SHIFT) - 1);
  412 + loff_t end_of_prev_pg_pos = page_offset(page) - 1;
414 413  
415 414 if (end_of_prev_pg_pos > i_size_read(page->mapping->host)) {
416 415 rc = ecryptfs_truncate(file->f_path.dentry,
... ... @@ -736,7 +735,7 @@
736 735 goto out;
737 736 }
738 737 inode->i_blocks = lower_inode->i_blocks;
739   - pos = (page->index << PAGE_CACHE_SHIFT) + to;
  738 + pos = page_offset(page) + to;
740 739 if (pos > i_size_read(inode)) {
741 740 i_size_write(inode, pos);
742 741 ecryptfs_printk(KERN_DEBUG, "Expanded file size to "
... ... @@ -89,7 +89,7 @@
89 89 {
90 90 int ret;
91 91 struct address_space *mapping = inode->i_mapping;
92   - loff_t pos = page->index << PAGE_CACHE_SHIFT;
  92 + loff_t pos = page_offset(page);
93 93 unsigned int len = PAGE_CACHE_SIZE;
94 94 pgoff_t last_index;
95 95 struct page *locked_page = NULL;