FAILED: patch "[PATCH] cifs: integer overflow in in SMB2_ioctl()" failed to apply to 4.4-stable tree
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
2d204ee9d671327915260071c19350d84344e096Mon Sep 17 00:00:00 2001
From: Dan Carpenter <[email protected]>
Date: Mon, 10 Sep 2018 14:12:07 +0300
Subject: [PATCH] cifs: integer overflow in in SMB2_ioctl()
The "le32_to_cpu(rsp->OutputOffset) + *plen" addition can overflow and wrap around to a smaller value which looks like it would lead to an information leak.
Fixes 4a72dafa19ba ("SMB2 FSCTL and IOCTL worker function")
Signed-off-by Dan Carpenter <[email protected]>
Signed-off-by Steve French <[email protected]>
Reviewed-by Aurelien Aptel <[email protected]>
CC Stable <[email protected]>
fs/cifs/smb2pdu.c +2 -2
@@ -2459,14 +2459,14 @@ SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid,/* We check for obvious errors in the output buffer length and offset */ if (*plen ==0 ) goto ioctl_exit;/* server returned no data */ -else if (*plen >0xFF00 ) { +else if (*plen > rsp_iov.iov_len || *plen >0xFF00 ) {cifs_dbg (VFS ,"srv returned invalid ioctl length: %d\n" , *plen); *plen =0 ; rc = -EIO ; goto ioctl_exit; } -if (rsp_iov.iov_len <le32_to_cpu (rsp->OutputOffset) + *plen) { +if (rsp_iov.iov_len - *plen <le32_to_cpu (rsp->OutputOffset)) {cifs_dbg (VFS ,"Malformed ioctl resp: len %d offset %d\n" , *plen,le32_to_cpu (rsp->OutputOffset)); *plen =0 ;