Revision 90e362f4a75d0911ca75e5cd95591a6cf1f169dc authored by Thomas Gleixner on 23 November 2014, 22:04:52 UTC, committed by Linus Torvalds on 23 November 2014, 22:14:40 UTC
Chris bisected a NULL pointer deference in task_sched_runtime() to commit 6e998916dfe3 'sched/cputime: Fix clock_nanosleep()/clock_gettime() inconsistency'. Chris observed crashes in atop or other /proc walking programs when he started fork bombs on his machine. He assumed that this is a new exit race, but that does not make any sense when looking at that commit. What's interesting is that, the commit provides update_curr callbacks for all scheduling classes except stop_task and idle_task. While nothing can ever hit that via the clock_nanosleep() and clock_gettime() interfaces, which have been the target of the commit in question, the author obviously forgot that there are other code paths which invoke task_sched_runtime() do_task_stat(() thread_group_cputime_adjusted() thread_group_cputime() task_cputime() task_sched_runtime() if (task_current(rq, p) && task_on_rq_queued(p)) { update_rq_clock(rq); up->sched_class->update_curr(rq); } If the stats are read for a stomp machine task, aka 'migration/N' and that task is current on its cpu, this will happily call the NULL pointer of stop_task->update_curr. Ooops. Chris observation that this happens faster when he runs the fork bomb makes sense as the fork bomb will kick migration threads more often so the probability to hit the issue will increase. Add the missing update_curr callbacks to the scheduler classes stop_task and idle_task. While idle tasks cannot be monitored via /proc we have other means to hit the idle case. Fixes: 6e998916dfe3 'sched/cputime: Fix clock_nanosleep()/clock_gettime() inconsistency' Reported-by: Chris Mason <clm@fb.com> Reported-and-tested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Cc: Stanislaw Gruszka <sgruszka@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 00c89b2
File | Mode | Size |
---|---|---|
fonts | ||
lz4 | ||
lzo | ||
mpi | ||
raid6 | ||
reed_solomon | ||
xz | ||
zlib_deflate | ||
zlib_inflate | ||
.gitignore | -rw-r--r-- | 70 bytes |
Kconfig | -rw-r--r-- | 11.7 KB |
Kconfig.debug | -rw-r--r-- | 57.9 KB |
Kconfig.kgdb | -rw-r--r-- | 3.1 KB |
Kconfig.kmemcheck | -rw-r--r-- | 2.9 KB |
Makefile | -rw-r--r-- | 6.0 KB |
argv_split.c | -rw-r--r-- | 2.1 KB |
asn1_decoder.c | -rw-r--r-- | 12.4 KB |
assoc_array.c | -rw-r--r-- | 52.6 KB |
atomic64.c | -rw-r--r-- | 4.1 KB |
atomic64_test.c | -rw-r--r-- | 3.4 KB |
audit.c | -rw-r--r-- | 1.7 KB |
average.c | -rw-r--r-- | 1.9 KB |
bcd.c | -rw-r--r-- | 261 bytes |
bch.c | -rw-r--r-- | 35.6 KB |
bitmap.c | -rw-r--r-- | 35.2 KB |
bitrev.c | -rw-r--r-- | 2.1 KB |
bsearch.c | -rw-r--r-- | 1.6 KB |
btree.c | -rw-r--r-- | 19.3 KB |
bug.c | -rw-r--r-- | 4.7 KB |
build_OID_registry | -rwxr-xr-x | 4.7 KB |
bust_spinlocks.c | -rw-r--r-- | 660 bytes |
check_signature.c | -rw-r--r-- | 599 bytes |
checksum.c | -rw-r--r-- | 4.9 KB |
clz_ctz.c | -rw-r--r-- | 1.3 KB |
clz_tab.c | -rw-r--r-- | 855 bytes |
cmdline.c | -rw-r--r-- | 4.1 KB |
compat_audit.c | -rw-r--r-- | 796 bytes |
cordic.c | -rw-r--r-- | 2.5 KB |
cpu-notifier-error-inject.c | -rw-r--r-- | 1.2 KB |
cpu_rmap.c | -rw-r--r-- | 7.8 KB |
cpumask.c | -rw-r--r-- | 5.8 KB |
crc-ccitt.c | -rw-r--r-- | 3.0 KB |
crc-itu-t.c | -rw-r--r-- | 2.8 KB |
crc-t10dif.c | -rw-r--r-- | 1.5 KB |
crc16.c | -rw-r--r-- | 2.8 KB |
crc32.c | -rw-r--r-- | 45.4 KB |
crc32defs.h | -rw-r--r-- | 2.0 KB |
crc7.c | -rw-r--r-- | 2.6 KB |
crc8.c | -rw-r--r-- | 2.4 KB |
ctype.c | -rw-r--r-- | 1.4 KB |
debug_locks.c | -rw-r--r-- | 1.2 KB |
debugobjects.c | -rw-r--r-- | 26.1 KB |
dec_and_lock.c | -rw-r--r-- | 784 bytes |
decompress.c | -rw-r--r-- | 1.6 KB |
decompress_bunzip2.c | -rw-r--r-- | 23.4 KB |
decompress_inflate.c | -rw-r--r-- | 3.8 KB |
decompress_unlz4.c | -rw-r--r-- | 4.1 KB |
decompress_unlzma.c | -rw-r--r-- | 15.8 KB |
decompress_unlzo.c | -rw-r--r-- | 6.8 KB |
decompress_unxz.c | -rw-r--r-- | 10.6 KB |
devres.c | -rw-r--r-- | 9.4 KB |
digsig.c | -rw-r--r-- | 5.5 KB |
div64.c | -rw-r--r-- | 4.0 KB |
dma-debug.c | -rw-r--r-- | 41.4 KB |
dump_stack.c | -rw-r--r-- | 1.1 KB |
dynamic_debug.c | -rw-r--r-- | 25.1 KB |
dynamic_queue_limits.c | -rw-r--r-- | 4.3 KB |
earlycpio.c | -rw-r--r-- | 3.9 KB |
extable.c | -rw-r--r-- | 2.4 KB |
fault-inject.c | -rw-r--r-- | 5.5 KB |
fdt.c | -rw-r--r-- | 69 bytes |
fdt_empty_tree.c | -rw-r--r-- | 80 bytes |
fdt_ro.c | -rw-r--r-- | 72 bytes |
fdt_rw.c | -rw-r--r-- | 72 bytes |
fdt_strerror.c | -rw-r--r-- | 78 bytes |
fdt_sw.c | -rw-r--r-- | 72 bytes |
fdt_wip.c | -rw-r--r-- | 73 bytes |
find_last_bit.c | -rw-r--r-- | 1.1 KB |
find_next_bit.c | -rw-r--r-- | 6.4 KB |
flex_array.c | -rw-r--r-- | 11.0 KB |
flex_proportions.c | -rw-r--r-- | 6.9 KB |
gcd.c | -rw-r--r-- | 313 bytes |
gen_crc32table.c | -rw-r--r-- | 3.2 KB |
genalloc.c | -rw-r--r-- | 17.7 KB |
glob.c | -rw-r--r-- | 7.7 KB |
halfmd4.c | -rw-r--r-- | 2.0 KB |
hash.c | -rw-r--r-- | 1.0 KB |
hexdump.c | -rw-r--r-- | 7.5 KB |
hweight.c | -rw-r--r-- | 1.9 KB |
idr.c | -rw-r--r-- | 28.0 KB |
inflate.c | -rw-r--r-- | 38.6 KB |
int_sqrt.c | -rw-r--r-- | 652 bytes |
interval_tree.c | -rw-r--r-- | 495 bytes |
interval_tree_test.c | -rw-r--r-- | 2.3 KB |
iomap.c | -rw-r--r-- | 6.5 KB |
iomap_copy.c | -rw-r--r-- | 2.1 KB |
iommu-helper.c | -rw-r--r-- | 1.0 KB |
ioremap.c | -rw-r--r-- | 2.1 KB |
iovec.c | -rw-r--r-- | 2.2 KB |
irq_regs.c | -rw-r--r-- | 604 bytes |
is_single_threaded.c | -rw-r--r-- | 1.3 KB |
jedec_ddr_data.c | -rw-r--r-- | 3.0 KB |
kasprintf.c | -rw-r--r-- | 717 bytes |
kfifo.c | -rw-r--r-- | 12.7 KB |
klist.c | -rw-r--r-- | 9.3 KB |
kobject.c | -rw-r--r-- | 25.5 KB |
kobject_uevent.c | -rw-r--r-- | 11.4 KB |
kstrtox.c | -rw-r--r-- | 9.4 KB |
kstrtox.h | -rw-r--r-- | 254 bytes |
lcm.c | -rw-r--r-- | 288 bytes |
libcrc32c.c | -rw-r--r-- | 2.0 KB |
list_debug.c | -rw-r--r-- | 2.6 KB |
list_sort.c | -rw-r--r-- | 6.7 KB |
llist.c | -rw-r--r-- | 3.1 KB |
locking-selftest-hardirq.h | -rw-r--r-- | 207 bytes |
locking-selftest-mutex.h | -rw-r--r-- | 120 bytes |
locking-selftest-rlock-hardirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-rlock-softirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-rlock.h | -rw-r--r-- | 158 bytes |
locking-selftest-rsem.h | -rw-r--r-- | 163 bytes |
locking-selftest-softirq.h | -rw-r--r-- | 207 bytes |
locking-selftest-spin-hardirq.h | -rw-r--r-- | 73 bytes |
locking-selftest-spin-softirq.h | -rw-r--r-- | 73 bytes |
locking-selftest-spin.h | -rw-r--r-- | 118 bytes |
locking-selftest-wlock-hardirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-wlock-softirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-wlock.h | -rw-r--r-- | 158 bytes |
locking-selftest-wsem.h | -rw-r--r-- | 163 bytes |
locking-selftest.c | -rw-r--r-- | 40.1 KB |
lockref.c | -rw-r--r-- | 3.6 KB |
lru_cache.c | -rw-r--r-- | 19.4 KB |
md5.c | -rw-r--r-- | 3.7 KB |
memory-notifier-error-inject.c | -rw-r--r-- | 1.1 KB |
memweight.c | -rw-r--r-- | 999 bytes |
net_utils.c | -rw-r--r-- | 604 bytes |
nlattr.c | -rw-r--r-- | 12.5 KB |
notifier-error-inject.c | -rw-r--r-- | 2.7 KB |
notifier-error-inject.h | -rw-r--r-- | 614 bytes |
of-reconfig-notifier-error-inject.c | -rw-r--r-- | 1.3 KB |
oid_registry.c | -rw-r--r-- | 3.8 KB |
parser.c | -rw-r--r-- | 7.1 KB |
pci_iomap.c | -rw-r--r-- | 1.4 KB |
percpu-refcount.c | -rw-r--r-- | 11.7 KB |
percpu_counter.c | -rw-r--r-- | 5.5 KB |
percpu_ida.c | -rw-r--r-- | 9.6 KB |
percpu_test.c | -rw-r--r-- | 3.2 KB |
plist.c | -rw-r--r-- | 5.9 KB |
pm-notifier-error-inject.c | -rw-r--r-- | 1.1 KB |
proportions.c | -rw-r--r-- | 9.4 KB |
radix-tree.c | -rw-r--r-- | 39.3 KB |
random32.c | -rw-r--r-- | 12.6 KB |
ratelimit.c | -rw-r--r-- | 1.5 KB |
rational.c | -rw-r--r-- | 1.5 KB |
rbtree.c | -rw-r--r-- | 15.0 KB |
rbtree_test.c | -rw-r--r-- | 5.5 KB |
reciprocal_div.c | -rw-r--r-- | 492 bytes |
rhashtable.c | -rw-r--r-- | 20.3 KB |
scatterlist.c | -rw-r--r-- | 18.2 KB |
sha1.c | -rw-r--r-- | 6.1 KB |
show_mem.c | -rw-r--r-- | 1.2 KB |
smp_processor_id.c | -rw-r--r-- | 1.3 KB |
sort.c | -rw-r--r-- | 2.5 KB |
stmp_device.c | -rw-r--r-- | 2.1 KB |
string.c | -rw-r--r-- | 17.0 KB |
string_helpers.c | -rw-r--r-- | 10.0 KB |
strncpy_from_user.c | -rw-r--r-- | 2.9 KB |
strnlen_user.c | -rw-r--r-- | 3.6 KB |
swiotlb.c | -rw-r--r-- | 27.1 KB |
syscall.c | -rw-r--r-- | 2.4 KB |
test-kstrtox.c | -rw-r--r-- | 17.4 KB |
test-string_helpers.c | -rw-r--r-- | 8.0 KB |
test_bpf.c | -rw-r--r-- | 55.4 KB |
test_firmware.c | -rw-r--r-- | 2.8 KB |
test_module.c | -rw-r--r-- | 753 bytes |
test_user_copy.c | -rw-r--r-- | 3.1 KB |
textsearch.c | -rw-r--r-- | 9.4 KB |
timerqueue.c | -rw-r--r-- | 3.1 KB |
ts_bm.c | -rw-r--r-- | 5.3 KB |
ts_fsm.c | -rw-r--r-- | 10.6 KB |
ts_kmp.c | -rw-r--r-- | 4.3 KB |
ucs2_string.c | -rw-r--r-- | 1.2 KB |
usercopy.c | -rw-r--r-- | 197 bytes |
uuid.c | -rw-r--r-- | 1.3 KB |
vsprintf.c | -rw-r--r-- | 60.0 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...