projects
/
cascardo
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(from:
c6fe46a
)
cpufreq: fix overflow in cpufreq_table_find_index_dl()
author
Sergey Senozhatsky
<sergey.senozhatsky@gmail.com>
Mon, 17 Oct 2016 15:41:12 +0000
(
00:41
+0900)
committer
Rafael J. Wysocki
<rafael.j.wysocki@intel.com>
Thu, 20 Oct 2016 14:35:50 +0000
(16:35 +0200)
'best' is always less or equals to 'pos', so `best - pos' returns
a negative value which is then getting casted to `unsigned int'
and passed to __cpufreq_driver_target()->acpi_cpufreq_target()
for policy->freq_table selection. This results in
BUG: unable to handle kernel paging request at
ffff881019b469f8
IP: [<
ffffffffa00356c1
>] acpi_cpufreq_target+0x4f/0x190 [acpi_cpufreq]
PGD
267f067
PUD 0
Oops: 0000 [#1] PREEMPT SMP
CPU: 6 PID: 70 Comm: kworker/6:1 Not tainted 4.9.0-rc1-next-
20161017
-dbg-dirty
Workqueue: events dbs_work_handler
task:
ffff88041b808000
task.stack:
ffff88041b810000
RIP: 0010:[<
ffffffffa00356c1
>] [<
ffffffffa00356c1
>] acpi_cpufreq_target+0x4f/0x190 [acpi_cpufreq]
RSP: 0018:
ffff88041b813c60
EFLAGS:
00010282
RAX:
ffff880419b46a00
RBX:
ffff88041b848400
RCX:
ffff880419b20f80
RDX:
00000000001dff38
RSI:
00000000ffffffff
RDI:
ffff88041b848400
RBP:
ffff88041b813cb0
R08:
0000000000000006
R09:
0000000000000040
R10:
ffffffff8207f9e0
R11:
ffffffff8173595b
R12:
0000000000000000
R13:
ffff88041f1dff38
R14:
0000000000262900
R15:
0000000bfffffff4
FS:
0000000000000000
(0000) GS:
ffff88041f000000
(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
CR2:
ffff881019b469f8
CR3:
000000041a2d3000
CR4:
00000000001406e0
Stack:
ffff88041b813cb0
ffffffff813347f9
ffff88041b813ca0
ffffffff81334663
ffff88041f1d4bc0
ffff88041b848400
0000000000000000
0000000000000000
0000000000262900
0000000000000000
ffff88041b813d00
ffffffff813355dc
Call Trace:
[<
ffffffff813347f9
>] ? cpufreq_freq_transition_begin+0xf1/0xfc
[<
ffffffff81334663
>] ? get_cpu_idle_time+0x97/0xa6
[<
ffffffff813355dc
>] __cpufreq_driver_target+0x3b6/0x44e
[<
ffffffff81336ca3
>] cs_dbs_timer+0x11a/0x135
[<
ffffffff81336fda
>] dbs_work_handler+0x39/0x62
[<
ffffffff81057823
>] process_one_work+0x280/0x4a5
[<
ffffffff81058719
>] worker_thread+0x24f/0x397
[<
ffffffff810584ca
>] ? rescuer_thread+0x30b/0x30b
[<
ffffffff81418380
>] ? nl80211_get_key+0x29/0x36a
[<
ffffffff8105d2b7
>] kthread+0xfc/0x104
[<
ffffffff8107ceea
>] ? put_lock_stats.isra.9+0xe/0x20
[<
ffffffff8105d1bb
>] ? kthread_create_on_node+0x3f/0x3f
[<
ffffffff814b2092
>] ret_from_fork+0x22/0x30
Code: 56 4d 6b ff 0c 41 55 41 54 53 48 83 ec 28 48 8b 15 ad 1e 00 00 44 8b 41
08 48 8b 87 c8 00 00 00 49 89 d5 4e 03 2c c5 80 b2 78 81 <46> 8b 74 38 04 45
3b 75 00 75 11 31 c0 83 39 00 0f 84 1c 01 00
RIP [<
ffffffffa00356c1
>] acpi_cpufreq_target+0x4f/0x190 [acpi_cpufreq]
RSP <
ffff88041b813c60
>
CR2:
ffff881019b469f8
---[ end trace
16d9fc7a17897d37
]---
[ rjw: In some cases this bug may also cause incorrect frequencies to
be selected by cpufreq governors. ]
Fixes:
899bb6642f2a
(cpufreq: skip invalid entries when searching the frequency)
Link:
http://marc.info/?l=linux-kernel&m=147672030714331&w=2
Reported-and-tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Reported-and-tested-by: Jörg Otte <jrg.otte@gmail.com>
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Cc: 4.8+ <stable@vger.kernel.org> # 4.8+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
No differences found