debugobjects: Stop accessing objects after releasing hash bucket lock
authorAndrzej Hajda <andrzej.hajda@intel.com>
Wed, 25 Oct 2023 21:39:07 +0000 (23:39 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 22 Nov 2023 09:41:46 +0000 (10:41 +0100)
commit9bb6362652f3f4d74a87d572a91ee1b38e673ef6
tree43e8f4c89204939016ada62ad58f8fd05c778be9
parent98b1cc82c4affc16f5598d4fa14b1858671b2263
debugobjects: Stop accessing objects after releasing hash bucket lock

After release of the hashbucket lock the tracking object can be modified or
freed by a concurrent thread.  Using it in such a case is error prone, even
for printing the object state:

    1. T1 tries to deactivate destroyed object, debugobjects detects it,
       hash bucket lock is released.

    2. T2 preempts T1 and frees the tracking object.

    3. The freed tracking object is allocated and initialized for a
       different to be tracked kernel object.

    4. T1 resumes and reports error for wrong kernel object.

Create a local copy of the tracking object before releasing the hash bucket
lock and use the local copy for reporting and fixups to prevent this.

Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20231025-debugobjects_fix-v3-1-2bc3bf7084c2@intel.com
lib/debugobjects.c