tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Bogus KASSERT() in LFS?



On Wed, 5 Jan 2011, Martin Husemann wrote:

> Disclaimer: I know nothing about LFS, but it seems to me that there is no
> guarantee for "curpg" to not be NULL in the following code from
> src/sys/ufs/lfs/lfs_vnops.c:
> 
>         while (by_list || soff < MIN(blkeof, endoffset)) {
>                 if (by_list) {
>                         /*
>                          * Find the first page in a block.  Skip
>                          * blocks outside our area of interest or beyond
>                          * the end of file.
>                          */
>                         KASSERT(curpg == NULL ||
>                             (curpg->flags & PG_MARKER) == 0);
> 
> 
> and actually some ATF tests die for me with SIGSEGV inside the KASSERT.
> So, would this patch be ok?

Interesting......

I think you're right.  While I'm pretty sure that curpg won't be NULL on 
the first iteration, I think it can be NULL on subsequent iterations.  I'd 
commit that change.

Eduardo

> 
> Index: lfs_vnops.c
> ===================================================================
> RCS file: /cvsroot/src/sys/ufs/lfs/lfs_vnops.c,v
> retrieving revision 1.233
> diff -u -r1.233 lfs_vnops.c
> --- lfs_vnops.c       2 Jan 2011 05:09:32 -0000       1.233
> +++ lfs_vnops.c       5 Jan 2011 15:07:00 -0000
> @@ -1860,7 +1860,8 @@
>                        * blocks outside our area of interest or beyond
>                        * the end of file.
>                        */
> -                     KASSERT((curpg->flags & PG_MARKER) == 0);
> +                     KASSERT(curpg == NULL ||
> +                         (curpg->flags & PG_MARKER) == 0);
>                       if (pages_per_block > 1) {
>                               while (curpg &&
>                                   ((curpg->offset & fs->lfs_bmask) ||
> 


Home | Main Index | Thread Index | Old Index