Re: [PATCH] nfsd: Use correct error code when decoding extents

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

 



On 6/16/25 8:38 AM, Christoph Hellwig wrote:
> On Wed, Jun 11, 2025 at 12:29:51PM -0400, Chuck Lever wrote:
>> On 6/11/25 12:24 PM, Sergey Bashirov wrote:
>>> I also have some doubts about this code:
>>> if (xdr_stream_decode_u64(&xdr, &bex.len))
>>>         return -NFS4ERR_BADXDR;
>>> if (bex.len & (block_size - 1))
>>>         return -NFS4ERR_BADXDR;
>>>
>>> The first error code is clear to me, it is all about decoding. But should
>>> not we return -NFS4ERR_EINVAL in the second check? On one hand, we
>>> encountered an invalid value after successful decoding, but on the other
>>> hand, we stopped decoding the extent array, so we can say that this is
>>> also a decoding error.
>>
>> On first read of Section 2.3 of RFC 5663, there's no mandated alignment
>> requirement for bex_length. IMO this is a case where the implementation
>> is deciding that a decoded value is not valid, so NFS4ERR_INVAL might be
>> a better choice here.
> 
> Section 2.1 of RFC 5663 says:
> 
> Clients must be able to perform I/O to the block extents without 
> affecting additional areas of storage (especially important for writes);
> therefore, extents MUST be aligned to 512-byte boundaries, and writable
> extents MUST be aligned to the block size used by the NFSv4 server in
> managing the actual file system (4 kilobytes and 8 kilobytes are common
> block sizes).  This block size is available as the NFSv4.1 layout_blksize
> attribute.
> 
> While it would be nice to state this again in 2.3, the language looks
> normative enough (TM) to me.

No argument from me.

Passing in a non-aligned bex_length still doesn't seem to me to be an
XDR issue. Failing with NFS4ERR_INVAL seems like the correct server
response for this situation.


-- 
Chuck Lever




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux