From: Christophe JAILLET Date: Fri, 22 Apr 2022 08:13:48 +0000 (+0200) Subject: drivers/base/memory: Fix an unlikely reference counting issue in __add_memory_block() X-Git-Tag: v6.6.17~7344^2~35 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e224719f5d9b92abf1e0edfb2a83053208f3026;p=platform%2Fkernel%2Flinux-rpi.git drivers/base/memory: Fix an unlikely reference counting issue in __add_memory_block() __add_memory_block() calls both put_device() and device_unregister() when storing the memory block into the xarray. This is incorrect because xarray doesn't take an additional reference and device_unregister() already calls put_device(). Triggering the issue looks really unlikely and its only effect should be to log a spurious warning about a ref counted issue. Fixes: 4fb6eabf1037 ("drivers/base/memory.c: cache memory blocks in xarray to accelerate lookup") Signed-off-by: Christophe JAILLET Acked-by: Michal Hocko Reviewed-by: David Hildenbrand Link: https://lore.kernel.org/r/d44c63d78affe844f020dc02ad6af29abc448fc4.1650611702.git.christophe.jaillet@wanadoo.fr Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 7222ff9..084d67f 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -636,10 +636,9 @@ static int __add_memory_block(struct memory_block *memory) } ret = xa_err(xa_store(&memory_blocks, memory->dev.id, memory, GFP_KERNEL)); - if (ret) { - put_device(&memory->dev); + if (ret) device_unregister(&memory->dev); - } + return ret; }