Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f1b0008 authored by Joern Engel's avatar Joern Engel
Browse files

[LogFS] Prevent mempool_destroy NULL pointer dereference



It would probably be better to just accept NULL pointers in
mempool_destroy().  But for the current -rc series let's keep things
simple.

This patch was lost in the cracks for a while.
Kevin Cernekee <cernekee@gmail.com> had to rediscover the problem and
send a similar patch because of it. :(

Signed-off-by: default avatarJoern Engel <joern@logfs.org>
parent ead88af5
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -727,4 +727,10 @@ static inline struct logfs_area *get_area(struct super_block *sb,
	return logfs_super(sb)->s_area[(__force u8)gc_level];
}

static inline void logfs_mempool_destroy(mempool_t *pool)
{
	if (pool)
		mempool_destroy(pool);
}

#endif
+2 −4
Original line number Diff line number Diff line
@@ -2243,8 +2243,6 @@ void logfs_cleanup_rw(struct super_block *sb)
	struct logfs_super *super = logfs_super(sb);

	destroy_meta_inode(super->s_segfile_inode);
	if (super->s_block_pool)
		mempool_destroy(super->s_block_pool);
	if (super->s_shadow_pool)
		mempool_destroy(super->s_shadow_pool);
	logfs_mempool_destroy(super->s_block_pool);
	logfs_mempool_destroy(super->s_shadow_pool);
}
+1 −1
Original line number Diff line number Diff line
@@ -912,7 +912,7 @@ int logfs_init_areas(struct super_block *sb)
	for (i--; i >= 0; i--)
		free_area(super->s_area[i]);
	free_area(super->s_journal_area);
	mempool_destroy(super->s_alias_pool);
	logfs_mempool_destroy(super->s_alias_pool);
	return -ENOMEM;
}

+2 −2
Original line number Diff line number Diff line
@@ -517,8 +517,8 @@ static void logfs_kill_sb(struct super_block *sb)
	if (super->s_erase_page)
		__free_page(super->s_erase_page);
	super->s_devops->put_device(sb);
	mempool_destroy(super->s_btree_pool);
	mempool_destroy(super->s_alias_pool);
	logfs_mempool_destroy(super->s_btree_pool);
	logfs_mempool_destroy(super->s_alias_pool);
	kfree(super);
	log_super("LogFS: Finished unmounting\n");
}