lkml.org 
[lkml]   [2022]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 42/58] selftests/rseq: Fix ppc32: wrong rseq_cs 32-bit field pointer on big endian
    Date
    From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

    commit 24d1136a29da5953de5c0cbc6c83eb62a1e0bf14 upstream.

    ppc32 incorrectly uses padding as rseq_cs pointer field. Fix this by
    using the rseq_cs.arch.ptr field.

    Use this field across all architectures.

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20220124171253.22072-9-mathieu.desnoyers@efficios.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/testing/selftests/rseq/rseq-arm.h | 16 ++++++++--------
    tools/testing/selftests/rseq/rseq-arm64.h | 16 ++++++++--------
    tools/testing/selftests/rseq/rseq-mips.h | 16 ++++++++--------
    tools/testing/selftests/rseq/rseq-ppc.h | 16 ++++++++--------
    tools/testing/selftests/rseq/rseq-s390.h | 12 ++++++------
    5 files changed, 38 insertions(+), 38 deletions(-)

    --- a/tools/testing/selftests/rseq/rseq-arm.h
    +++ b/tools/testing/selftests/rseq/rseq-arm.h
    @@ -186,7 +186,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intp
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "m" (*v),
    [expect] "r" (expect),
    [newv] "r" (newv)
    @@ -256,7 +256,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expectnot] "r" (expectnot),
    @@ -317,7 +317,7 @@ int rseq_addv(intptr_t *v, intptr_t coun
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "m" (*v),
    [count] "Ir" (count)
    RSEQ_INJECT_INPUT
    @@ -382,7 +382,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -458,7 +458,7 @@ int rseq_cmpeqv_trystorev_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -538,7 +538,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* cmp2 input */
    [v2] "m" (*v2),
    [expect2] "r" (expect2),
    @@ -658,7 +658,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),
    @@ -783,7 +783,7 @@ int rseq_cmpeqv_trymemcpy_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),
    --- a/tools/testing/selftests/rseq/rseq-arm64.h
    +++ b/tools/testing/selftests/rseq/rseq-arm64.h
    @@ -231,7 +231,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intp
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "Qo" (*v),
    [expect] "r" (expect),
    [newv] "r" (newv)
    @@ -288,7 +288,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "Qo" (*v),
    [expectnot] "r" (expectnot),
    [load] "Qo" (*load),
    @@ -338,7 +338,7 @@ int rseq_addv(intptr_t *v, intptr_t coun
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "Qo" (*v),
    [count] "r" (count)
    RSEQ_INJECT_INPUT
    @@ -389,7 +389,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [expect] "r" (expect),
    [v] "Qo" (*v),
    [newv] "r" (newv),
    @@ -448,7 +448,7 @@ int rseq_cmpeqv_trystorev_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [expect] "r" (expect),
    [v] "Qo" (*v),
    [newv] "r" (newv),
    @@ -509,7 +509,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "Qo" (*v),
    [expect] "r" (expect),
    [v2] "Qo" (*v2),
    @@ -570,7 +570,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [expect] "r" (expect),
    [v] "Qo" (*v),
    [newv] "r" (newv),
    @@ -630,7 +630,7 @@ int rseq_cmpeqv_trymemcpy_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "Qo" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [expect] "r" (expect),
    [v] "Qo" (*v),
    [newv] "r" (newv),
    --- a/tools/testing/selftests/rseq/rseq-mips.h
    +++ b/tools/testing/selftests/rseq/rseq-mips.h
    @@ -191,7 +191,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intp
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "m" (*v),
    [expect] "r" (expect),
    [newv] "r" (newv)
    @@ -259,7 +259,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expectnot] "r" (expectnot),
    @@ -320,7 +320,7 @@ int rseq_addv(intptr_t *v, intptr_t coun
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "m" (*v),
    [count] "Ir" (count)
    RSEQ_INJECT_INPUT
    @@ -383,7 +383,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -457,7 +457,7 @@ int rseq_cmpeqv_trystorev_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -533,7 +533,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* cmp2 input */
    [v2] "m" (*v2),
    [expect2] "r" (expect2),
    @@ -650,7 +650,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),
    @@ -772,7 +772,7 @@ int rseq_cmpeqv_trymemcpy_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),
    --- a/tools/testing/selftests/rseq/rseq-ppc.h
    +++ b/tools/testing/selftests/rseq/rseq-ppc.h
    @@ -236,7 +236,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intp
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "m" (*v),
    [expect] "r" (expect),
    [newv] "r" (newv)
    @@ -302,7 +302,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expectnot] "r" (expectnot),
    @@ -360,7 +360,7 @@ int rseq_addv(intptr_t *v, intptr_t coun
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [count] "r" (count)
    @@ -420,7 +420,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -490,7 +490,7 @@ int rseq_cmpeqv_trystorev_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -561,7 +561,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* cmp2 input */
    [v2] "m" (*v2),
    [expect2] "r" (expect2),
    @@ -636,7 +636,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),
    @@ -712,7 +712,7 @@ int rseq_cmpeqv_trymemcpy_storev_release
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),
    --- a/tools/testing/selftests/rseq/rseq-s390.h
    +++ b/tools/testing/selftests/rseq/rseq-s390.h
    @@ -166,7 +166,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intp
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    [v] "m" (*v),
    [expect] "r" (expect),
    [newv] "r" (newv)
    @@ -234,7 +234,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expectnot] "r" (expectnot),
    @@ -289,7 +289,7 @@ int rseq_addv(intptr_t *v, intptr_t coun
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [count] "r" (count)
    @@ -348,7 +348,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* try store input */
    [v2] "m" (*v2),
    [newv2] "r" (newv2),
    @@ -427,7 +427,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* cmp2 input */
    [v2] "m" (*v2),
    [expect2] "r" (expect2),
    @@ -535,7 +535,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_
    : /* gcc asm goto does not allow outputs */
    : [cpu_id] "r" (cpu),
    [current_cpu_id] "m" (rseq_get_abi()->cpu_id),
    - [rseq_cs] "m" (rseq_get_abi()->rseq_cs),
    + [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr),
    /* final store input */
    [v] "m" (*v),
    [expect] "r" (expect),

    \
     
     \ /
      Last update: 2022-07-05 14:11    [W:2.585 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site