get_robust_list¶
Intro¶
get_robust_list - get the list of robust futexes owned by the current task
Description¶
The get_robust_list() system call gets the robust futex list owned by the task pointed to by its first argument. In addition, it stores a length of the list into the memory pointed to by the second argument.
The robust futex list is a collection of robust futexes which have the FUTEX_WAITERS flag set. Such futexes are owned by the task, and can be used in conjunction with the FUTEX_WAIT and FUTEX_WAKE system calls to provide synchronization between threads.
Robust futexes also ensure that all threads waiting for a given futex receive all the wake-up calls belonging to the futex, even if the owner of the futex dies (e.g. due to a kernel panic).
Arguments¶
pid
:int
[U] - define the task structure for the process for which the robust list is to be retrieved.head_ptr
:struct robust_list_head**
[U] - location of the head of the returned list.len_ptr
:size_t*
[U] - location of a size_t containing the length of the returned list, in bytes.
Available Tags¶
- K - Originated from kernel-space.
- U - Originated from user space (for example, pointer to user space memory used to get it)
- TOCTOU - Vulnerable to TOCTOU (time of check, time of use)
- OPT - Optional argument - might not always be available (passed with null value)
Hooks¶
SyS_get_robust_list¶
Type¶
Kprobes + Tracepoints
Purpose¶
To monitor the usage of the get_robust_list system call.
Example Use Case¶
The get_robust_list system call can be used to synchronizing events between threads in a multithreaded application.
Issues¶
This system call is not available on all Linux system and is not available on some architectures.
Related Events¶
FUTEX_WAIT, FUTEX_WAKE, robust_list_del, set_robust_list
This document was automatically generated by OpenAI and needs review. It might not be accurate and might contain errors. The authors of Tracee recommend that the user reads the "events.go" source file to understand the events and their arguments better.