CVE-2022-49771
published 2025-05-01CVE-2022-49771: In the Linux kernel, the following vulnerability has been resolved: dm ioctl: fix misbehavior if list_versions races with module loading __list_versions will…
PriorityP420medium4.7CVSS 3.1
AVLACHPRLUINSUCNINAH
EPSS
0.15%
4.9th percentile
In the Linux kernel, the following vulnerability has been resolved:
dm ioctl: fix misbehavior if list_versions races with module loading
__list_versions will first estimate the required space using the
"dm_target_iterate(list_version_get_needed, &needed)" call and then will
fill the space using the "dm_target_iterate(list_version_get_info,
&iter_info)" call. Each of these calls locks the targets using the
"down_read(&_lock)" and "up_read(&_lock)" calls, however between the first
and second "dm_target_iterate" there is no lock held and the target
modules can be loaded at this point, so the second "dm_target_iterate"
call may need more space than what was the first "dm_target_iterate"
returned.
The code tries to handle this overflow (see the beginning of
list_version_get_info), however this handling is incorrect.
The code sets "param->data_size = param->data_start + needed" and
"iter_info.end = (char *)vers+len" - "needed" is the size returned by the
first dm_target_iterate call; "len" is the size of the buffer allocated by
userspace.
"len" may be greater than "needed"; in this case, the code will write up
to "len" bytes into the buffer, however param->data_size is set to
"needed", so it may write data past the param->data_size value. The ioctl
interface copies only up to param->data_size into userspace, thus part of
the result will be truncated.
Fix this bug by setting "iter_info.end = (char *)vers + needed;" - this
guarantees that the second "dm_target_iterate" call will write only up to
the "needed" buffer and it will exit with "DM_BUFFER_FULL_FLAG" if it
overflows the "needed" space - in this case, userspace will allocate a
larger buffer and retry.
Note that there is also a bug in list_version_get_needed - we need to add
"strlen(tt->name) + 1" to the needed size, not "strlen(tt->name)".
Affected
22 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| debian | linux | < linux 6.0.10-1 (bookworm) | linux 6.0.10-1 (bookworm) |
| linux | linux | — | — |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 0c8d4112df329bf3dfbf27693f918c3b08676538 | 0c8d4112df329bf3dfbf27693f918c3b08676538 |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 6a818db0d5aecf80d4ba9e10ac153f60adc629ca | 6a818db0d5aecf80d4ba9e10ac153f60adc629ca |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 3a1c35d72dc0b34d1e746ed705790c0f630aa427 | 3a1c35d72dc0b34d1e746ed705790c0f630aa427 |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < b545c0e1e4094d4de2bdfe9a3823f9154b0c0005 | b545c0e1e4094d4de2bdfe9a3823f9154b0c0005 |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < f59f5a269ca5e43c567aca7f1f52500a0186e9b7 | f59f5a269ca5e43c567aca7f1f52500a0186e9b7 |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 6ffce7a92ef5c68f7e5d6f4d722c2f96280c064b | 6ffce7a92ef5c68f7e5d6f4d722c2f96280c064b |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 5398b8e275bf81a2517b327d216c0f37ac9ac5ae | 5398b8e275bf81a2517b327d216c0f37ac9ac5ae |
| linux | linux | >= 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 < 4fe1ec995483737f3d2a14c3fe1d8fe634972979 | 4fe1ec995483737f3d2a14c3fe1d8fe634972979 |
| linux | linux_kernel | < 4.9.334 | 4.9.334 |
| linux | linux_kernel | — | — |
| linux | linux_kernel | >= 0 < 5.10.158-1 | 5.10.158-1 |
| linux | linux_kernel | >= 0 < 6.0.10-1 | 6.0.10-1 |
| linux | linux_kernel | >= 0 < 6.0.10-1 | 6.0.10-1 |
| linux | linux_kernel | >= 0 < 6.0.10-1 | 6.0.10-1 |
| linux | linux_kernel | >= 4.10 < 4.14.300 | 4.14.300 |
| linux | linux_kernel | >= 4.15 < 4.19.267 | 4.19.267 |
| linux | linux_kernel | >= 4.20 < 5.4.225 | 5.4.225 |
| linux | linux_kernel | >= 5.11 < 5.15.80 | 5.15.80 |
| linux | linux_kernel | >= 5.16 < 6.0.10 | 6.0.10 |
| linux | linux_kernel | >= 5.5 < 5.10.156 | 5.10.156 |
CVSS provenance
nvdv3.14.7MEDIUMCVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
osv4.7MEDIUM
vendor_debian4.7MEDIUM
vendor_redhat4.7MEDIUM
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
GHSA
GHSA-qp86-w2fg-h37h: In the Linux kernel, the following vulnerability has been resolved:
dm ioctl: fix misbehavior if list_versions races with module loading
__list_vers
ghsa_unreviewed·2025-05-01
CVE-2022-49771 [MEDIUM] CWE-362 GHSA-qp86-w2fg-h37h: In the Linux kernel, the following vulnerability has been resolved:
dm ioctl: fix misbehavior if list_versions races with module loading
__list_vers
In the Linux kernel, the following vulnerability has been resolved:
dm ioctl: fix misbehavior if list_versions races with module loading
__list_versions will first estimate the required space using the
"dm_target_iterate(list_version_get_needed, &needed)" call and then will
fill the space using the "dm_target_iterate(list_version_get_info,
&iter_info)" call. Each of these calls locks the targets using the
"down_read(&_lock)" and "up_read(&_lock)" calls, however between the first
and second "dm_target_iterate" there is no lock held and the target
modules can be loaded at this point, so the second "dm_target_iterate"
call may need more space than what was the first "dm_target_iterate"
returned.
The code tries to handle this overflow (see the beginning of
list_version_get_info), however th
OSV
CVE-2022-49771: In the Linux kernel, the following vulnerability has been resolved: dm ioctl: fix misbehavior if list_versions races with module loading __list_versio
osv·2025-05-01·CVSS 4.7
CVE-2022-49771 [MEDIUM] CVE-2022-49771: In the Linux kernel, the following vulnerability has been resolved: dm ioctl: fix misbehavior if list_versions races with module loading __list_versio
In the Linux kernel, the following vulnerability has been resolved: dm ioctl: fix misbehavior if list_versions races with module loading __list_versions will first estimate the required space using the "dm_target_iterate(list_version_get_needed, &needed)" call and then will fill the space using the "dm_target_iterate(list_version_get_info, &iter_info)" call. Each of these calls locks the targets using the "down_read(&_lock)" and "up_read(&_lock)" calls, however between the first and second "dm_target_iterate" there is no lock held and the target modules can be loaded at this point, so the second "dm_target_iterate" call may need more space than what was the first "dm_target_iterate" returned. The code tries to handle this overflow (see the beginning of list_version_get_info), however this
Red Hat
kernel: dm ioctl: fix misbehavior if list_versions races with module loading
vendor_redhat·2025-05-01·CVSS 4.7
CVE-2022-49771 [MEDIUM] kernel: dm ioctl: fix misbehavior if list_versions races with module loading
kernel: dm ioctl: fix misbehavior if list_versions races with module loading
In the Linux kernel, the following vulnerability has been resolved:
dm ioctl: fix misbehavior if list_versions races with module loading
__list_versions will first estimate the required space using the
"dm_target_iterate(list_version_get_needed, &needed)" call and then will
fill the space using the "dm_target_iterate(list_version_get_info,
&iter_info)" call. Each of these calls locks the targets using the
"down_read(&_lock)" and "up_read(&_lock)" calls, however between the first
and second "dm_target_iterate" there is no lock held and the target
modules can be loaded at this point, so the second "dm_target_iterate"
call may need more space than what was the first "dm_target_iterate"
returned.
The code tries to ha
Debian
CVE-2022-49771: linux - In the Linux kernel, the following vulnerability has been resolved: dm ioctl: f...
vendor_debian·2022·CVSS 4.7
CVE-2022-49771 [MEDIUM] CVE-2022-49771: linux - In the Linux kernel, the following vulnerability has been resolved: dm ioctl: f...
In the Linux kernel, the following vulnerability has been resolved: dm ioctl: fix misbehavior if list_versions races with module loading __list_versions will first estimate the required space using the "dm_target_iterate(list_version_get_needed, &needed)" call and then will fill the space using the "dm_target_iterate(list_version_get_info, &iter_info)" call. Each of these calls locks the targets using the "down_read(&_lock)" and "up_read(&_lock)" calls, however between the first and second "dm_target_iterate" there is no lock held and the target modules can be loaded at this point, so the second "dm_target_iterate" call may need more space than what was the first "dm_target_iterate" returned. The code tries to handle this overflow (see the beginning of list_version_get_info), however this
No detection rules found.
No public exploits indexed.
https://git.kernel.org/stable/c/0c8d4112df329bf3dfbf27693f918c3b08676538https://git.kernel.org/stable/c/3a1c35d72dc0b34d1e746ed705790c0f630aa427https://git.kernel.org/stable/c/4fe1ec995483737f3d2a14c3fe1d8fe634972979https://git.kernel.org/stable/c/5398b8e275bf81a2517b327d216c0f37ac9ac5aehttps://git.kernel.org/stable/c/6a818db0d5aecf80d4ba9e10ac153f60adc629cahttps://git.kernel.org/stable/c/6ffce7a92ef5c68f7e5d6f4d722c2f96280c064bhttps://git.kernel.org/stable/c/b545c0e1e4094d4de2bdfe9a3823f9154b0c0005https://git.kernel.org/stable/c/f59f5a269ca5e43c567aca7f1f52500a0186e9b7
2025-05-01
Published