From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Guoqing Zhang <guoqing.zhang@intel.com>,
Lu Baolu <baolu.lu@linux.intel.com>,
Mathias Nyman <mathias.nyman@linux.intel.com>
Subject: [PATCH 4.14 097/101] usb: xhci: Fix potential memory leak in xhci_disable_slot()
Date: Tue, 27 Mar 2018 18:28:09 +0200 [thread overview]
Message-ID: <20180327162755.950452777@linuxfoundation.org> (raw)
In-Reply-To: <20180327162749.993880276@linuxfoundation.org>
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Baolu <baolu.lu@linux.intel.com>
commit cd3f1790b006d91786728c20a01da21ee277aff1 upstream.
xhci_disable_slot() allows the invoker to pass a command pointer
as paramenter. Otherwise, it will allocate one. This will cause
memory leak when a command structure was allocated inside of this
function while queuing command trb fails. Another problem comes up
when the invoker passed a command pointer, but xhci_disable_slot()
frees it when it detects a dead host.
This patch fixes these two problems by removing the command parameter
from xhci_disable_slot().
Fixes: f9e609b82479 ("usb: xhci: Add helper function xhci_disable_slot().")
Cc: Guoqing Zhang <guoqing.zhang@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/host/xhci-hub.c | 2 +-
drivers/usb/host/xhci.c | 30 +++++++++---------------------
drivers/usb/host/xhci.h | 3 +--
3 files changed, 11 insertions(+), 24 deletions(-)
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -637,7 +637,7 @@ static int xhci_enter_test_mode(struct x
if (!xhci->devs[i])
continue;
- retval = xhci_disable_slot(xhci, NULL, i);
+ retval = xhci_disable_slot(xhci, i);
if (retval)
xhci_err(xhci, "Failed to disable slot %d, %d. Enter test mode anyway\n",
i, retval);
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -3523,11 +3523,6 @@ static void xhci_free_dev(struct usb_hcd
struct xhci_virt_device *virt_dev;
struct xhci_slot_ctx *slot_ctx;
int i, ret;
- struct xhci_command *command;
-
- command = xhci_alloc_command(xhci, false, false, GFP_KERNEL);
- if (!command)
- return;
#ifndef CONFIG_USB_DEFAULT_PERSIST
/*
@@ -3543,10 +3538,8 @@ static void xhci_free_dev(struct usb_hcd
/* If the host is halted due to driver unload, we still need to free the
* device.
*/
- if (ret <= 0 && ret != -ENODEV) {
- kfree(command);
+ if (ret <= 0 && ret != -ENODEV)
return;
- }
virt_dev = xhci->devs[udev->slot_id];
slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->out_ctx);
@@ -3558,22 +3551,21 @@ static void xhci_free_dev(struct usb_hcd
del_timer_sync(&virt_dev->eps[i].stop_cmd_timer);
}
- xhci_disable_slot(xhci, command, udev->slot_id);
+ xhci_disable_slot(xhci, udev->slot_id);
/*
* Event command completion handler will free any data structures
* associated with the slot. XXX Can free sleep?
*/
}
-int xhci_disable_slot(struct xhci_hcd *xhci, struct xhci_command *command,
- u32 slot_id)
+int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id)
{
+ struct xhci_command *command;
unsigned long flags;
u32 state;
int ret = 0;
- if (!command)
- command = xhci_alloc_command(xhci, false, false, GFP_KERNEL);
+ command = xhci_alloc_command(xhci, false, false, GFP_KERNEL);
if (!command)
return -ENOMEM;
@@ -3591,7 +3583,7 @@ int xhci_disable_slot(struct xhci_hcd *x
slot_id);
if (ret) {
spin_unlock_irqrestore(&xhci->lock, flags);
- xhci_dbg(xhci, "FIXME: allocate a command ring segment\n");
+ kfree(command);
return ret;
}
xhci_ring_cmd_db(xhci);
@@ -3666,6 +3658,8 @@ int xhci_alloc_dev(struct usb_hcd *hcd,
return 0;
}
+ xhci_free_command(xhci, command);
+
if ((xhci->quirks & XHCI_EP_LIMIT_QUIRK)) {
spin_lock_irqsave(&xhci->lock, flags);
ret = xhci_reserve_host_control_ep_resources(xhci);
@@ -3701,18 +3695,12 @@ int xhci_alloc_dev(struct usb_hcd *hcd,
pm_runtime_get_noresume(hcd->self.controller);
#endif
-
- xhci_free_command(xhci, command);
/* Is this a LS or FS device under a HS hub? */
/* Hub or peripherial? */
return 1;
disable_slot:
- /* Disable slot, if we can do it without mem alloc */
- kfree(command->completion);
- command->completion = NULL;
- command->status = 0;
- return xhci_disable_slot(xhci, command, udev->slot_id);
+ return xhci_disable_slot(xhci, udev->slot_id);
}
/*
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -2014,8 +2014,7 @@ int xhci_run(struct usb_hcd *hcd);
int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks);
void xhci_init_driver(struct hc_driver *drv,
const struct xhci_driver_overrides *over);
-int xhci_disable_slot(struct xhci_hcd *xhci,
- struct xhci_command *command, u32 slot_id);
+int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id);
int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup);
int xhci_resume(struct xhci_hcd *xhci, bool hibernated);
next prev parent reply other threads:[~2018-03-27 16:38 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-27 16:26 [PATCH 4.14 000/101] 4.14.31-stable review Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 001/101] MIPS: ralink: Remove ralink_halt() Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 002/101] MIPS: ralink: Fix booting on MT7621 Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 003/101] MIPS: lantiq: Fix Danube USB clock Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 004/101] MIPS: lantiq: Enable AHB Bus for USB Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 005/101] MIPS: lantiq: ase: Enable MFD_SYSCON Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 006/101] iio: chemical: ccs811: Corrected firmware boot/application mode transition Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 007/101] iio: st_pressure: st_accel: pass correct platform data to init Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 008/101] iio: adc: meson-saradc: unlock on error in meson_sar_adc_lock() Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 009/101] ALSA: usb-audio: Fix parsing descriptor of UAC2 processing unit Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 010/101] ALSA: aloop: Sync stale timer before release Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 011/101] ALSA: aloop: Fix access to not-yet-ready substream via cable Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 012/101] ALSA: hda - Force polling mode on CFL for fixing codec communication Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 013/101] ALSA: hda/realtek - Fix speaker no sound after system resume Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 014/101] ALSA: hda/realtek - Fix Dell headset Mic cant record Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 015/101] ALSA: hda/realtek - Always immediately update mute LED with pin VREF Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 016/101] mmc: core: Fix tracepoint print of blk_addr and blksz Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 017/101] mmc: core: Disable HPI for certain Micron (Numonyx) eMMC cards Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 018/101] mmc: block: fix updating ext_csd caches on ioctl call Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 019/101] mmc: dw_mmc: Fix the DTO/CTO timeout overflow calculation for 32-bit systems Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 020/101] mmc: dw_mmc: exynos: fix the suspend/resume issue for exynos5433 Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 021/101] mmc: dw_mmc: fix falling from idmac to PIO mode when dw_mci_reset occurs Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 022/101] PCI: Add function 1 DMA alias quirk for Highpoint RocketRAID 644L Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 023/101] ahci: Add PCI-id for the Highpoint Rocketraid 644L card Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 024/101] lockdep: fix fs_reclaim warning Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 025/101] clk: bcm2835: Fix ana->maskX definitions Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 026/101] clk: bcm2835: Protect sections updating shared registers Greg Kroah-Hartman
2018-03-27 16:26 ` [PATCH 4.14 027/101] clk: sunxi-ng: a31: Fix CLK_OUT_* clock ops Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 028/101] RDMA/mlx5: Fix crash while accessing garbage pointer and freed memory Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 029/101] Drivers: hv: vmbus: Fix ring buffer signaling Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 030/101] pinctrl: samsung: Validate alias coming from DT Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 031/101] Bluetooth: btusb: Remove Yoga 920 from the btusb_needs_reset_resume_table Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 032/101] Bluetooth: btusb: Add Dell OptiPlex 3060 to btusb_needs_reset_resume_table Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 033/101] Bluetooth: btusb: Fix quirk for Atheros 1525/QCA6174 Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 034/101] libata: fix length validation of ATAPI-relayed SCSI commands Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 035/101] libata: remove WARN() for DMA or PIO command without data Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 036/101] libata: dont try to pass through NCQ commands to non-NCQ devices Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 037/101] libata: Apply NOLPM quirk to Crucial MX100 512GB SSDs Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 038/101] libata: disable LPM for Crucial BX100 SSD 500GB drive Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 039/101] libata: Enable queued TRIM for Samsung SSD 860 Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 040/101] libata: Apply NOLPM quirk to Crucial M500 480 and 960GB SSDs Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 041/101] libata: Make Crucial BX100 500GB LPM quirk apply to all firmware versions Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 042/101] libata: Modify quirks for MX100 to limit NCQ_TRIM quirk to MU01 version Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 043/101] cgroup: fix rule checking for threaded mode switching Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 044/101] nfsd: remove blocked locks on client teardown Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 045/101] hugetlbfs: check for pgoff value overflow Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 046/101] h8300: remove extraneous __BIG_ENDIAN definition Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 047/101] mm/vmalloc: add interfaces to free unmapped page table Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 048/101] x86/mm: implement free pmd/pte page interfaces Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 049/101] mm/khugepaged.c: convert VM_BUG_ON() to collapse fail Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 050/101] mm/thp: do not wait for lock_page() in deferred_split_scan() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 051/101] mm/shmem: do not wait for lock_page() in shmem_unused_huge_shrink() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 052/101] Revert "mm: page_alloc: skip over regions of invalid pfns where possible" Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 053/101] drm/vmwgfx: Fix black screen and device errors when running without fbdev Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 054/101] drm/vmwgfx: Fix a destoy-while-held mutex problem Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 056/101] drm: Reject getfb for multi-plane framebuffers Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 057/101] drm: udl: Properly check framebuffer mmap offsets Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 058/101] mm/vmscan: wake up flushers for legacy cgroups too Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 059/101] acpi, numa: fix pxm to online numa node associations Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 060/101] ACPI / watchdog: Fix off-by-one error at resource assignment Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 061/101] libnvdimm, {btt, blk}: do integrity setup before add_disk() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 062/101] brcmfmac: fix P2P_DEVICE ethernet address generation Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 063/101] rtlwifi: rtl8723be: Fix loss of signal Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 064/101] tracing: probeevent: Fix to support minus offset from symbol Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 065/101] mtdchar: fix usage of mtd_ooblayout_ecc() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 066/101] mtd: nand: fsl_ifc: Fix nand waitfunc return value Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 067/101] mtd: nand: fsl_ifc: Fix eccstat array overflow for IFC ver >= 2.0.0 Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 068/101] mtd: nand: fsl_ifc: Read ECCSTAT0 and ECCSTAT1 registers for IFC 2.0 Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 069/101] staging: ncpfs: memory corruption in ncp_read_kernel() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 070/101] can: peak/pcie_fd: fix echo_skb is occupied! bug Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 071/101] can: peak/pcie_fd: remove useless code when interface starts Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 072/101] can: ifi: Repair the error handling Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 073/101] can: ifi: Check core revision upon probe Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 074/101] can: cc770: Fix stalls on rt-linux, remove redundant IRQ ack Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 075/101] can: cc770: Fix queue stall & dropped RTR reply Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 076/101] can: cc770: Fix use after free in cc770_tx_interrupt() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 077/101] tty: vt: fix up tabstops properly Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 078/101] x86/entry/64: Dont use IST entry for #BP stack Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 079/101] selftests/x86/ptrace_syscall: Fix for yet more glibc interference Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 080/101] x86/vsyscall/64: Use proper accessor to update P4D entry Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 081/101] x86/efi: Free efi_pgd with free_pages() Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 082/101] posix-timers: Protect posix clock array access against speculation Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 083/101] kvm/x86: fix icebp instruction handling Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 084/101] x86/build/64: Force the linker to use 2MB page size Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 085/101] x86/boot/64: Verify alignment of the LOAD segment Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 086/101] drm/syncobj: Stop reusing the same struct file for all syncobj -> fd Greg Kroah-Hartman
2018-03-27 16:27 ` [PATCH 4.14 087/101] perf/x86/intel/uncore: Fix Skylake UPI event format Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 088/101] perf stat: Fix CVS output format for non-supported counters Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 089/101] perf/core: Fix ctx_event_type in ctx_resched() Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 090/101] perf/x86/intel: Dont accidentally clear high bits in bdw_limit_period() Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 091/101] perf/x86/intel/uncore: Fix multi-domain PCI CHA enumeration bug on Skylake servers Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 092/101] iio: ABI: Fix name of timestamp sysfs file Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 093/101] iio: imu: st_lsm6dsx: fix endianness in st_lsm6dsx_read_oneshot() Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 094/101] staging: android: ion: Zero CMA allocated memory Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 095/101] staging: lustre: ptlrpc: kfree used instead of kvfree Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 096/101] usb: xhci: Disable slot even when virt-dev is null Greg Kroah-Hartman
2018-03-27 16:28 ` Greg Kroah-Hartman [this message]
2018-03-27 16:28 ` [PATCH 4.14 098/101] x86/pkeys/selftests: Rename si_pkey to siginfo_pkey Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 099/101] kbuild: disable clangs default use of -fmerge-all-constants Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 100/101] bpf: skip unnecessary capability check Greg Kroah-Hartman
2018-03-27 16:28 ` [PATCH 4.14 101/101] bpf, x64: increase number of passes Greg Kroah-Hartman
2018-03-27 22:56 ` [PATCH 4.14 000/101] 4.14.31-stable review Shuah Khan
2018-03-28 13:38 ` Guenter Roeck
2018-03-28 16:21 ` Greg Kroah-Hartman
2018-03-28 18:41 ` Dan Rue
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180327162755.950452777@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=baolu.lu@linux.intel.com \
--cc=guoqing.zhang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathias.nyman@linux.intel.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).