mbox series

[00/16] Fixes for the NFSv4.2 READ_PLUS operation

Message ID 20201209144801.700778-1-trondmy@kernel.org (mailing list archive)
Headers show
Series Fixes for the NFSv4.2 READ_PLUS operation | expand

Message

trondmy@kernel.org Dec. 9, 2020, 2:47 p.m. UTC
From: Trond Myklebust <trond.myklebust@hammerspace.com>

The patches are divided into three parts:
1) A set of SUNRPC patches to fix and clean up the XDR decoding
operations that are used by READ_PLUS, READ and READDIR. The main focus
is on the operations used to shift data left and right in pages.
2) A set of patches to the NFSv4.2 READ_PLUS client code. These mainly
try to fix issues around bounds checking, but also fix at least one
protocol conformance problem.
3) A couple of patches for the READ_PLUS server code. These fix issues
when nfsd_readv() returns fewer bytes than the maximum requested, and
when the READ_PLUS gets truncated.

The patches are intended to apply on top of my existing 'testing' branch
in git.linux-nfs.org.

Trond Myklebust (16):
  SUNRPC: _shift_data_left/right_pages should check the shift length
  SUNRPC: Fixes for xdr_align_data()
  SUNRPC: Fix xdr_expand_hole()
  SUNRPC: Cleanup xdr_shrink_bufhead()
  SUNRPC: _copy_to/from_pages() now check for zero length
  SUNRPC: Clean up open coded setting of the xdr_stream 'nwords' field
  SUNRPC: Cleanup - constify a number of xdr_buf helpers
  SUNRPC: Avoid unnecessary copies in xdr_buf_pages_copy_left/right()
  NFSv4.2: Ensure we always reset the result->count in
    decode_read_plus()
  NFSv4.2: decode_read_plus_data() must skip padding after data segment
  NFSv4.2: decode_read_plus_hole() needs to check the extent offset
  NFSv4.2: Handle hole lengths that exceed the READ_PLUS read buffer
  NFSv4.2: Don't error when exiting early on a READ_PLUS buffer overflow
  NFSv4.2: Deal with potential READ_PLUS data extent buffer overflow
  nfsd: Fixes for nfsd4_encode_read_plus_data()
  nfsd: Don't set eof on a truncated READ_PLUS

 fs/nfs/nfs42xdr.c          |  78 +++--
 fs/nfsd/nfs4xdr.c          |  14 +-
 include/linux/sunrpc/xdr.h |  26 +-
 net/sunrpc/xdr.c           | 674 +++++++++++++++++++++++--------------
 4 files changed, 493 insertions(+), 299 deletions(-)