Patch "sched/task_stack: fix object_is_on_stack() for KASAN tagged pointers" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    sched/task_stack: fix object_is_on_stack() for KASAN tagged pointers

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     sched-task_stack-fix-object_is_on_stack-for-kasan-ta.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4c7c9685ffb334f9d5bf3be8a04381c5793c58a9
Author: Qun-Wei Lin <qun-wei.lin@xxxxxxxxxxxx>
Date:   Tue Dec 24 16:10:57 2024 +0800

    sched/task_stack: fix object_is_on_stack() for KASAN tagged pointers
    
    [ Upstream commit fd7b4f9f46d46acbc7af3a439bb0d869efdc5c58 ]
    
    When CONFIG_KASAN_SW_TAGS and CONFIG_KASAN_STACK are enabled, the
    object_is_on_stack() function may produce incorrect results due to the
    presence of tags in the obj pointer, while the stack pointer does not have
    tags.  This discrepancy can lead to incorrect stack object detection and
    subsequently trigger warnings if CONFIG_DEBUG_OBJECTS is also enabled.
    
    Example of the warning:
    
    ODEBUG: object 3eff800082ea7bb0 is NOT on stack ffff800082ea0000, but annotated.
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 1 at lib/debugobjects.c:557 __debug_object_init+0x330/0x364
    Modules linked in:
    CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.12.0-rc5 #4
    Hardware name: linux,dummy-virt (DT)
    pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : __debug_object_init+0x330/0x364
    lr : __debug_object_init+0x330/0x364
    sp : ffff800082ea7b40
    x29: ffff800082ea7b40 x28: 98ff0000c0164518 x27: 98ff0000c0164534
    x26: ffff800082d93ec8 x25: 0000000000000001 x24: 1cff0000c00172a0
    x23: 0000000000000000 x22: ffff800082d93ed0 x21: ffff800081a24418
    x20: 3eff800082ea7bb0 x19: efff800000000000 x18: 0000000000000000
    x17: 00000000000000ff x16: 0000000000000047 x15: 206b63617473206e
    x14: 0000000000000018 x13: ffff800082ea7780 x12: 0ffff800082ea78e
    x11: 0ffff800082ea790 x10: 0ffff800082ea79d x9 : 34d77febe173e800
    x8 : 34d77febe173e800 x7 : 0000000000000001 x6 : 0000000000000001
    x5 : feff800082ea74b8 x4 : ffff800082870a90 x3 : ffff80008018d3c4
    x2 : 0000000000000001 x1 : ffff800082858810 x0 : 0000000000000050
    Call trace:
     __debug_object_init+0x330/0x364
     debug_object_init_on_stack+0x30/0x3c
     schedule_hrtimeout_range_clock+0xac/0x26c
     schedule_hrtimeout+0x1c/0x30
     wait_task_inactive+0x1d4/0x25c
     kthread_bind_mask+0x28/0x98
     init_rescuer+0x1e8/0x280
     workqueue_init+0x1a0/0x3cc
     kernel_init_freeable+0x118/0x200
     kernel_init+0x28/0x1f0
     ret_from_fork+0x10/0x20
    ---[ end trace 0000000000000000 ]---
    ODEBUG: object 3eff800082ea7bb0 is NOT on stack ffff800082ea0000, but annotated.
    ------------[ cut here ]------------
    
    Link: https://lkml.kernel.org/r/20241113042544.19095-1-qun-wei.lin@xxxxxxxxxxxx
    Signed-off-by: Qun-Wei Lin <qun-wei.lin@xxxxxxxxxxxx>
    Cc: Andrew Yang <andrew.yang@xxxxxxxxxxxx>
    Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>
    Cc: Casper Li <casper.li@xxxxxxxxxxxx>
    Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
    Cc: Chinwen Chang <chinwen.chang@xxxxxxxxxxxx>
    Cc: Kent Overstreet <kent.overstreet@xxxxxxxxx>
    Cc: Matthias Brugger <matthias.bgg@xxxxxxxxx>
    Cc: Pasha Tatashin <pasha.tatashin@xxxxxxxxxx>
    Cc: Shakeel Butt <shakeel.butt@xxxxxxxxx>
    Cc: <stable@xxxxxxxxxxxxxxx>
    Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
    [ Resolve line conflicts ]
    Signed-off-by: Wenshan Lan <jetlan9@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/include/linux/sched/task_stack.h b/include/linux/sched/task_stack.h
index f158b025c175..d2117e1c8fa5 100644
--- a/include/linux/sched/task_stack.h
+++ b/include/linux/sched/task_stack.h
@@ -8,6 +8,7 @@
 
 #include <linux/sched.h>
 #include <linux/magic.h>
+#include <linux/kasan.h>
 
 #ifdef CONFIG_THREAD_INFO_IN_TASK
 
@@ -88,6 +89,7 @@ static inline int object_is_on_stack(const void *obj)
 {
 	void *stack = task_stack_page(current);
 
+	obj = kasan_reset_tag(obj);
 	return (obj >= stack) && (obj < (stack + THREAD_SIZE));
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux