Subject: CVE-2021-47361: mcb: fix error handling in mcb_alloc_bus()

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

mcb: fix error handling in mcb_alloc_bus()

There are two bugs:
1) If ida_simple_get() fails then this code calls put_device(carrier)
   but we haven't yet called get_device(carrier) and probably that
   leads to a use after free.
2) After device_initialize() then we need to use put_device() to
   release the bus.  This will free the internal resources tied to the
   device and call mcb_free_bus() which will free the rest.

The Linux kernel CVE team has assigned CVE-2021-47361 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 4.9.285 with commit 8a558261fa57
	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 4.14.249 with commit 115b07d9f47e
	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 4.19.209 with commit 66f74ba9be9d
	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 5.4.150 with commit 7751f609eadf
	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 5.10.70 with commit 91e4ad05bf18
	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 5.14.9 with commit 9fc198f415de
	Issue introduced in 4.7 with commit 5d9e2ab9fea4 and fixed in 5.15 with commit 25a143321648

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2021-47361
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	drivers/mcb/mcb-core.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/8a558261fa57a6deefb0925ab1829f698b194aea
	https://git.kernel.org/stable/c/115b07d9f47e3996430b8f2007edd9768e1f807f
	https://git.kernel.org/stable/c/66f74ba9be9daf9c47fface6af3677f602774f6b
	https://git.kernel.org/stable/c/7751f609eadf36b1f53712bae430019c53a16eb0
	https://git.kernel.org/stable/c/91e4ad05bf18322b5921d1a6c9b603f6eb1694f0
	https://git.kernel.org/stable/c/9fc198f415dee070a1de957bb5bf5921d8df3499
	https://git.kernel.org/stable/c/25a1433216489de4abc889910f744e952cb6dbae