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
| 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 |
| 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 |