SUNRPC/cache: Fix unsafe traverse caused double-free in cache_purge
Deleting list entry within hlist_for_each_entry_safe is not safe unless next pointer (tmp) is protected too. It's not, because once hash_lock is released, cache_clean may delete the entry that tmp points to. Then cache_purge can walk to a deleted entry and tries to double free it. Fix this bug by holding only the deleted entry's reference. Suggested-by: NNeilBrown <neilb@suse.de> Signed-off-by: NYihao Wu <wuyihao@linux.alibaba.com> Reviewed-by: NNeilBrown <neilb@suse.de> [ cel: removed unused variable ] Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
Showing
想要评论请 注册 或 登录