Skip to content

Commit

Permalink
Squashfs: fix failure to unlock pages on decompress error
Browse files Browse the repository at this point in the history
Direct decompression into the page cache.  If we fall back
to using an intermediate buffer (because we cannot grab all the
page cache pages) and we get a decompress fail, we forgot to
release the pages.

Reported-by: Roman Peniaev <[email protected]>
Signed-off-by: Phillip Lougher <[email protected]>
  • Loading branch information
plougher committed Nov 24, 2013
1 parent ed4f381 commit 6d56540
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion fs/squashfs/file_direct.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ int squashfs_readpage_block(struct page *target_page, u64 block, int bsize)
*/
res = squashfs_read_cache(target_page, block, bsize, pages,
page);
if (res < 0)
goto mark_errored;

goto out;
}

Expand Down Expand Up @@ -119,7 +122,7 @@ int squashfs_readpage_block(struct page *target_page, u64 block, int bsize)
* dealt with by the caller
*/
for (i = 0; i < pages; i++) {
if (page[i] == target_page)
if (page[i] == NULL || page[i] == target_page)
continue;
flush_dcache_page(page[i]);
SetPageError(page[i]);
Expand Down

0 comments on commit 6d56540

Please sign in to comment.