lkml.org 
[lkml]   [2020]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.6 016/106] s390/ftrace: fix potential crashes when switching tracers
    Date
    From: Philipp Rudo <prudo@linux.ibm.com>

    commit 8ebf6da9db1b2a20bb86cc1bee2552e894d03308 upstream.

    Switching tracers include instruction patching. To prevent that a
    instruction is patched while it's read the instruction patching is done
    in stop_machine 'context'. This also means that any function called
    during stop_machine must not be traced. Thus add 'notrace' to all
    functions called within stop_machine.

    Fixes: 1ec2772e0c3c ("s390/diag: add a statistic for diagnose calls")
    Fixes: 38f2c691a4b3 ("s390: improve wait logic of stop_machine")
    Fixes: 4ecf0a43e729 ("processor: get rid of cpu_relax_yield")
    Signed-off-by: Philipp Rudo <prudo@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/s390/kernel/diag.c | 2 +-
    arch/s390/kernel/smp.c | 4 ++--
    arch/s390/kernel/trace.c | 2 +-
    3 files changed, 4 insertions(+), 4 deletions(-)

    --- a/arch/s390/kernel/diag.c
    +++ b/arch/s390/kernel/diag.c
    @@ -133,7 +133,7 @@ void diag_stat_inc(enum diag_stat_enum n
    }
    EXPORT_SYMBOL(diag_stat_inc);

    -void diag_stat_inc_norecursion(enum diag_stat_enum nr)
    +void notrace diag_stat_inc_norecursion(enum diag_stat_enum nr)
    {
    this_cpu_inc(diag_stat.counter[nr]);
    trace_s390_diagnose_norecursion(diag_map[nr].code);
    --- a/arch/s390/kernel/smp.c
    +++ b/arch/s390/kernel/smp.c
    @@ -403,7 +403,7 @@ int smp_find_processor_id(u16 address)
    return -1;
    }

    -bool arch_vcpu_is_preempted(int cpu)
    +bool notrace arch_vcpu_is_preempted(int cpu)
    {
    if (test_cpu_flag_of(CIF_ENABLED_WAIT, cpu))
    return false;
    @@ -413,7 +413,7 @@ bool arch_vcpu_is_preempted(int cpu)
    }
    EXPORT_SYMBOL(arch_vcpu_is_preempted);

    -void smp_yield_cpu(int cpu)
    +void notrace smp_yield_cpu(int cpu)
    {
    if (!MACHINE_HAS_DIAG9C)
    return;
    --- a/arch/s390/kernel/trace.c
    +++ b/arch/s390/kernel/trace.c
    @@ -14,7 +14,7 @@ EXPORT_TRACEPOINT_SYMBOL(s390_diagnose);

    static DEFINE_PER_CPU(unsigned int, diagnose_trace_depth);

    -void trace_s390_diagnose_norecursion(int diag_nr)
    +void notrace trace_s390_diagnose_norecursion(int diag_nr)
    {
    unsigned long flags;
    unsigned int *depth;

    \
     
     \ /
      Last update: 2020-05-01 15:43    [W:5.194 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site