linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Jordan Niethe <jniethe5@gmail.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Christophe Leroy <christophe.leroy@c-s.fr>,
	Alistair Popple <alistair@popple.id.au>,
	Nicholas Piggin <npiggin@gmail.com>,
	Balamuruhan S <bala24@linux.ibm.com>,
	naveen.n.rao@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org,
	Daniel Axtens <dja@axtens.net>
Subject: Re: [PATCH v8 13/30] powerpc: Add a probe_user_read_inst() function
Date: Fri, 15 May 2020 13:46:02 +1000	[thread overview]
Message-ID: <CACzsE9ojewbMn31zqm_XK3zfNtE7Ai2XTiFTgUNY+jWhfhpF_w@mail.gmail.com> (raw)
In-Reply-To: <e4bd592e-2e35-9c73-854e-1380222f34ef@csgroup.eu>

On Thu, May 14, 2020 at 3:46 PM Christophe Leroy
<christophe.leroy@csgroup.eu> wrote:
>
>
>
> Le 06/05/2020 à 05:40, Jordan Niethe a écrit :
> > Introduce a probe_user_read_inst() function to use in cases where
> > probe_user_read() is used for getting an instruction. This will be more
> > useful for prefixed instructions.
> >
> > Reviewed-by: Alistair Popple <alistair@popple.id.au>
> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
> > ---
> > v6: - New to series
> > ---
> >   arch/powerpc/include/asm/inst.h |  3 +++
> >   arch/powerpc/lib/Makefile       |  2 +-
> >   arch/powerpc/lib/inst.c         | 18 ++++++++++++++++++
> >   arch/powerpc/mm/fault.c         |  2 +-
> >   4 files changed, 23 insertions(+), 2 deletions(-)
> >   create mode 100644 arch/powerpc/lib/inst.c
> >
> > diff --git a/arch/powerpc/include/asm/inst.h b/arch/powerpc/include/asm/inst.h
> > index 552e953bf04f..3e9a58420151 100644
> > --- a/arch/powerpc/include/asm/inst.h
> > +++ b/arch/powerpc/include/asm/inst.h
> > @@ -37,4 +37,7 @@ static inline bool ppc_inst_equal(struct ppc_inst x, struct ppc_inst y)
> >       return ppc_inst_val(x) == ppc_inst_val(y);
> >   }
> >
> > +int probe_user_read_inst(struct ppc_inst *inst,
> > +                      struct ppc_inst *nip);
> > +
> >   #endif /* _ASM_INST_H */
> > diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
> > index b8de3be10eb4..546591848219 100644
> > --- a/arch/powerpc/lib/Makefile
> > +++ b/arch/powerpc/lib/Makefile
> > @@ -16,7 +16,7 @@ CFLAGS_code-patching.o += -DDISABLE_BRANCH_PROFILING
> >   CFLAGS_feature-fixups.o += -DDISABLE_BRANCH_PROFILING
> >   endif
> >
> > -obj-y += alloc.o code-patching.o feature-fixups.o pmem.o
> > +obj-y += alloc.o code-patching.o feature-fixups.o pmem.o inst.o
> >
> >   ifndef CONFIG_KASAN
> >   obj-y       +=      string.o memcmp_$(BITS).o
> > diff --git a/arch/powerpc/lib/inst.c b/arch/powerpc/lib/inst.c
> > new file mode 100644
> > index 000000000000..eaf786afad2b
> > --- /dev/null
> > +++ b/arch/powerpc/lib/inst.c
> > @@ -0,0 +1,18 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + *  Copyright 2020, IBM Corporation.
> > + */
> > +
> > +#include <linux/uaccess.h>
> > +#include <asm/inst.h>
> > +
> > +int probe_user_read_inst(struct ppc_inst *inst,
> > +                      struct ppc_inst *nip)
> > +{
> > +     unsigned int val;
> > +     int err;
> > +
> > +     err = probe_user_read(&val, nip, sizeof(val));
> > +     *inst = ppc_inst(val);
> > +     return err;
> > +}
> > diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
> > index 4a50f125ec18..f3a943eae305 100644
> > --- a/arch/powerpc/mm/fault.c
> > +++ b/arch/powerpc/mm/fault.c
> > @@ -281,7 +281,7 @@ static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address,
> >                   access_ok(nip, sizeof(*nip))) {
> >                       struct ppc_inst inst;
> >
> > -                     if (!probe_user_read(&inst, nip, sizeof(inst)))
> > +                     if (!probe_user_read_inst(&inst, (struct ppc_inst __user *)nip))
>
> Shouldn't 'nip' become de 'struct ppc_inst __user *' instead of casting ?
>
> >                               return !store_updates_sp(inst);
> >                       *must_retry = true;
> >               }
> >
Yeah it would make more sense to do it like this.
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -256,7 +256,7 @@ static bool bad_stack_expansion(struct pt_regs
*regs, unsigned long address,
      * expand to 1MB without further checks.
      */
     if (address + 0x100000 < vma->vm_end) {
-        unsigned int __user *nip = (unsigned int __user *)regs->nip;
+        struct ppc_inst __user *nip = (struct ppc_inst __user *)regs->nip;
         /* get user regs even if this fault is in kernel mode */
         struct pt_regs *uregs = current->thread.regs;
         if (uregs == NULL)
@@ -281,7 +281,7 @@ static bool bad_stack_expansion(struct pt_regs
*regs, unsigned long address,
             access_ok(nip, sizeof(*nip))) {
             struct ppc_inst inst;

-            if (!probe_user_read_inst(&inst, (struct ppc_inst __user *)nip))
+            if (!probe_user_read_inst(&inst, nip))
                 return !store_updates_sp(inst);
             *must_retry = true;
         }
-- 
2.17.1
>
> Christophe

  reply	other threads:[~2020-05-15  3:47 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-06  3:40 [PATCH v8 00/30] Initial Prefixed Instruction support Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 01/30] powerpc/xmon: Remove store_inst() for patch_instruction() Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 02/30] powerpc/xmon: Move breakpoint instructions to own array Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 03/30] powerpc/xmon: Move breakpoints to text section Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 04/30] powerpc/xmon: Use bitwise calculations in_breakpoint_table() Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 05/30] powerpc: Change calling convention for create_branch() et. al Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 06/30] powerpc: Use a macro for creating instructions from u32s Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 07/30] powerpc: Use an accessor for instructions Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 08/30] powerpc: Use a function for getting the instruction op code Jordan Niethe
