Subject: CVE-2021-47153: i2c: i801: Don't generate an interrupt on bus reset

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

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

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

i2c: i801: Don't generate an interrupt on bus reset

Now that the i2c-i801 driver supports interrupts, setting the KILL bit
in a attempt to recover from a timed out transaction triggers an
interrupt. Unfortunately, the interrupt handler (i801_isr) is not
prepared for this situation and will try to process the interrupt as
if it was signaling the end of a successful transaction. In the case
of a block transaction, this can result in an out-of-range memory
access.

This condition was reproduced several times by syzbot:
https://syzkaller.appspot.com/bug?extid=ed71512d469895b5b34e
https://syzkaller.appspot.com/bug?extid=8c8dedc0ba9e03f6c79e
https://syzkaller.appspot.com/bug?extid=c8ff0b6d6c73d81b610e
https://syzkaller.appspot.com/bug?extid=33f6c360821c399d69eb
https://syzkaller.appspot.com/bug?extid=be15dc0b1933f04b043a
https://syzkaller.appspot.com/bug?extid=b4d3fd1dfd53e90afd79

So disable interrupts while trying to reset the bus. Interrupts will
be enabled again for the following transaction.

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

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

	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 4.4.271 with commit f9469082126c
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 4.9.271 with commit 09c9e79f4c10
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 4.14.235 with commit dfa8929e117b
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 4.19.193 with commit c70e1ba2e7e6
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 5.4.124 with commit 04cc05e3716a
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 5.10.42 with commit b523feb7e8e4
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 5.12.9 with commit 1f583d3813f2
	Issue introduced in 3.6 with commit 636752bcb517 and fixed in 5.13 with commit e4d8716c3dce

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-47153
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/i2c/busses/i2c-i801.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/f9469082126cebb7337db3992d143f5e4edfe629
	https://git.kernel.org/stable/c/09c9e79f4c10cfb6b9e0e1b4dd355232e4b5a3b3
	https://git.kernel.org/stable/c/dfa8929e117b0228a7765f5c3f5988a4a028f3c6
	https://git.kernel.org/stable/c/c70e1ba2e7e65255a0ce004f531dd90dada97a8c
	https://git.kernel.org/stable/c/04cc05e3716ae31b17ecdab7bc55c8170def1b8b
	https://git.kernel.org/stable/c/b523feb7e8e44652f92f3babb953a976e7ccbbef
	https://git.kernel.org/stable/c/1f583d3813f204449037cd2acbfc09168171362a
	https://git.kernel.org/stable/c/e4d8716c3dcec47f1557024add24e1f3c09eb24b