lkml.org 
[lkml]   [2011]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [RFC v1] implement SL*B and stack usercopy runtime checks
    On Sun, Jul 3, 2011 at 11:57 AM, Vasiliy Kulikov <segoon@openwall.com> wrote:
    >> If you seriously clean it up (that at a minimum includes things like
    >> making it configurable using some pretty helper function that just
    >> compiles away for all the normal cases,
    >
    > Hm, it is not as simple as it looks at the first glance - even if the
    > object size is known at the compile time (__compiletime_object_size), it
    > might be a field of a structure, which crosses the slab object
    > boundaries because of an overflow.

    No, I was more talking about having something like

    #ifdef CONFIG_EXPENSIVE_CHECK_USERCOPY
    extern int check_user_copy(const void *kptr, unsigned long size);
    #else
    static inline int check_user_copy(const void *kptr, unsigned long size)
    { return 0; }
    #endif

    so that the actual user-copy routines end up being clean and not have
    #ifdefs in them or any implementation details like what you check
    (stack, slab, page cache - whatever)

    If you can also make it automatically not generate any code for cases
    that are somehow obviously safe, then that's an added bonus.

    But my concern is that performance is a real issue, and the strict
    user-copy checking sounds like mostly a "let's enable this for testing
    kernels when chasing some particular issue" feature, the way
    DEBUG_PAGEALLOC is. And at the same time, code cleanliness and
    maintainability is a big deal, so the usercopy code itself should have
    minimal impact and look nice regardless (which is why I strongly
    object to that kind of "(!slab_access_ok(to, n) ||
    !stack_access_ok(to, n))" crud - the internal details of what you
    check are *totally* irrelevant to the usercopy code.

    Linus


    \
     
     \ /
      Last update: 2011-07-03 21:13    [W:0.022 / U:60.364 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site