mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-15 19:18:02 +00:00
sunrpc: Avoid a KASAN slab-out-of-bounds bug in xdr_set_page_base()
This seems to happen fairly easily during READ_PLUS testing on NFS v4.2.
I found that we could end up accessing xdr->buf->pages[pgnr] with a pgnr
greater than the number of pages in the array. So let's just return
early if we're setting base to a point at the end of the page data and
let xdr_set_tail_base() handle setting up the buffer pointers instead.
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Fixes: 8d86e373b0
("SUNRPC: Clean up helpers xdr_set_iov() and xdr_set_page_base()")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
3731d44bba
commit
6d1c0f3d28
1 changed files with 3 additions and 4 deletions
|
@ -1230,10 +1230,9 @@ static unsigned int xdr_set_page_base(struct xdr_stream *xdr,
|
||||||
void *kaddr;
|
void *kaddr;
|
||||||
|
|
||||||
maxlen = xdr->buf->page_len;
|
maxlen = xdr->buf->page_len;
|
||||||
if (base >= maxlen) {
|
if (base >= maxlen)
|
||||||
base = maxlen;
|
return 0;
|
||||||
maxlen = 0;
|
else
|
||||||
} else
|
|
||||||
maxlen -= base;
|
maxlen -= base;
|
||||||
if (len > maxlen)
|
if (len > maxlen)
|
||||||
len = maxlen;
|
len = maxlen;
|
||||||
|
|
Loading…
Add table
Reference in a new issue