|
Message-ID: <20200630161256.GA10755@pi3.com.pl> Date: Tue, 30 Jun 2020 18:12:56 +0200 From: Adam Zabrocki <pi3@....com.pl> To: lkrg-users@...ts.openwall.com Subject: Re: p_install_arch_jump_label_transform_hook and p_check_integrity lead to deadlock issue on unisoc SL8541E Hi, I've synced with Ethan offline about that problem. It looks like in a very slow devices, some of the busy loop of locking/unlocking text_mutext is too tight and optimize_kprobe() can't win the race of getting text_mutex. I've just pushed a simple patch which helps to solve that problem: https://bitbucket.org/Adam_pi3/lkrg-main/commits/ec595f555bcb9b81a1782d9e2c9651a8abf45aab Thanks, Adam On Mon, Jun 29, 2020 at 10:12:50AM +0800, youyan wrote: > Hi adam > > I have found the reason,why LKRG block on my device. > > 1: hardware and software: unisoc SL8541E, android Q, kernel version is 4.14 > > 2: SL8541E is arm64 platform, but for some reason, we compile it as 32bit arm > > 3: On function p_create_database(),which in the file p_database.c,have the fellow execute flow: > > (1) if (p_register_arch_metadata() != P_LKRG_SUCCESS) > [ 125.693391] c1 [<c01e379c>] (kick_kprobe_optimizer) from [<c01e4394>] (optimize_kprobe+0x108/0x118) > [ 125.702389] c1 [<c01e4394>] (optimize_kprobe) from [<c01e5fe0>] (register_kprobe+0x548/0x5b0) > [ 125.710871] c1 [<c01e5fe0>] (register_kprobe) from [<c01e63ac>] (register_kretprobe+0x114/0x178) > [ 125.719671] c1 [<c01e63ac>] (register_kretprobe) from [<bf2d9f60>] (p_install_arch_jump_label_transform_hook+0x38/0xc0 [p_lkrg]) > [ 125.731224] c1 [<bf2d9f60>] (p_install_arch_jump_label_transform_hook [p_lkrg]) from [<bf2d9b98>] (p_register_arch_metadata+0x74/0xd0 [p_lkrg]) > (2) kick_kprobe_optimizer()->schedule_delayed_work(&optimizing_work, OPTIMIZE_DELAY)->kprobe_optimizer()->mutex_lock(&module_mutex)->do_optimize_kprobes()->mutex_lock(&text_mutex) > > (3) p_register_module_notifier(); > > 4: some notifier or timer can trigger p_check_integrity() > > 5: p_module_event_notifier is execute after the p_register_module_notifier: > > p_module_event_notifier_live_retry: > > p_text_section_lock(); > > /* We are heavily consuming module list here - take 'module_mutex' */ > > //mutex_lock(&module_mutex); > > while (!mutex_trylock(&module_mutex)) { > > p_text_section_unlock(); > > goto p_module_event_notifier_live_retry; > > } > > above will loop request exceute,and will consume a lot of cpu resource. It lead to do_optimize_kprobes can't get mutex_lock(&text_mutex); > > 7:when p_check_integrity execute,it first execute p_text_section_lock(),then mutex_lock(&module_mutex), and lead to deadlock. > > > > kprobe.c p_integrity_timer.c > > mutex_lock(&module_mutex) > > p_text_section_lock()->mutex_lock(P_SYM(p_text_mutex)); > > > > mutex_lock(&text_mutex) > > mutex_lock(&text_mutex) > > > > 8:Maybe SL8541E run slowly cause this bug. > > 9:I try fellow three solutions to fix this issue: > > solution one: > > Before p_register_module_notifier(),add a some delay use msleep(); > > solution two: > > (1) p_module_event_notifier request mutex_trylock(&module_mutex) loop,add msleep(10): > > p_module_event_notifier_going_retry: > > p_text_section_lock(); > > while (!mutex_trylock(&module_mutex)) { > > msleep(10); > > p_text_section_unlock(); > > goto p_module_event_notifier_going_retry; > > } > > (2)change request mutex order > > p_text_section_lock(); mutex_lock(&module_mutex); > > change to > > mutex_lock(&module_mutex); p_text_section_lock(); > > solution third: > > p_text_section_lock(); p_check_integrity_mutex: > > change to > > mutex_lock(&module_mutex); p_text_section_lock(); > > while (!mutex_trylock(&module_mutex)) { > > p_text_section_unlock(); > > msleep(10); > > goto p_check_integrity_mutex; > > } > > 10:I maybe use use solution one, because I am not familiar with LKRG. Which solution do you suggest? If you have better idea,could you share me? Thanks!!! > > > > > > -- pi3 (pi3ki31ny) - pi3 (at) itsec pl http://pi3.com.pl
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.