mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 09:43:59 +08:00
pNFS/flexfiles: fix incorrect size check in decode_nfs_fh()
We (adam zabrocki, alexander matrosov, alexander tereshkin, maksym
bazalii) observed the check:
if (fh->size > sizeof(struct nfs_fh))
should not use the size of the nfs_fh struct which includes an extra two
bytes from the size field.
struct nfs_fh {
unsigned short size;
unsigned char data[NFS_MAXFHSIZE];
}
but should determine the size from data[NFS_MAXFHSIZE] so the memcpy
will not write 2 bytes beyond destination. The proposed fix is to
compare against the NFS_MAXFHSIZE directly, as is done elsewhere in fs
code base.
Fixes: d67ae825a5
("pnfs/flexfiles: Add the FlexFile Layout Driver")
Signed-off-by: Nikola Livic <nlivic@gmail.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
eb3d58c68e
commit
ed34695e15
@ -106,7 +106,7 @@ static int decode_nfs_fh(struct xdr_stream *xdr, struct nfs_fh *fh)
|
|||||||
if (unlikely(!p))
|
if (unlikely(!p))
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
fh->size = be32_to_cpup(p++);
|
fh->size = be32_to_cpup(p++);
|
||||||
if (fh->size > sizeof(struct nfs_fh)) {
|
if (fh->size > NFS_MAXFHSIZE) {
|
||||||
printk(KERN_ERR "NFS flexfiles: Too big fh received %d\n",
|
printk(KERN_ERR "NFS flexfiles: Too big fh received %d\n",
|
||||||
fh->size);
|
fh->size);
|
||||||
return -EOVERFLOW;
|
return -EOVERFLOW;
|
||||||
|
Loading…
Reference in New Issue
Block a user