[so2] [Tema1] Suspicious RCU usage

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Wed Mar 28 10:51:34 EEST 2018


"Andrei ION (6993) via so2" <so2 at cursuri.cs.pub.ro> writes:
> Salutare,
>
> Încerc să apelez funcţia pid_task (linux/kernel/pid.c) şi primesc
> următorul avertisment: https://pastebin.com/dYupQ2rk
>
> Nu îmi dau aseama care ar putea fi problema. Din ce am citit aici,
> http://jailhouse-dev.narkive.com/TKDOqe7b/suspicious-rcu-dereference-check-usage,
> scrie să fac disable la CONFIG_PROVE_RCU.

Funcția pid_task()[1] apelează rcu_dereference_check() care apelează
lockdep_tasklist_lock_is_held()[2] care verifică dacă rwlock-ul
tasklist_lock este luat.

Cred că soluția este să apelezi read_lock()[3] pe rwlock-ul
tasklist_lock înainte să apelezi pid_task().

Sau, mai direct, apelează get_pid_task()[4] care apelează
rcu_read_lock() înainte să apeleze pid_task() și care probabil rezolvă
problema ta.

[1] https://elixir.bootlin.com/linux/v4.15/source/kernel/pid.c#L305
[2] https://elixir.bootlin.com/linux/v4.15/source/kernel/fork.c#L129
[3] https://elixir.bootlin.com/linux/v4.15/source/include/linux/rwlock.h#L71
[4] https://elixir.bootlin.com/linux/v4.15/source/kernel/pid.c#L346

Răzvan


More information about the so2 mailing list