06 Jan, 2021
1 commit
-
[ Upstream commit 503b934a752f7e789a5f33217520e0a79f3096ac ]
Expanding the READ_PLUS extents can cause the read buffer to overflow.
If it does, then don't error, but just exit early.Signed-off-by: Trond Myklebust
Signed-off-by: Sasha Levin
11 Dec, 2020
1 commit
-
By switching to an XFS-backed export, I am able to reproduce the
ibcomp worker crash on my client with xfstests generic/013.For the failing LISTXATTRS operation, xdr_inline_pages() is called
with page_len=12 and buflen=128.- When ->send_request() is called, rpcrdma_marshal_req() does not
set up a Reply chunk because buflen is smaller than the inline
threshold. Thus rpcrdma_convert_iovs() does not get invoked at
all and the transport's XDRBUF_SPARSE_PAGES logic is not invoked
on the receive buffer.- During reply processing, rpcrdma_inline_fixup() tries to copy
received data into rq_rcv_buf->pages because page_len is positive.
But there are no receive pages because rpcrdma_marshal_req() never
allocated them.The result is that the ibcomp worker faults and dies. Sometimes that
causes a visible crash, and sometimes it results in a transport hang
without other symptoms.RPC/RDMA's XDRBUF_SPARSE_PAGES support is not entirely correct, and
should eventually be fixed or replaced. However, my preference is
that upper-layer operations should explicitly allocate their receive
buffers (using GFP_KERNEL) when possible, rather than relying on
XDRBUF_SPARSE_PAGES.Reported-by: Olga kornievskaia
Suggested-by: Olga kornievskaia
Fixes: c10a75145feb ("NFSv4.2: add the extended attribute proc functions.")
Signed-off-by: Chuck Lever
Reviewed-by: Olga kornievskaia
Reviewed-by: Frank van der Linden
Tested-by: Olga kornievskaia
Signed-off-by: Anna Schumaker
12 Nov, 2020
1 commit
-
Certain NFSv4.2/RDMA tests fail with v5.9-rc1.
rpcrdma_convert_kvec() runs off the end of the rl_segments array
because rq_rcv_buf.tail[0].iov_len holds a very large positive
value. The resultant kernel memory corruption is enough to crash
the client system.Callers of rpc_prepare_reply_pages() must reserve an extra XDR_UNIT
in the maximum decode size for a possible XDR pad of the contents
of the xdr_buf's pages. That guarantees the allocated receive buffer
will be large enough to accommodate the usual contents plus that XDR
pad word.encode_op_hdr() cannot add that extra word. If it does,
xdr_inline_pages() underruns the length of the tail iovec.Fixes: 3e1f02123fba ("NFSv4.2: add client side XDR handling for extended attributes")
Signed-off-by: Chuck Lever
Signed-off-by: Anna Schumaker
08 Oct, 2020
3 commits
-
Decode multiple hole and data segments sent by the server, placing
everything directly where they need to go in the xdr pages.Signed-off-by: Anna Schumaker
-
We keep things simple for now by only decoding a single hole or data
segment returned by the server, even if they returned more to us.Signed-off-by: Anna Schumaker
-
This patch adds client support for decoding a single NFS4_CONTENT_DATA
segment returned by the server. This is the simplest implementation
possible, since it does not account for any hole segments in the reply.Signed-off-by: Anna Schumaker
14 Jul, 2020
2 commits
-
Define the argument and response structures that will be used for
RFC 8276 extended attribute RPC calls, and implement the necessary
functions to encode/decode the extended attribute operations.Signed-off-by: Frank van der Linden
Signed-off-by: Trond Myklebust -
Set limits for extended attributes (attribute value size and listxattr
buffer size), based on the fs-independent limits (XATTR_*_MAX).Define the maximum XDR sizes for the RFC 8276 XATTR operations.
In the case of operations that carry a larger payload (SETXATTR,
GETXATTR, LISTXATTR), these exclude that payload, which is added
as separate pages, like other operations do.Define, much like for read and write operations, the maximum overhead
sizes for get/set/listxattr, and use them to limit the maximum payload
size for those operations, in combination with the channel attributes.Signed-off-by: Frank van der Linden
Signed-off-by: Trond Myklebust
10 Oct, 2019
2 commits
-
Support only one source server address: the same address that
the client and source server use.Signed-off-by: Andy Adamson
Signed-off-by: Olga Kornievskaia -
Try using the delegation stateid, then the open stateid.
Only NL4_NETATTR, No support for NL4_NAME and NL4_URL.
Allow only one source server address to be returned for now.To distinguish between same server copy offload ("intra") and
a copy between different server ("inter"), do a check of server
owner identity and also make sure server is capable of doing
a copy offload.Signed-off-by: Andy Adamson
Signed-off-by: Olga Kornievskaia
02 Mar, 2019
2 commits
-
Signed-off-by: Trond Myklebust
-
These really should have been there from the beginning, but we never
noticed because there was enough slack in the RPC request for the extra
bytes. Chuck's recent patch to use au_cslack and au_rslack to compute
buffer size shrunk the buffer enough that this was now a problem for
SEEK operations on my test client.Fixes: f4ac1674f5da4 ("nfs: Add ALLOCATE support")
Fixes: 2e72448b07dc3 ("NFS: Add COPY nfs operation")
Fixes: cb95deea0b4aa ("NFS OFFLOAD_CANCEL xdr")
Fixes: 624bd5b7b683c ("nfs: Add DEALLOCATE support")
Fixes: 1c6dcbe5ceff8 ("NFS: Implement SEEK")
Signed-off-by: Anna Schumaker
Signed-off-by: Trond Myklebust
14 Feb, 2019
1 commit
-
This issue is now captured by a trace point in the RPC client.
Signed-off-by: Chuck Lever
Signed-off-by: Anna Schumaker
10 Aug, 2018
3 commits
-
Change xdr to always send COPY asynchronously.
Keep the list copies send in a list under a server structure.
Once copy is sent, it waits on a completion structure that will
be signalled by the callback thread that receives CB_OFFLOAD.If CB_OFFLOAD returned an error and even if it returned partial
bytes, ignore them (as we can't commit without a verifier to
match) and return an error.Signed-off-by: Olga Kornievskaia
Signed-off-by: Anna Schumaker -
If server returns async reply, it must include a callback stateid,
wr_callback_id in the write_response4.Signed-off-by: Olga Kornievskaia
Signed-off-by: Anna Schumaker -
Signed-off-by: Olga Kornievskaia
Signed-off-by: Anna Schumaker
02 Nov, 2017
1 commit
-
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.By default all files without license information are under the default
license of the kernel, which is GPL version 2.Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier. The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.How this work was done:
Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
- file had no licensing information it it.
- file was a */uapi/* one with no licensing information in it,
- file was a */uapi/* one with existing licensing information,Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne. Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed. Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.Criteria used to select files for SPDX license identifier tagging was:
- Files considered eligible had to be source code files.
- Make and config files were included as candidates if they contained >5
lines of source
- File already had some variant of a license header in it (even if
Reviewed-by: Philippe Ombredanne
Reviewed-by: Thomas Gleixner
Signed-off-by: Greg Kroah-Hartman
15 May, 2017
2 commits
-
Declare the p_decode callbacks with the proper prototype instead of
casting to kxdrdproc_t and losing all type safety.Signed-off-by: Christoph Hellwig
Reviewed-by: Jeff Layton
Acked-by: Trond Myklebust -
Declare the p_encode callbacks with the proper prototype instead of
casting to kxdreproc_t and losing all type safety.Signed-off-by: Christoph Hellwig
Reviewed-by: Jeff Layton
Acked-by: Trond Myklebust
09 May, 2017
1 commit
-
Instead of messing with the commit path which has been causing issues,
add a COMMIT op after the COPY and ask for stable copies in the first
space.It saves a round trip, since after the COPY, the client sends a COMMIT
anyway.Signed-off-by: Olga Kornievskaia
Signed-off-by: Trond Myklebust
04 Dec, 2016
1 commit
-
Signed-off-by: Trond Myklebust
25 Jul, 2016
1 commit
-
Replace it with a test for whether or not the sent a stateid in violation
of what we asked for.Signed-off-by: Trond Myklebust
18 May, 2016
1 commit
-
This adds the copy_range file_ops function pointer used by the
sys_copy_range() function call. This patch only implements sync copies,
so if an async copy happens we decode the stateid and ignore it.Signed-off-by: Anna Schumaker
16 Oct, 2015
1 commit
-
xdr definitions per draft-ietf-nfsv4-minorversion2-38.txt
Signed-off-by: Peng Tao
Signed-off-by: Trond Myklebust
26 Aug, 2015
1 commit
-
Reviewed-by: Christoph Hellwig
Signed-off-by: Peng Tao
Signed-off-by: Trond Myklebust
27 Jun, 2015
1 commit
-
According to the spec, the server is only returning the status,
which we decode in the op header.Signed-off-by: Trond Myklebust
24 Jun, 2015
1 commit
-
Reviewed-by: Jeff Layton
Signed-off-by: Trond Myklebust
Signed-off-by: Peng Tao
Signed-off-by: Trond Myklebust
24 Apr, 2015
1 commit
-
This patch adds a GETATTR to the end of ALLOCATE and DEALLOCATE
operations so we can set the updated inode size and change attribute
directly. DEALLOCATE will still need to release pagecache pages, so
nfs42_proc_deallocate() now calls truncate_pagecache_range() before
contacting the server.Signed-off-by: Anna Schumaker
Signed-off-by: Trond Myklebust
26 Nov, 2014
2 commits
-
This patch adds support for using the NFS v4.2 operation DEALLOCATE to
punch holes in a file.Signed-off-by: Anna Schumaker
Signed-off-by: Trond Myklebust -
This patch adds support for using the NFS v4.2 operation ALLOCATE to
preallocate data in a file.Signed-off-by: Anna Schumaker
Signed-off-by: Trond Myklebust
01 Oct, 2014
1 commit
-
The SEEK operation is used when an application makes an lseek call with
either the SEEK_HOLE or SEEK_DATA flags set. I fall back on
nfs_file_llseek() if the server does not have SEEK support.Signed-off-by: Anna Schumaker
Signed-off-by: Trond Myklebust