lkml.org 
[lkml]   [2016]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 51/51] x86/mm: convert arch_within_stack_frames() to use the new unwinder
    On Fri, Aug 12, 2016 at 10:38:31AM -0700, Kees Cook wrote:
    > On Fri, Aug 12, 2016 at 8:17 AM, Josh Poimboeuf <jpoimboe@redhat.com> wrote:
    > > On Fri, Aug 12, 2016 at 09:29:10AM -0500, Josh Poimboeuf wrote:
    > >> Convert arch_within_stack_frames() to use the new unwinder.
    > >>
    > >> Boot tested with CONFIG_HARDENED_USERCOPY.
    > >>
    > >> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
    > >> ---
    > >> arch/x86/lib/usercopy.c | 25 +++++++++++++++++++------
    > >> 1 file changed, 19 insertions(+), 6 deletions(-)
    > >>
    > >> diff --git a/arch/x86/lib/usercopy.c b/arch/x86/lib/usercopy.c
    > >> index 96ce151..9d0913c 100644
    > >> --- a/arch/x86/lib/usercopy.c
    > >> +++ b/arch/x86/lib/usercopy.c
    > >> @@ -50,12 +50,21 @@ int arch_within_stack_frames(const void * const stack,
    > >> const void * const stackend,
    > >> const void *obj, unsigned long len)
    > >> {
    > >> - const void *frame = NULL;
    > >> - const void *oldframe;
    > >> + struct unwind_state state;
    > >> + const void *frame, *oldframe;
    > >> +
    > >> + unwind_start(&state, current, NULL, NULL);
    > >> +
    > >> + if (!unwind_next_frame(&state))
    > >> + return 0;
    > >> +
    > >> + oldframe = unwind_get_stack_ptr(&state);
    > >
    > > Actually, I think this isn't quite right. Now that the function isn't
    > > inlined, this needs to unwind another frame to be equivalent to current
    > > behavior.
    >
    > Yeah, that seems right. And IIUC, as long as this is wrapped in the
    > CONFIG_FRAME_POINTER check, this won't use the guessing unwinder,
    > right? (Which is how it should be.)

    Right, only the frame pointer unwinder will be used here, thanks to the
    CONFIG_FRAME_POINTER guard in thread_info.h.

    --
    Josh

    \
     
     \ /
      Last update: 2016-09-17 09:56    [W:2.178 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site