• Qian Cai's avatar
    x86/mm/pat: Mark an intentional data race · cb38f820
    Qian Cai authored
    cpa_4k_install could be accessed concurrently as noticed by KCSAN,
    
    read to 0xffffffffaa59a000 of 8 bytes by interrupt on cpu 7:
    cpa_inc_4k_install arch/x86/mm/pat/set_memory.c:131 [inline]
    __change_page_attr+0x10cf/0x1840 arch/x86/mm/pat/set_memory.c:1514
    __change_page_attr_set_clr+0xce/0x490 arch/x86/mm/pat/set_memory.c:1636
    __set_pages_np+0xc4/0xf0 arch/x86/mm/pat/set_memory.c:2148
    __kernel_map_pages+0xb0/0xc8 arch/x86/mm/pat/set_memory.c:2178
    kernel_map_pages include/linux/mm.h:2719 [inline] <snip>
    
    write to 0xffffffffaa59a000 of 8 bytes by task 1 on cpu 6:
    cpa_inc_4k_install arch/x86/mm/pat/set_memory.c:131 [inline]
    __change_page_attr+0x10ea/0x1840 arch/x86/mm/pat/set_memory.c:1514
    __change_page_attr_set_clr+0xce/0x490 arch/x86/mm/pat/set_memory.c:1636
    __set_pages_p+0xc4/0xf0 arch/x86/mm/pat/set_memory.c:2129
    __kernel_map_pages+0x2e/0xc8 arch/x86/mm/pat/set_memory.c:2176
    kernel_map_pages include/linux/mm.h:2719 [inline] <snip>
    
    Both accesses are due to the same "cpa_4k_install++" in
    cpa_inc_4k_install. A data race here could be potentially undesirable:
    depending on compiler optimizations or how x86 executes a non-LOCK'd
    increment, it may lose increments, corrupt the counter, etc. Since this
    counter only seems to be used for printing some stats, this data race
    itself is unlikely to cause harm to the system though. Thus, mark this
    intentional data race using the data_race() marco.
    Suggested-by: default avatarMacro Elver <elver@google.com>
    Signed-off-by: default avatarQian Cai <cai@lca.pw>
    Acked-by: default avatarBorislav Petkov <bp@suse.de>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    cb38f820
set_memory.c 56.3 KB