• X
    configfs: fix config_item refcnt leak in configfs_rmdir() · f58c0b0b
    Xiyu Yang 提交于
    [ Upstream commit 8aebfffacfa379ba400da573a5bf9e49634e38cb ]
    
    configfs_rmdir() invokes configfs_get_config_item(), which returns a
    reference of the specified config_item object to "parent_item" with
    increased refcnt.
    
    When configfs_rmdir() returns, local variable "parent_item" becomes
    invalid, so the refcount should be decreased to keep refcount balanced.
    
    The reference counting issue happens in one exception handling path of
    configfs_rmdir(). When down_write_killable() fails, the function forgets
    to decrease the refcnt increased by configfs_get_config_item(), causing
    a refcnt leak.
    
    Fix this issue by calling config_item_put() when down_write_killable()
    fails.
    Signed-off-by: NXiyu Yang <xiyuyang19@fudan.edu.cn>
    Signed-off-by: NXin Tan <tanxin.ctf@gmail.com>
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    f58c0b0b
dir.c 51.2 KB