Re: [PATCH, RFC] directory offset overflows in 2.6.28

Russell Cattelan
2008-12-30T04:16:21Z

Dave Chinner wrote:
> On Mon, Dec 29, 2008 at 05:07:45PM -0500, Christoph Hellwig wrote:
>
>> The patch below is a dumb version of just putting back the masking,
>> to make sure we have the same behavior as in 2.6.27 and earlier.
>> I think we should at least hide it in a macro that is well-commented,
>> but I suspect we also need to make sure that we never ever get bigger
>> offsets in directories in some way.
>>
>
> I think we need that macro sooner rather than later ;)
>
>
>> Index: xfs/fs/xfs/xfs_dir2_block.c
>> ===================================================================
>> --- xfs.orig/fs/xfs/xfs_dir2_block.c 2008-12-29 21:25:29.680613664 +0100
>> +++ xfs/fs/xfs/xfs_dir2_block.c 2008-12-29 21:29:57.341627581 +0100
>> @@ -517,9 +517,9 @@ xfs_dir2_block_getdents(
>> /*
>> * If it didn't fit, set the final offset to here & return.
>> */
>> - if (filldir(dirent, dep->name, dep->namelen, cook,
>> + if (filldir(dirent, dep->name, dep->namelen, cook & 0x7fffffff,
>> ino, DT_UNKNOWN)) {
>> - *offset = cook;
>> + *offset = cook & 0x7fffffff;
>> xfs_da_brelse(NULL, bp);
>> return 0;
>> }
>>
>
> In this case, you can do the masking at the time cook is
> assigned. I haven't checked, but I suspect the rest will be the
> same. That will make the patch less invasive and with a macro
> somewhat cleaner...
>
> Cheers,
>
> Dave.
>
I'm still sorting out the readdir changes in the FreeBSD port so I'm not
exactly sure how this would
affect things there but I'm thinking FreeBSD does not have 32 bit
readdir offset limits, so this change
might be another undo patch I would have to maintain.
So I agree, lets make this less invasive.

I've managed to change things at bit by passing an opaque ptr
containing the uuio struct into a freebsd "filldir" function so my xfs
changes so far
are minimal.