2020-05-15  7:48   ` Jordan Niethe
2020-05-16 11:08     ` Michael Ellerman
2020-05-17  7:41       ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 09/30] powerpc: Use a function for byte swapping instructions Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 10/30] powerpc: Introduce functions for instruction equality Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 11/30] powerpc: Use a datatype for instructions Jordan Niethe
2020-05-08  1:51   ` Jordan Niethe
2020-05-08  7:17     ` Christophe Leroy
2020-05-11  1:19       ` Jordan Niethe
2020-05-08  2:15   ` Jordan Niethe
2020-05-17 10:48   ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 12/30] powerpc: Use a function for reading instructions Jordan Niethe
2020-05-16 18:39   ` Christophe Leroy
2020-05-17 10:44     ` Jordan Niethe
2020-05-19  4:05       ` Michael Ellerman
2020-05-19  5:03         ` Christophe Leroy
2020-05-20  4:16           ` Michael Ellerman
2020-05-06  3:40 ` [PATCH v8 13/30] powerpc: Add a probe_user_read_inst() function Jordan Niethe
2020-05-13 12:52   ` Michael Ellerman
2020-05-13 23:51     ` Jordan Niethe
2020-05-14  5:46   ` Christophe Leroy
2020-05-15  3:46     ` Jordan Niethe [this message]
2020-05-06  3:40 ` [PATCH v8 14/30] powerpc: Add a probe_kernel_read_inst() function Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 15/30] powerpc/kprobes: Use patch_instruction() Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 16/30] powerpc: Define and use __get_user_instr{, inatomic}() Jordan Niethe
2020-05-13 14:18   ` Michael Ellerman
2020-05-13 23:54     ` Jordan Niethe
2020-05-14  1:43       ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 17/30] powerpc: Introduce a function for reporting instruction length Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 18/30] powerpc/xmon: Use a function for reading instructions Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 19/30] powerpc/xmon: Move insertion of breakpoint for xol'ing Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 20/30] powerpc: Make test_translate_branch() independent of instruction length Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 21/30] powerpc: Enable Prefixed Instructions Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 22/30] powerpc: Define new SRR1 bits for a future ISA version Jordan Niethe
2020-05-08  2:26   ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 23/30] powerpc: Add prefixed instructions to instruction data type Jordan Niethe
2020-05-14  1:40   ` Jordan Niethe
2020-05-14  6:11   ` Christophe Leroy
2020-05-14 12:06     ` Alistair Popple
2020-05-14 12:29       ` Jordan Niethe
2020-05-14 12:57       ` Christophe Leroy
2020-05-14 12:28     ` Jordan Niethe
2020-05-15  1:33     ` Michael Ellerman
2020-05-15  7:52       ` Jordan Niethe
2020-05-16 11:54   ` [PATCH v8 22.5/30] powerpc/optprobes: Add register argument to patch_imm64_load_insns() Michael Ellerman
2020-06-09  5:51     ` Michael Ellerman
2020-05-06  3:40 ` [PATCH v8 24/30] powerpc: Test prefixed code patching Jordan Niethe
2020-05-15  7:54   ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 25/30] powerpc: Test prefixed instructions in feature fixups Jordan Niethe
2020-05-15  7:57   ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 26/30] powerpc/xmon: Don't allow breakpoints on suffixes Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 27/30] powerpc/kprobes: " Jordan Niethe
2021-05-18 18:43   ` Christophe Leroy
2021-05-18 19:52     ` Gabriel Paubert
2021-05-19  8:11     ` Naveen N. Rao
2021-05-20  3:45       ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 28/30] powerpc: Support prefixed instructions in alignment handler Jordan Niethe
2020-05-14  6:14   ` Christophe Leroy
2020-05-14 12:15     ` Alistair Popple
2020-05-14 12:59       ` Christophe Leroy
2020-05-06  3:40 ` [PATCH v8 29/30] powerpc sstep: Add support for prefixed load/stores Jordan Niethe
2020-05-14  6:15   ` Christophe Leroy
2020-05-14 12:19     ` Alistair Popple
2020-05-14 13:00       ` Christophe Leroy
2020-05-15  7:59   ` Jordan Niethe
2020-05-06  3:40 ` [PATCH v8 30/30] powerpc sstep: Add support for prefixed fixed-point arithmetic Jordan Niethe
2020-05-14  6:15   ` Christophe Leroy
2020-05-15  8:02   ` Jordan Niethe
2020-05-14  5:31 ` [PATCH v8 00/30] Initial Prefixed Instruction support Christophe Leroy
2020-05-14 10:33   ` Jordan Niethe
2020-05-20 10:59 ` Michael Ellerman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CACzsE9ojewbMn31zqm_XK3zfNtE7Ai2XTiFTgUNY+jWhfhpF_w@mail.gmail.com \
    --to=jniethe5@gmail.com \
    --cc=alistair@popple.id.au \
    --cc=bala24@linux.ibm.com \
    --cc=christophe.leroy@c-s.fr \
    --cc=christophe.leroy@csgroup.eu \
    --cc=dja@axtens.net \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=naveen.n.rao@linux.vnet.ibm.com \
    --cc=npiggin@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).