2008-12-30 05:45:53

by Manish Katiyar

[permalink] [raw]
Subject: confusion in validation of rec_len in ext2_add_link

Hi,

I was trying to understand the purpose of the below check for
validating rec_len in the function ext2_add_link(). Before reaching
line 515 we call ext2_get_page() which checks for valid entries on the
page and thus validates the rec_len too. And then we call the
lock_page(), so is this check redundant or to avoid cases when
something could have changed on the page between the lines 497 and 501
?

ext2_add_link() {

........
497 page = ext2_get_page(dir, n, 0);
499 if (IS_ERR(page))
500 goto out;
501 lock_page(page);
.........
515 if (de->rec_len == 0) {
516 ext2_error(dir->i_sb, __func__,
517 "zero-length directory entry");
518 err = -EIO;
519 goto out_unlock;
520 }

..........
}

Thanks -
Manish


2009-01-02 07:24:34

by Manish Katiyar

[permalink] [raw]
Subject: Re: confusion in validation of rec_len in ext2_add_link

On Tue, Dec 30, 2008 at 11:15 AM, Manish Katiyar <[email protected]> wrote:
> Hi,
>
> I was trying to understand the purpose of the below check for
> validating rec_len in the function ext2_add_link(). Before reaching
> line 515 we call ext2_get_page() which checks for valid entries on the
> page and thus validates the rec_len too. And then we call the
> lock_page(), so is this check redundant

Got the answer here
http://lkml.indiana.edu/hypermail/linux/kernel/0204.1/0440.html

Thanks -
Manish

> or to avoid cases when
> something could have changed on the page between the lines 497 and 501
> ?
>
> ext2_add_link() {
>
> ........
> 497 page = ext2_get_page(dir, n, 0);
> 499 if (IS_ERR(page))
> 500 goto out;
> 501 lock_page(page);
> .........
> 515 if (de->rec_len == 0) {
> 516 ext2_error(dir->i_sb, __func__,
> 517 "zero-length directory entry");
> 518 err = -EIO;
> 519 goto out_unlock;
> 520 }
>
> ..........
> }
>
> Thanks -
> Manish
>