Skip to content

CXPlat must initialize all sub-components prior to enabling fault injection #148

@shankarseal

Description

@shankarseal
        [2]              : "cxplat_fault_injection_inject_fault + 67 D:\a\ebpf-for-windows\ebpf-for-windows\external\usersim\cxplat\src\cxplat_winuser\fault_injection.cpp 408" [Type: std::basic_string<char,std::char_traits<char>,std::allocator<char> >]
        [3]              : "cxplat_allocate + 111 D:\a\ebpf-for-windows\ebpf-for-windows\external\usersim\cxplat\src\cxplat_winuser\memory_winuser.cpp 89" [Type: std::basic_string<char,std::char_traits<char>,std::allocator<char> >]
        [4]              : "_get_processor_group_info + 174 D:\a\ebpf-for-windows\ebpf-for-windows\external\usersim\cxplat\src\cxplat_winuser\processor_winuser.cpp 29" [Type: std::basic_string<char,std::char_traits<char>,std::allocator<char> >]
        [5]              : "cxplat_winuser_initialize_processor_info + 94 D:\a\ebpf-for-windows\ebpf-for-windows\external\usersim\cxplat\src\cxplat_winuser\processor_winuser.cpp 48" [Type: std::basic_string<char,std::char_traits<char>,std::allocator<char> >]
        [6]              : "cxplat_initialize + 598 D:\a\ebpf-for-windows\ebpf-for-windows\external\usersim\cxplat\src\cxplat_winuser\cxplat_winuser.cpp 162" [Type: std::basic_string<char,std::char_traits<char>,std::allocator<char> >]
        [7]              : "usersim_platform_initiate + 68 D:\a\ebpf-for-windows\ebpf-for-windows\external\usersim\src\platform_user.cpp 56" [Type: std::basic_string<char,std::char_traits<char>,std::allocator<char> >]

The above stack shows how #143 caused a regression. The cxplat_winuser_initialize_processor_info itself is getting fault-injected and cxplat is failing to initialize. It goes to cxplat cleaup path - where it is trying to wait on the rundown_ref object which is not intialized and hence throws an exception.

01 VCRUNTIME140D!_CxxThrowException
02 usersim!_rundown_ref_table::wait_for_rundown_ref
03 usersim!cxplat_wait_for_rundown_protection_release
04 usersim!cxplat_wait_for_preemptible_work_items_complete
05 usersim!usersim_platform_terminate
06 usersim!usersim_platform_initiate
07 usersim!DllMain

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions