lkml.org 
[lkml]   [2007]   [Jan]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [UPDATED PATCH] fix memory corruption from misinterpreted bad_inode_ops return values
    Andrew Morton wrote:
    > On Thu, 04 Jan 2007 15:04:17 -0600
    > Eric Sandeen <sandeen@redhat.com> wrote:
    >
    >> Andrew Morton wrote:
    >>> On Thu, 4 Jan 2007 20:24:12 +0000
    >>> Al Viro <viro@ftp.linux.org.uk> wrote:
    >>>
    >>>> So my main issue with fs/bad_inode.c is not even cast per se; it's that
    >>>> cast is to void *.
    >>> But Eric's latest patch is OK in that regard, isn't it? It might confuse
    >>> parsers (in fixable ways), but it is type-correct and has no casts. (Well,
    >>> it kinda has an link-time cast).
    >> Even if it is, I'm starting to wonder if all this tricksiness is really
    >> worth it for 400 bytes or so. :)
    >>
    >
    > Ah, but it's a learning opportunity!

    *grin*

    > btw, couldn't we fix this bug with a simple old
    >
    > --- a/fs/bad_inode.c~a
    > +++ a/fs/bad_inode.c
    > @@ -15,7 +15,7 @@
    > #include <linux/smp_lock.h>
    > #include <linux/namei.h>
    >
    > -static int return_EIO(void)
    > +static long return_EIO(void)
    > {
    > return -EIO;
    > }
    > _
    >
    > ?

    What about ops that return loff_t (64 bits) on 32-bit arches and stuff
    it into 2 registers....

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/errno.h>

    static long return_EIO(void)
    {
    return -EIO;
    }

    #define EIO_ERROR ((void *) (return_EIO))

    int main(int argc, char ** argv)
    {
    loff_t error;
    loff_t (*fn_ptr) (int);

    fn_ptr = EIO_ERROR;

    error = fn_ptr(0);
    printf("and... error is %lld\n", error);
    return 0;
    }

    [root]# ./ssize_eio
    and... error is 8589934587
    [root]# uname -m
    i686

    I'm still not convinced that this is the best place to be clever :)

    -Eric
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-01-04 22:21    [W:0.023 / U:59.108 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site