Subject: CVE-2022-48821: misc: fastrpc: avoid double fput() on failed usercopy

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

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

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

misc: fastrpc: avoid double fput() on failed usercopy

If the copy back to userland fails for the FASTRPC_IOCTL_ALLOC_DMA_BUFF
ioctl(), we shouldn't assume that 'buf->dmabuf' is still valid. In fact,
dma_buf_fd() called fd_install() before, i.e. "consumed" one reference,
leaving us with none.

Calling dma_buf_put() will therefore put a reference we no longer own,
leading to a valid file descritor table entry for an already released
'file' object which is a straight use-after-free.

Simply avoid calling dma_buf_put() and rely on the process exit code to
do the necessary cleanup, if needed, i.e. if the file descriptor is
still valid.

The Linux kernel CVE team has assigned CVE-2022-48821 to this issue.

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

	Issue introduced in 5.1 with commit 6cffd79504ce and fixed in 5.4.180 with commit 4e6fd2b5fcf8
	Issue introduced in 5.1 with commit 6cffd79504ce and fixed in 5.10.101 with commit a5ce7ee5fcc0
	Issue introduced in 5.1 with commit 6cffd79504ce and fixed in 5.15.24 with commit e4382d0a39f9
	Issue introduced in 5.1 with commit 6cffd79504ce and fixed in 5.16.10 with commit 76f85c307ef9
	Issue introduced in 5.1 with commit 6cffd79504ce and fixed in 5.17 with commit 46963e2e0629

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-2022-48821
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/misc/fastrpc.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/4e6fd2b5fcf8e7119305a6042bd92e7f2b9ed215
	https://git.kernel.org/stable/c/a5ce7ee5fcc07583159f54ab4af5164de00148f5
	https://git.kernel.org/stable/c/e4382d0a39f9a1e260d62fdc079ddae5293c037d
	https://git.kernel.org/stable/c/76f85c307ef9f10aa2cef1b1d5ee654c1f3345fc
	https://git.kernel.org/stable/c/46963e2e0629cb31c96b1d47ddd89dc3d8990b34