lkml.org 
[lkml]   [2022]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 02/10] exit: Add and use make_task_dead.
    On Wed, Jan 05, 2022 at 02:46:10PM -0600, Eric W. Biederman wrote:
    > Al Viro <viro@zeniv.linux.org.uk> writes:
    >
    > > On Wed, Dec 08, 2021 at 02:25:24PM -0600, Eric W. Biederman wrote:
    > >> There are two big uses of do_exit. The first is it's design use to be
    > >> the guts of the exit(2) system call. The second use is to terminate
    > >> a task after something catastrophic has happened like a NULL pointer
    > >> in kernel code.
    > >>
    > >> Add a function make_task_dead that is initialy exactly the same as
    > >> do_exit to cover the cases where do_exit is called to handle
    > >> catastrophic failure. In time this can probably be reduced to just a
    > >> light wrapper around do_task_dead. For now keep it exactly the same so
    > >> that there will be no behavioral differences introducing this new
    > >> concept.
    > >>
    > >> Replace all of the uses of do_exit that use it for catastraphic
    > >> task cleanup with make_task_dead to make it clear what the code
    > >> is doing.
    > >>
    > >> As part of this rename rewind_stack_do_exit
    > >> rewind_stack_and_make_dead.
    > >
    > > Umm... What about .Linvalid_mask: in arch/xtensa/kernel/entry.S?
    > > That's an obvious case for your make_task_dead().
    >
    > Good catch.
    >
    > Being in assembly it did not have anything after the name do_exit so it
    > hid from my regex "[^A-Za-z0-9_]do_exit[^A-Za-z0-9]". Thank you for
    > finding that.

    Umm... What's wrong with '\<do_exit\>'? Difference in catch:

    missed 6
    Documentation/trace/kprobes.rst:596:do_exit() case covered. do_execve() and do_fork() are not an issue.
    arch/x86/entry/entry_32.S:1258: call do_exit
    arch/x86/entry/entry_64.S:1440: call do_exit
    arch/xtensa/kernel/entry.S:1436: abi_call do_exit
    samples/bpf/test_cgrp2_tc.sh:114:do_exit() {
    tools/testing/selftests/ftrace/test.d/kprobe/kprobe_multiprobe.tc:8:SYM2=do_exit

    extra 3
    arch/powerpc/mm/book3s64/radix_tlb.c:815:static void do_exit_flush_lazy_tlb(void *arg)
    arch/powerpc/mm/book3s64/radix_tlb.c:830: smp_call_function_many(mm_cpumask(mm), do_exit_flush_lazy_tlb,
    tools/perf/ui/browsers/hists.c:2847: act->fn = do_exit_browser;

    Extra catch clearly contains nothing of interest (assuming it's not a result of a typo
    in your regex in the first place - you seem to have omitted _ from the second set, and if
    you add that back, these 3 hits go away). And missed 6... 3 are outside of the kernel
    source proper, and the rest are all genuine. You've caught x86 ones (inside the
    rewind_stack_do_exit variants) and missed the xtensa one...

    \< and \> are GNUisms, but both git grep and grep (both on Linux and FreeBSD, at least)
    handle them... Or use \bdo_exit\b, for that matter (Perlism instead of GNUism, matching
    both the beginnings and ends of words)...

    \
     
     \ /
      Last update: 2022-01-05 22:55    [W:3.055 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site