[Tux3] [PATCH] Fix maximum file size boundary checking. I added a test which attempts to

Shapor Naghibzadeh shapor at gmail.com
Thu Aug 28 00:32:07 PDT 2008


This also removes the bogus pid from the warn() output.  I don't think
we'll ever use this and it makes running diffs of test output
annoying.

Shapor

On Thu, Aug 28, 2008 at 12:29 AM, Shapor Naghibzadeh <shapor at gmail.com> wrote:
> # HG changeset patch
> # User shapor at yzf.shapor.com
> # Date 1219908532 25200
> # Node ID 9d9b2984124deee26f07bfefe6439513ef35ab26
> # Parent  7e62bd3ac0f032a991ed96c2527ca2f8f62d6525
> Fix maximum file size boundary checking.  I added a test which attempts to
> write past the end of the maximum filesize and found it didn't fail until
> it submitted the io.  It turns out we were checking the block (which is
> shifted) intead of the file position.  For write I test pos + len, but I'm
> not sure if this is write.  Are we supposed to do a short write in that
> case or not?
>
> diff -r 7e62bd3ac0f0 -r 9d9b2984124d user/test/inode.c
> --- a/user/test/inode.c Wed Aug 27 21:12:32 2008 -0700
> +++ b/user/test/inode.c Thu Aug 28 00:28:52 2008 -0700
> @@ -279,7 +279,7 @@ int tuxread(struct file *file, char *dat
>        if (inode->i_size < pos + len)
>                len = inode->i_size - pos;
>        warn("read %Lx/%x", (L)pos, len);
> -       if (block & (-1LL << MAX_FILESIZE_BITS))
> +       if (pos & (-1LL << MAX_FILESIZE_BITS))
>                return -EIO;
>        struct buffer *blockbuf = getblk(inode->map, block);
>        if (!blockbuf)
> @@ -297,8 +297,8 @@ int tuxwrite(struct file *file, char *da
>        struct inode *inode = file->f_inode;
>        block_t block = pos >> inode->sb->blockbits;
>        //warn("write %Lx/%x", pos & inode->sb->blockmask, len);
> -       if (block & (-1LL << MAX_FILESIZE_BITS))
> -               return -EIO;
> +       if ((pos + len) & (-1LL << MAX_FILESIZE_BITS))
> +               return -EFBIG;
>        struct buffer *blockbuf = getblk(inode->map, block);
>        if (!blockbuf)
>                return -EIO;
> @@ -433,8 +433,10 @@ printf("---- create file ----\n");
>        char buf[100] = { };
>        struct file *file = &(struct file){ .f_inode = inode };
>        tuxseek(file, (1LL << 60) - 12);
> -       int err = tuxwrite(file, "hello ", 6);
> -printf("err = %i\n", err);
> +       int err = tuxwrite(file, "01234567890123456789", 20);
> +       printf("err = %i\n", err);
> +       err = tuxwrite(file, "hello ", 6);
> +       printf("err = %i\n", err);
>        tuxwrite(file, "world!", 6);
>        tuxsync(inode);
>        tuxsync(sb->bitmap);
> diff -r 7e62bd3ac0f0 -r 9d9b2984124d user/test/trace.h
> --- a/user/test/trace.h Wed Aug 27 21:12:32 2008 -0700
> +++ b/user/test/trace.h Thu Aug 28 00:28:52 2008 -0700
> @@ -7,7 +7,7 @@
>  //#define die(code) exit(code)
>  #define die(code) asm("int3")
>  #define warn(string, args...) do {\
> -       fprintf(stderr, "[%u] %s: " string "\n", getpid(), __func__, ##args);\
> +       fprintf(stderr, "%s: " string "\n", __func__, ##args);\
>  } while (0)
>
>  #define error(string, args...) do { warn(string, ##args); die(99); } while (0)
>
> _______________________________________________
> Tux3 mailing list
> Tux3 at tux3.org
> http://tux3.org/cgi-bin/mailman/listinfo/tux3
>

_______________________________________________
Tux3 mailing list
Tux3 at tux3.org
http://tux3.org/cgi-bin/mailman/listinfo/tux3



More information about the Tux3 mailing list