Patch "usb: gadget: f_fs: Assorted buffer overflow checks." has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
usb: gadget: f_fs: Assorted buffer overflow checks.
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
usb-gadget-f_fs-assorted-buffer-overflow-checks.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
83e526f2a2fa4b2e82b6bd3ddbb26b70acfa8947Mon Sep 17 00:00:00 2001
From: Vincent Pelletier <[email protected]>
Date: Wed, 18 Jan 2017 00:57:44 +0000
Subject: usb: gadget: f_fs: Assorted buffer overflow checks.
From: Vincent Pelletier <[email protected]>
commit 83e526f2a2fa4b2e82b6bd3ddbb26b70acfa8947 upstream.
OS descriptor head, when flagged as provided, is accessed without checking if it fits in provided buffer. Verify length before access. Also, there are other places where buffer length it checked after accessing offsets which are potentially past the end. Check buffer length before as well to fail cleanly.
--- drivers/usb/gadget/function/f_fs.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
drivers/usb/gadget/function/f_fs.c +12 -1
@@ -2079,6 +2079,8 @@ static int __ffs_data_do_os_desc(enum ffif (len <sizeof (*d) || h->interface >= ffs->interfaces_count)return -EINVAL ; length =le32_to_cpu (d->dwSize); +if (len < length) +return -EINVAL ; type =le32_to_cpu (d->dwPropertyDataType);if (type <USB_EXT_PROP_UNICODE || type >USB_EXT_PROP_UNICODE_MULTI ) {
@@ -2087,6 +2089,11 @@ static int __ffs_data_do_os_desc(enum ffreturn -EINVAL ; } pnl =le16_to_cpu (d->wPropertyNameLength); +if (length <14 + pnl) { +pr_vdebug ("invalid os descriptor length: %d pnl:%d (descriptor %d)\n" , + length, pnl, type); +return -EINVAL ; + } pdl =le32_to_cpu (*(u32 *)((u8 *)data +10 + pnl));if (length !=14 + pnl + pdl) { pr_vdebug("invalid os descriptor length: %d pnl:%d pdl:%d (descriptor %d)\n",
@@ -2171,6 +2178,9 @@ static int __ffs_data_got_descs(struct f } }if (flags & (1 << i)) { +if (len <4 ) { + goto error; + } os_descs_count =get_unaligned_le32 (data); data +=4 ; len -=4 ;
@@ -2243,7 +2253,8 @@ static int __ffs_data_got_strings(structENTER (); -if (unlikely (get_unaligned_le32 (data) !=FUNCTIONFS_STRINGS_MAGIC || +if (unlikely (len <16 || +get_unaligned_le32 (data) !=FUNCTIONFS_STRINGS_MAGIC ||get_unaligned_le32 (data +4 ) != len)) goto error; str_count =get_unaligned_le32 (data +8 );
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/usb-gadget-f_fs-assorted-buffer-overflow-checks.patch