hfs: fix memory leak when unmounting
When an HFS filesystem is unmounted, it leaks a 2-page bitmap. Also, under extreme memory pressure, it's possible that hfs_releasepage() may use a tree pointer that has not been initialized, and if so, the release request should just be rejected. [akpm@linux-foundation.org: free_pages(0) is legal, remove obvious comment] Signed-off-by: Dave Anderson <anderson@redhat.com> Tested-by: Eugene Teo <eugeneteo@kernel.sg> Cc: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
251eb40f5c
Коммит
eb2e5f452a
|
@ -70,6 +70,10 @@ static int hfs_releasepage(struct page *page, gfp_t mask)
|
|||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!tree)
|
||||
return 0;
|
||||
|
||||
if (tree->node_size >= PAGE_CACHE_SIZE) {
|
||||
nidx = page->index >> (tree->node_size_shift - PAGE_CACHE_SHIFT);
|
||||
spin_lock(&tree->hash_lock);
|
||||
|
|
|
@ -349,6 +349,7 @@ void hfs_mdb_put(struct super_block *sb)
|
|||
if (HFS_SB(sb)->nls_disk)
|
||||
unload_nls(HFS_SB(sb)->nls_disk);
|
||||
|
||||
free_pages((unsigned long)HFS_SB(sb)->bitmap, PAGE_SIZE < 8192 ? 1 : 0);
|
||||
kfree(HFS_SB(sb));
|
||||
sb->s_fs_info = NULL;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче