Kees Cook
5bbf219328
drm/radeon: Fix off-by-one power_state index heap overwrite
An out of bounds write happens when setting the default power state.
KASAN sees this as:
[drm] radeon: 512M of GTT memory ready.
[drm] GART: num cpu pages 131072, num gpu pages 131072
==================================================================
BUG: KASAN: slab-out-of-bounds in
radeon_atombios_parse_power_table_1_3+0x1837/0x1998 [radeon]
Write of size 4 at addr ffff88810178d858 by task systemd-udevd/157
CPU: 0 PID: 157 Comm: systemd-udevd Not tainted 5.12.0-E620 #50
Hardware name: eMachines eMachines E620 /Nile , BIOS V1.03 09/30/2008
Call Trace:
dump_stack+0xa5/0xe6
print_address_description.constprop.0+0x18/0x239
kasan_report+0x170/0x1a8
radeon_atombios_parse_power_table_1_3+0x1837/0x1998 [radeon]
radeon_atombios_get_power_modes+0x144/0x1888 [radeon]
radeon_pm_init+0x1019/0x1904 [radeon]
rs690_init+0x76e/0x84a [radeon]
radeon_device_init+0x1c1a/0x21e5 [radeon]
radeon_driver_load_kms+0xf5/0x30b [radeon]
drm_dev_register+0x255/0x4a0 [drm]
radeon_pci_probe+0x246/0x2f6 [radeon]
pci_device_probe+0x1aa/0x294
really_probe+0x30e/0x850
driver_probe_device+0xe6/0x135
device_driver_attach+0xc1/0xf8
__driver_attach+0x13f/0x146
bus_for_each_dev+0xfa/0x146
bus_add_driver+0x2b3/0x447
driver_register+0x242/0x2c1
do_one_initcall+0x149/0x2fd
do_init_module+0x1ae/0x573
load_module+0x4dee/0x5cca
__do_sys_finit_module+0xf1/0x140
do_syscall_64+0x33/0x40
entry_SYSCALL_64_after_hwframe+0x44/0xae
Without KASAN, this will manifest later when the kernel attempts to
allocate memory that was stomped, since it collides with the inline slab
freelist pointer:
invalid opcode: 0000 [#1] SMP NOPTI
CPU: 0 PID: 781 Comm: openrc-run.sh Tainted: G W 5.10.12-gentoo-E620 #2
Hardware name: eMachines eMachines E620 /Nile , BIOS V1.03 09/30/2008
RIP: 0010:kfree+0x115/0x230
Code: 89 c5 e8 75 ea ff ff 48 8b 00 0f ba e0 09 72 63 e8 1f f4 ff ff 41 89 c4 48 8b 45 00 0f ba e0 10 72 0a 48 8b 45 08 a8 01 75 02 <0f> 0b 44 89 e1 48 c7 c2 00 f0 ff ff be 06 00 00 00 48 d3 e2 48 c7
RSP: 0018:ffffb42f40267e10 EFLAGS: 00010246
RAX: ffffd61280ee8d88 RBX: 0000000000000004 RCX: 000000008010000d
RDX: 4000000000000000 RSI: ffffffffba1360b0 RDI: ffffd61280ee8d80
RBP: ffffd61280ee8d80 R08: ffffffffb91bebdf R09: 0000000000000000
R10: ffff8fe2c1047ac8 R11: 0000000000000000 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000100
FS: 00007fe80eff6b68(0000) GS:ffff8fe339c00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fe80eec7bc0 CR3: 0000000038012000 CR4: 00000000000006f0
Call Trace:
__free_fdtable+0x16/0x1f
put_files_struct+0x81/0x9b
do_exit+0x433/0x94d
do_group_exit+0xa6/0xa6
__x64_sys_exit_group+0xf/0xf
do_syscall_64+0x33/0x40
entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x7fe80ef64bea
Code: Unable to access opcode bytes at RIP 0x7fe80ef64bc0.
RSP: 002b:00007ffdb1c47528 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007fe80ef64bea
RDX: 00007fe80ef64f60 RSI: 0000000000000000 RDI: 0000000000000000
RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
R10: 00007fe80ee2c620 R11: 0000000000000246 R12: 00007fe80eff41e0
R13: 00000000ffffffff R14: 0000000000000024 R15: 00007fe80edf9cd0
Modules linked in: radeon(+) ath5k(+) snd_hda_codec_realtek ...
Use a valid power_state index when initializing the "flags" and "misc"
and "misc2" fields.
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=211537
Reported-by: Erhard F. <erhard_f@mailbox.org>
Fixes: a48b9b4edb ("drm/radeon/kms/pm: add asic specific callbacks for getting power state (v2)")
Fixes: 79daedc942 ("drm/radeon/kms: minor pm cleanups")
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2021-05-04 17:37:49 -04:00
..
2021-05-04 17:35:52 -04:00
2021-04-01 13:48:48 +01:00
2021-02-25 08:05:28 +01:00
2021-02-23 08:54:22 +01:00
2021-02-25 08:05:28 +01:00
2021-02-25 08:05:28 +01:00
2021-01-06 15:42:55 +01:00
2021-04-23 13:53:07 +10:00
2021-04-13 23:15:09 +02:00
2021-04-13 23:15:09 +02:00
2021-02-25 08:05:28 +01:00
2021-04-08 13:19:56 +02:00
2021-03-23 10:32:14 +01:00
2021-02-25 08:05:28 +01:00
2021-04-13 23:15:09 +02:00
2021-04-13 23:15:09 +02:00
2021-03-29 16:47:12 +01:00
2021-02-25 08:05:28 +01:00
2021-02-10 15:26:00 +01:00
2021-03-04 14:31:06 +01:00
2021-04-08 12:42:14 +10:00
2021-03-19 10:40:54 +01:00
2021-01-18 15:41:12 +01:00
2021-02-08 13:00:26 +01:00
2021-04-13 23:35:54 +02:00
2021-02-25 08:05:28 +01:00
2021-04-13 23:15:09 +02:00
2021-04-13 23:15:09 +02:00
2021-04-13 23:15:09 +02:00
2021-02-15 09:43:33 +01:00
2021-03-16 17:08:46 +10:00
2021-03-24 17:05:25 +01:00
2021-01-18 15:41:04 +01:00
2021-05-04 17:37:49 -04:00
2021-04-13 23:15:09 +02:00
2021-03-24 09:31:22 +01:00
2020-11-12 20:31:01 +01:00
2021-04-09 16:45:45 -04:00
2020-11-17 20:08:29 +01:00
2020-11-06 10:31:26 +01:00
2021-02-25 08:05:28 +01:00
2021-03-08 15:06:56 +01:00
2021-03-16 17:08:46 +10:00
2021-01-05 07:20:36 +02:00
2021-04-13 23:15:09 +02:00
2021-02-25 08:05:28 +01:00
2021-03-24 12:05:28 +02:00
2021-03-16 17:08:46 +10:00
2021-04-23 13:53:07 +10:00
2021-02-23 08:54:22 +01:00
2021-03-16 17:08:46 +10:00
2021-02-10 15:26:00 +01:00
2021-03-11 14:19:43 +01:00
2021-04-13 23:15:09 +02:00
2020-11-30 15:00:45 +01:00
2020-11-27 16:14:02 +01:00
2021-03-09 12:06:18 +01:00
2021-03-25 08:23:28 -03:00
2021-03-24 17:05:14 +01:00
2021-04-13 23:15:09 +02:00
2021-04-08 12:52:10 +02:00
2021-02-25 08:05:28 +01:00
2021-01-19 09:06:38 +01:00
2021-03-26 11:46:33 +01:00
2020-11-16 20:48:20 +01:00
2020-11-16 09:56:55 +01:00
2021-04-09 16:42:09 -04:00
2020-12-17 16:56:40 +01:00
2020-11-02 14:04:53 +01:00
2021-01-19 09:06:38 +01:00
2021-01-14 09:42:31 +01:00
2021-02-09 17:16:57 +01:00
2020-11-24 09:27:54 +01:00
2020-12-15 15:46:03 +02:00
2021-03-16 12:45:28 +01:00
2021-02-08 12:20:38 +01:00
2020-10-21 12:19:54 +03:00
2021-02-17 12:52:59 +01:00
2021-03-31 15:42:39 +03:00
2020-10-15 13:58:54 -04:00
2021-03-31 12:21:06 +03:00
2021-04-08 17:47:26 -04:00
2021-02-21 19:49:17 -05:00
2020-12-10 10:49:47 +02:00
2021-01-05 07:20:25 +02:00
2021-03-31 15:42:02 +03:00
2021-01-04 12:59:33 +01:00
2021-03-11 11:08:14 +01:00
2021-02-24 21:05:54 +05:30
2020-10-20 20:51:42 +01:00
2021-02-17 12:52:59 +01:00
2021-02-23 08:54:22 +01:00
2020-11-30 13:38:27 +01:00
2021-02-23 08:54:22 +01:00
2021-03-11 11:11:33 +01:00
2020-11-09 09:17:36 +01:00
2021-03-16 17:08:46 +10:00
2021-02-08 13:00:06 +01:00
2021-04-08 13:05:38 +02:00
2021-03-11 11:11:33 +01:00
2020-10-21 18:05:11 +02:00
2021-01-19 09:06:38 +01:00
2021-02-08 12:20:38 +01:00
2021-01-13 14:22:37 +01:00
2020-09-21 10:45:08 +02:00
2021-01-13 14:22:29 +01:00
2021-02-17 12:52:59 +01:00
2021-01-07 13:40:20 +01:00
2020-11-16 20:48:20 +01:00
2021-04-01 20:29:16 +03:00
2021-01-20 22:33:01 +01:00
2021-01-19 09:06:38 +01:00
2021-03-16 17:08:46 +10:00
2021-01-18 10:37:26 +01:00
2021-03-16 12:45:52 +01:00
2021-03-18 14:22:50 +01:00
2020-11-16 20:48:20 +01:00
2021-02-25 08:05:28 +01:00
2021-04-08 12:21:13 +02:00
2021-03-23 07:41:39 -04:00
2021-04-01 20:29:17 +03:00
2021-01-19 09:06:38 +01:00
2021-03-23 23:25:21 -04:00
2021-03-31 15:41:35 +03:00