CVE-2024-57889

Updated:

Description:

In the Linux kernel, the following vulnerability has been resolved: pinctrl: mcp23s08: Fix sleeping in atomic context due to regmap locking If a device uses MCP23xxx IO expander to receive IRQs, the following bug can happen: BUG: sleeping function called from invalid context at kernel/locking/mutex.c:283 in_atomic(): 1, irqs_disabled(): 1, non_block: 0, ... preempt_count: 1, expected: 0 ... Call Trace: ... __might_resched+0x104/0x10e __might_sleep+0x3e/0x62 mutex_lock+0x20/0x4c regmap_lock_mutex+0x10/0x18 regmap_update_bits_base+0x2c/0x66 mcp23s08_irq_set_type+0x1ae/0x1d6 __irq_set_trigger+0x56/0x172 __setup_irq+0x1e6/0x646 request_threaded_irq+0xb6/0x160 ... We observed the problem while experimenting with a touchscreen driver which used MCP23017 IO expander (I2C). The regmap in the pinctrl-mcp23s08 driver uses a mutex for protection from concurrent accesses, which is the default for regmaps without .fast_io, .disable_locking, etc. mcp23s08_irq_set_type() calls regmap_update_bits_base(), and the latter locks the mutex. However, __setup_irq() locks desc->lock spinlock before calling these functions. As a result, the system tries to lock the mutex whole holding the spinlock. It seems, the internal regmap locks are not needed in this driver at all. mcp->lock seems to protect the regmap from concurrent accesses already, except, probably, in mcp_pinconf_get/set. mcp23s08_irq_set_type() and mcp23s08_irq_mask/unmask() are called under chip_bus_lock(), which calls mcp23s08_irq_bus_lock(). The latter takes mcp->lock and enables regmap caching, so that the potentially slow I2C accesses are deferred until chip_bus_unlock(). The accesses to the regmap from mcp23s08_probe_one() do not need additional locking. In all remaining places where the regmap is accessed, except mcp_pinconf_get/set(), the driver already takes mcp->lock. This patch adds locking in mcp_pinconf_get/set() and disables internal locking in the regmap config. Among other things, it fixes the sleeping in atomic context described above.

CVSS3: 5.5


Vendor State

OS Vendor version Errata
Ubuntu 20.04 5.4.0-211.231 USN-7391-1
Debian 11 5.10.234-1 DLA-4075-1
Ubuntu 22.04 5.15.0-135.146 USN-7387-1
Ubuntu 22.04 AWS 5.15.0-1080.87 USN-7387-1
Ubuntu 22.04 Azure 5.15.0-1084.93 USN-7387-1
Debian 11 cloud 5.10.234-1 DLA-4075-1
Ubuntu 20.04 HWE AWS 5.15.0-1080.87~20.04.1 USN-7388-1
Ubuntu 20.04 HWE Azure 5.15.0-1086.95~20.04.1 USN-7421-1
Ubuntu 24.04 6.8.0-60.63 USN-7513-1
Ubuntu 24.04 AWS 6.8.0-1029.31 USN-7513-1

KernelCare State

