FAILED: patch "[PATCH] usbip: Fix uninitialized symbol 'nents' in" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-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 ------------------
From 2a9125317b247f2cf35c196f968906dcf062ae2d Mon Sep 17 00:00:00 2001
From: Suwan Kim <[email protected]>
Date: Mon, 11 Nov 2019 23:10:35 +0900
Subject: [PATCH] usbip: Fix uninitialized symbol 'nents' in
stub_recv_cmd_submit()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Smatch reported that nents is not initialized and used in stub_recv_cmd_submit(). nents is currently initialized by sgl_alloc() and used to allocate multiple URBs when host controller doesn't support scatter-gather DMA. The use of uninitialized nents means that buf_len is zero and use_sg is true. But buffer length should not be zero when an URB uses scatter-gather DMA.
To prevent this situation, add the conditional that checks buf_len and use_sg. And move the use of nents right after the sgl_alloc() to avoid the use of uninitialized nents.
If the error occurs, it adds SDEV_EVENT_ERROR_MALLOC and stub_priv will be released by stub event handler and connection will be shut down.
drivers/usb/usbip/stub_rx.c +32 -18
@@ -470,18 +470,50 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,if (pipe ==-1 )return ; +/* +* Smatch reported the error case where use_sg is true and buf_len is 0. +* In this case, It adds SDEV_EVENT_ERROR_MALLOC and stub_priv will be +* released by stub event handler and connection will be shut down. +*/ priv =stub_priv_alloc (sdev, pdu);if (!priv)return ; buf_len = (unsigned long long )pdu->u.cmd_submit.transfer_buffer_length; +if (use_sg && !buf_len) { +dev_err (&udev->dev,"sg buffer with zero length\n" ); + goto err_malloc; + } +/* allocate urb transfer buffer, if needed */ if (buf_len) {if (use_sg) { sgl =sgl_alloc (buf_len,GFP_KERNEL , &nents);if (!sgl) goto err_malloc; + +/* Check if the server's HCD supports SG */ +if (!udev->bus->sg_tablesize) { +/* +* If the server's HCD doesn't support SG, break +* a single SG request into several URBs and map +* each SG list entry to corresponding URB +* buffer. The previously allocated SG list is +* stored in priv->sgl (If the server's HCD +* support SG, SG list is stored only in +* urb->sg) and it is used as an indicator that +* the server split single SG request into +* several URBs. Later, priv->sgl is used by +* stub_complete() and stub_send_ret_submit() to +* reassemble the divied URBs. +*/ + support_sg =0 ; + num_urbs = nents; + priv->completed_urbs =0 ; + pdu->u.cmd_submit.transfer_flags &= + ~URB_DMA_MAP_SG ; + } }else { buffer =kzalloc (buf_len,GFP_KERNEL );if (!buffer)
@@ -489,24 +521,6 @@ static void stub_recv_cmd_submit(struct stub_device *sdev, } } -/* Check if the server's HCD supports SG */ -if (use_sg && !udev->bus->sg_tablesize) { -/* -* If the server's HCD doesn't support SG, break a single SG -* request into several URBs and map each SG list entry to -* corresponding URB buffer. The previously allocated SG -* list is stored in priv->sgl (If the server's HCD support SG, -* SG list is stored only in urb->sg) and it is used as an -* indicator that the server split single SG request into -* several URBs. Later, priv->sgl is used by stub_complete() and -* stub_send_ret_submit() to reassemble the divied URBs. -*/ - support_sg =0 ; - num_urbs = nents; - priv->completed_urbs =0 ; - pdu->u.cmd_submit.transfer_flags &= ~URB_DMA_MAP_SG ; - } -/* allocate urb array */ priv->num_urbs = num_urbs; priv->urbs =kmalloc_array (num_urbs,sizeof (*priv->urbs),GFP_KERNEL );
Shuah Khan
maintainerQuoted 6 lines · On 11/27/19 12:53 PM, [email protected] wrote:
The patch below does not apply to the 4.9-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]>.
This patch isn't applicable to 4.4. We can ignore the failure.
thanks,
-- Shuah