lkml.org 
[lkml]   [2008]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] fix sys_prctl() returned uninitialized value
    Quoting Andrew Morton (akpm@linux-foundation.org):
    > On Wed, 21 May 2008 22:01:17 -0700 "Andrew G. Morgan" <morgan@kernel.org> wrote:
    >
    > > this is the default expected by the subsequent switch ().
    > >
    > > Signed-off-by: Andrew G. Morgan <morgan@kernel.org>
    > > ---
    > > kernel/sys.c | 2 ++
    > > 1 files changed, 2 insertions(+), 0 deletions(-)
    > >
    > > diff --git a/kernel/sys.c b/kernel/sys.c
    > > index 895d2d4..cb25a64 100644
    > > --- a/kernel/sys.c
    > > +++ b/kernel/sys.c
    > > @@ -1657,6 +1657,8 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
    > > if (security_task_prctl(option, arg2, arg3, arg4, arg5, &error))
    > > return error;
    > >
    > > + error = 0;
    > > +
    > > switch (option) {
    > > case PR_SET_PDEATHSIG:
    > > if (!valid_signal(arg2)) {
    >
    > Looking at it some more there are two cases which don't initialise
    > `error': PR_SET_PDEATHSIG and PR_SET_DUMPABLE. (let's set aside the
    > silliness of having sys_prctl() perform set_dumpable()'s argument
    > checking for it).

    Hmm, I don't know what kernel version I was looking at, or whose glasses
    I was wearing at the time. Clearly these are the two...

    > So I would propose this fix, mainly because it removes that nasty
    > uninitialized_var(). Please review carefully.
    >
    >
    >
    > From: Shi Weihua <shiwh@cn.fujitsu.com>
    >
    > If none of the switch cases match, the PR_SET_PDEATHSIG and
    > PR_SET_DUMPABLE cases of the switch statement will never write to local
    > variable `error'.
    >
    > Signed-off-by: Shi Weihua <shiwh@cn.fujitsu.com>
    > Cc: Andrew G. Morgan <morgan@kernel.org>
    > Cc: "Serge E. Hallyn" <serue@us.ibm.com>

    Acked-by: Serge Hallyn <serue@us.ibm.com>

    > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    > ---
    >
    > kernel/sys.c | 6 ++----
    > 1 file changed, 2 insertions(+), 4 deletions(-)
    >
    > diff -puN kernel/sys.c~sys_prctl-fix-return-of-uninitialized-value kernel/sys.c
    > --- a/kernel/sys.c~sys_prctl-fix-return-of-uninitialized-value
    > +++ a/kernel/sys.c
    > @@ -1652,7 +1652,7 @@ asmlinkage long sys_umask(int mask)
    > asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
    > unsigned long arg4, unsigned long arg5)
    > {
    > - long uninitialized_var(error);
    > + long error = 0;
    >
    > if (security_task_prctl(option, arg2, arg3, arg4, arg5, &error))
    > return error;
    > @@ -1701,9 +1701,7 @@ asmlinkage long sys_prctl(int option, un
    > error = PR_TIMING_STATISTICAL;
    > break;
    > case PR_SET_TIMING:
    > - if (arg2 == PR_TIMING_STATISTICAL)
    > - error = 0;
    > - else
    > + if (arg2 != PR_TIMING_STATISTICAL)
    > error = -EINVAL;
    > break;
    >
    > _


    \
     
     \ /
      Last update: 2008-05-23 01:01    [W:0.029 / U:0.392 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site