Subject: CVE-2024-38621: media: stk1160: fix bounds checking in stk1160_copy_video()

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

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

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

media: stk1160: fix bounds checking in stk1160_copy_video()

The subtract in this condition is reversed.  The ->length is the length
of the buffer.  The ->bytesused is how many bytes we have copied thus
far.  When the condition is reversed that means the result of the
subtraction is always negative but since it's unsigned then the result
is a very high positive value.  That means the overflow check is never
true.

Additionally, the ->bytesused doesn't actually work for this purpose
because we're not writing to "buf->mem + buf->bytesused".  Instead, the
math to calculate the destination where we are writing is a bit
involved.  You calculate the number of full lines already written,
multiply by two, skip a line if necessary so that we start on an odd
numbered line, and add the offset into the line.

To fix this buffer overflow, just take the actual destination where we
are writing, if the offset is already out of bounds print an error and
return.  Otherwise, write up to buf->length bytes.

The Linux kernel CVE team has assigned CVE-2024-38621 to this issue.

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

	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 4.19.316 with commit f6a392266276
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 5.4.278 with commit ecf4ddc3aee8
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 5.10.219 with commit a16775828aae
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 5.15.161 with commit 7532bcec0797
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 6.1.93 with commit b504518a3970
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 6.6.33 with commit d410017a7181
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 6.9.4 with commit a08492832cc4
	Issue introduced in 3.7 with commit 9cb2173e6ea8 and fixed in 6.10 with commit faa4364bef2e

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-2024-38621
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/media/usb/stk1160/stk1160-video.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/f6a392266276730bea893b55d12940e32a25f56a
	https://git.kernel.org/stable/c/ecf4ddc3aee8ade504c4d36b7b4053ce6093e200
	https://git.kernel.org/stable/c/a16775828aaed1c54ff4e6fe83e8e4d5c6a50cb7
	https://git.kernel.org/stable/c/7532bcec0797adfa08791301c3bcae14141db3bd
	https://git.kernel.org/stable/c/b504518a397059e1d55c521ba0ea2b545a6c4b52
	https://git.kernel.org/stable/c/d410017a7181cb55e4a5c810b32b75e4416c6808
	https://git.kernel.org/stable/c/a08492832cc4cacc24e0612f483c86ca899b9261
	https://git.kernel.org/stable/c/faa4364bef2ec0060de381ff028d1d836600a381