lkml.org 
[lkml]   [2010]   [Dec]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject(No subject header)
    On Tue, 30 Nov 2010 about 20:01:29 -0000, Oleg Nesterov wrote:
    > Teach get_arg_ptr() to handle compat = T case correctly.

    > #include <asm/uaccess.h>
    > #include <asm/mmu_context.h>
    > @@ -395,6 +396,18 @@ get_arg_ptr(const char __user * const __
    > {
    > const char __user *ptr;
    >
    > +#ifdef CONFIG_COMPAT
    > + if (unlikely(compat)) {

    This should not be marked unlikely. Unlikely tells gcc the path
    with over 99% confidence and disables branch predictors on some
    architectures. If called from a compat processes this will result
    in a mispredicted branch every iteration. Just use if (compat)
    and let the hardware branch predictors do their job.

    > + compat_uptr_t __user *a = (void __user*)argv;
    > + compat_uptr_t p;
    > +
    > + if (get_user(p, a + argc))
    > + return ERR_PTR(-EFAULT);
    > +
    > + return compat_ptr(p);
    > + }
    > +#endif
    > +
    > if (get_user(ptr, argv + argc))
    > return ERR_PTR(-EFAULT);
    >
    > @@ -1501,6 +1514,18 @@ int do_execve(const char *filename,
    > return do_execve_common(filename, argv, envp, regs, false);
    > }
    >
    > +#ifdef CONFIG_COMPAT
    > +int compat_do_execve(char * filename,
    > + compat_uptr_t __user *argv,
    > + compat_uptr_t __user *envp,
    > + struct pt_regs * regs)
    > +{
    > + return do_execve_common(filename,
    > + (void __user*)argv, (void __user*)envp,

    Shouldn't these be compat_ptr(argv)? (makes a difference on s390)

    > + regs, true);
    > +}
    > +#endif
    > +
    > void set_binfmt(struct linux_binfmt *new)
    > {
    > struct mm_struct *mm = current->mm;

    Thanks,
    milton


    \
     
     \ /
      Last update: 2010-12-01 18:41    [W:0.021 / U:60.196 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site