OS Original kernel version State
Ubuntu 20.04
Planned
Ubuntu 18.04 AWS Focal
Planned
Debian 11
Planned
Ubuntu 22.04
5.15.0-27.28 show all hide all
5.15.0-33.34 5.15.0-37.39 5.15.0-39.42 5.15.0-25.25 5.15.0-28.29 5.15.0-29.30 5.15.0-30.31 5.15.0-41.44 5.15.0-43.46 5.15.0-46.49 5.15.0-35.36 5.15.0-47.51 5.15.0-48.54 5.15.0-40.43 5.15.0-50.56 5.15.0-52.58 5.15.0-53.59 5.15.0-56.62 5.15.0-54.60 5.15.0-57.63 5.15.0-58.64 5.15.0-60.66 5.15.0-67.74 5.15.0-69.76 5.15.0-70.77 5.15.0-71.78 5.15.0-72.79 5.15.0-68.75 5.15.0-73.80 5.15.0-75.82 5.15.0-76.83 5.15.0-78.85 5.15.0-79.86 5.15.0-82.91 5.15.0-83.92 5.15.0-84.93 5.15.0-86.96 5.15.0-74.81 5.15.0-87.97 5.15.0-88.98 5.15.0-89.99 5.15.0-91.101 5.15.0-92.102 5.15.0-94.104 5.15.0-97.107 5.15.0-100.110 5.15.0-101.111 5.15.0-102.112 5.15.0-105.115 5.15.0-106.116 5.15.0-107.117 5.15.0-112.122 5.15.0-113.123 5.15.0-116.126 5.15.0-117.127 5.15.0-118.128 5.15.0-119.129 5.15.0-121.131 5.15.0-122.132 5.15.0-124.134 5.15.0-125.135 5.15.0-127.137 5.15.0-130.140 5.15.0-126.136 5.15.0-131.141 5.15.0-128.138 5.15.0-133.144 5.15.0-134.145
Released
Ubuntu 22.04 AWS
5.15.0-1005.7 show all hide all
5.15.0-1008.10 5.15.0-1011.14 5.15.0-1013.17 5.15.0-1015.19 5.15.0-1017.21 5.15.0-1009.11 5.15.0-1020.24 5.15.0-1021.25 5.15.0-1022.26 5.15.0-1023.27 5.15.0-1026.30 5.15.0-1004.6 5.15.0-1014.18 5.15.0-1018.22 5.15.0-1024.29 5.15.0-1027.31 5.15.0-1028.32 5.15.0-1030.34 5.15.0-1031.35 5.15.0-1033.37 5.15.0-1034.38 5.15.0-1035.39 5.15.0-1036.40 5.15.0-1032.36 5.15.0-1037.41 5.15.0-1038.43 5.15.0-1039.44 5.15.0-1040.45 5.15.0-1042.47 5.15.0-1043.48 5.15.0-1044.49 5.15.0-1045.50 5.15.0-1047.52 5.15.0-1048.53 5.15.0-1049.54 5.15.0-1050.55 5.15.0-1051.56 5.15.0-1052.57 5.15.0-1053.58 5.15.0-1055.60 5.15.0-1056.61 5.15.0-1057.63 5.15.0-1060.66 5.15.0-1061.67 5.15.0-1062.68 5.15.0-1063.69 5.15.0-1064.70 5.15.0-1065.71 5.15.0-1066.72 5.15.0-1067.73 5.15.0-1068.74 5.15.0-1069.75 5.15.0-1070.76 5.15.0-1071.77 5.15.0-1072.78 5.15.0-1073.79 5.15.0-1076.83 5.15.0-1078.85 5.15.0-1079.86
Released
Ubuntu 22.04 Azure
5.15.0-1005.6 show all hide all
5.15.0-1007.8 5.15.0-1010.12 5.15.0-1012.15 5.15.0-1014.17 5.15.0-1017.20 5.15.0-1008.9 5.15.0-1019.24 5.15.0-1020.25 5.15.0-1021.26 5.15.0-1022.27 5.15.0-1003.4 5.15.0-1013.16 5.15.0-1023.29 5.15.0-1029.36 5.15.0-1024.30 5.15.0-1034.41 5.15.0-1035.42 5.15.0-1036.43 5.15.0-1037.44 5.15.0-1038.45 5.15.0-1039.46 5.15.0-1040.47 5.15.0-1041.48 5.15.0-1042.49 5.15.0-1045.52 5.15.0-1046.53 5.15.0-1047.54 5.15.0-1049.56 5.15.0-1044.51 5.15.0-1050.57 5.15.0-1051.59 5.15.0-1052.60 5.15.0-1053.61 5.15.0-1054.62 5.15.0-1056.64 5.15.0-1057.65 5.15.0-1058.66 5.15.0-1059.67 5.15.0-1060.69 5.15.0-1061.70 5.15.0-1063.72 5.15.0-1064.73 5.15.0-1066.75 5.15.0-1067.76 5.15.0-1068.77 5.15.0-1070.79 5.15.0-1071.80 5.15.0-1072.81 5.15.0-1073.82 5.15.0-1074.83 5.15.0-1075.84 5.15.0-1078.87 5.15.0-1079.88 5.15.0-1081.90 5.15.0-1082.91
Released
Debian 11 cloud
Planned
Ubuntu 20.04 HWE AWS
5.15.0-1026.30~20.04.2 show all hide all
5.15.0-1022.26~20.04.1 5.15.0-1023.27~20.04.1 5.15.0-1021.25~20.04.1 5.15.0-1020.24~20.04.1 5.15.0-1017.21~20.04.1 5.15.0-1019.23~20.04.1 5.15.0-1014.18~20.04.1 5.15.0-1015.19~20.04.1 5.15.0-1018.22~20.04.1 5.15.0-1027.31~20.04.1 5.15.0-1028.32~20.04.1 5.15.0-1030.34~20.04.1 5.15.0-1031.35~20.04.1 5.15.0-1033.37~20.04.1 5.15.0-1034.38~20.04.1 5.15.0-1035.39~20.04.1 5.15.0-1036.40~20.04.1 5.15.0-1037.41~20.04.1 5.15.0-1038.43~20.04.1 5.15.0-1039.44~20.04.1 5.15.0-1040.45~20.04.1 5.15.0-1041.46~20.04.1 5.15.0-1043.48~20.04.1 5.15.0-1044.49~20.04.1 5.15.0-1045.50~20.04.1 5.15.0-1047.52~20.04.1 5.15.0-1048.53~20.04.1 5.15.0-1049.54~20.04.1 5.15.0-1050.55~20.04.1 5.15.0-1051.56~20.04.1 5.15.0-1052.57~20.04.1 5.15.0-1053.58~20.04.1 5.15.0-1055.60~20.04.1 5.15.0-1056.61~20.04.1 5.15.0-1057.63~20.04.1 5.15.0-1058.64~20.04.1 5.15.0-1061.67~20.04.1 5.15.0-1062.68~20.04.1 5.15.0-1063.69~20.04.1 5.15.0-1064.70~20.04.1 5.15.0-1065.71~20.04.1 5.15.0-1066.72~20.04.1 5.15.0-1067.73~20.04.1 5.15.0-1068.74~20.04.1 5.15.0-1069.75~20.04.1 5.15.0-1070.76~20.04.1 5.15.0-1071.77~20.04.1 5.15.0-1072.78~20.04.1 5.15.0-1073.79~20.04.1 5.15.0-1075.82~20.04.1 5.15.0-1077.84~20.04.1
Released
Ubuntu 20.04 HWE Azure
5.15.0-1029.36~20.04.1 show all hide all
5.15.0-1022.27~20.04.1 5.15.0-1023.29~20.04.1 5.15.0-1021.26~20.04.1 5.15.0-1020.25~20.04.1 5.15.0-1017.20~20.04.1 5.15.0-1019.24~20.04.1 5.15.0-1008.9~20.04.1 5.15.0-1013.16~20.04.1 5.15.0-1014.17~20.04.1 5.15.0-1024.30~20.04.1 5.15.0-1034.41~20.04.1 5.15.0-1049.56~20.04.1 5.15.0-1050.57~20.04.1 5.15.0-1054.62~20.04.1 5.15.0-1056.64~20.04.1 5.15.0-1057.65~20.04.1 5.15.0-1058.66~20.04.2 5.15.0-1059.67~20.04.1 5.15.0-1060.69~20.04.1 5.15.0-1061.70~20.04.1 5.15.0-1063.72~20.04.1 5.15.0-1064.73~20.04.1 5.15.0-1067.76~20.04.1 5.15.0-1068.77~20.04.1 5.15.0-1065.74~20.04.1 5.15.0-1070.79~20.04.1 5.15.0-1071.80~20.04.1 5.15.0-1072.81~20.04.1 5.15.0-1073.82~20.04.1 5.15.0-1074.83~20.04.1 5.15.0-1075.84~20.04.1 5.15.0-1078.87~20.04.1 5.15.0-1079.88~20.04.1 5.15.0-1081.90~20.04.1 5.15.0-1082.91~20.04.1
Released
Debian 12
Planned
Ubuntu 24.04
Planned
Ubuntu 24.04 AWS
Planned