Joel Fernandes (Google)
af1070fbf2
UPSTREAM: pidfd: add polling support
...
This patch adds polling support to pidfd.
Android low memory killer (LMK) needs to know when a process dies once
it is sent the kill signal. It does so by checking for the existence of
/proc/pid which is both racy and slow. For example, if a PID is reused
between when LMK sends a kill signal and checks for existence of the
PID, since the wrong PID is now possibly checked for existence.
Using the polling support, LMK will be able to get notified when a process
exists in race-free and fast way, and allows the LMK to do other things
(such as by polling on other fds) while awaiting the process being killed
to die.
For notification to polling processes, we follow the same existing
mechanism in the kernel used when the parent of the task group is to be
notified of a child's death (do_notify_parent). This is precisely when the
tasks waiting on a poll of pidfd are also awakened in this patch.
We have decided to include the waitqueue in struct pid for the following
reasons:
1. The wait queue has to survive for the lifetime of the poll. Including
it in task_struct would not be option in this case because the task can
be reaped and destroyed before the poll returns.
2. By including the struct pid for the waitqueue means that during
de_thread(), the new thread group leader automatically gets the new
waitqueue/pid even though its task_struct is different.
Appropriate test cases are added in the second patch to provide coverage of
all the cases the patch is handling.
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Daniel Colascione <dancol@google.com>
Cc: Jann Horn <jannh@google.com>
Cc: Tim Murray <timmurray@google.com>
Cc: Jonathan Kowalski <bl0pbl33p@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Kees Cook <keescook@chromium.org>
Cc: David Howells <dhowells@redhat.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: kernel-team@android.com
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Co-developed-by: Daniel Colascione <dancol@google.com>
Signed-off-by: Daniel Colascione <dancol@google.com>
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Christian Brauner <christian@brauner.io>
(cherry picked from commit b53b0b9d9a613c418057f6cb921c2f40a6f78c24)
Bug: 135608568
Test: test program using syscall(__NR_sys_pidfd_open,..) and poll()
Change-Id: I02f259d2875bec46b198d580edfbb067f077084e
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
2019-09-03 13:45:29 -07:00
..
bpf
This is the 4.9.190 stable release
2019-08-25 14:53:01 +02:00
configs
ANDROID: add script to fetch android kernel config fragments
2017-10-03 17:19:26 +00:00
debug
UPSTREAM: sched: loadavg: consolidate LOAD_INT, LOAD_FRAC, CALC_LOAD
2019-03-22 14:08:50 -07:00
events
This is the 4.9.190 stable release
2019-08-25 14:53:01 +02:00
gcov
gcov: support GCC 7.1
2017-09-02 07:07:53 +02:00
irq
genirq: Prevent use-after-free and work list corruption
2019-05-10 17:52:10 +02:00
livepatch
livepatch/module: make TAINT_LIVEPATCH module-specific
2016-08-26 14:42:08 +02:00
locking
locking/lockdep: Hide unused 'class' variable
2019-08-04 09:33:42 +02:00
power
This is the 4.9.181 stable release
2019-06-11 14:39:40 +02:00
printk
This is the 4.9.137 stable release
2018-11-23 11:11:43 +01:00
rcu
rcuperf: Fix cleanup path for invalid perf_type strings
2019-05-31 06:48:30 -07:00
sched
This is the 4.9.187 stable release
2019-08-04 09:50:32 +02:00
time
This is the 4.9.187 stable release
2019-08-04 09:50:32 +02:00
trace
This is the 4.9.188 stable release
2019-08-06 18:45:16 +02:00
.gitignore
acct.c
kernel/acct.c: fix the acct->needcheck check in check_free_space()
2018-01-10 09:29:51 +01:00
async.c
kernel/async.c: revert "async: simplify lowest_in_progress()"
2018-02-17 13:21:18 +01:00
audit.c
audit: return on memory error to avoid null pointer dereference
2018-05-30 07:50:49 +02:00
audit.h
Merge branch 'stable-4.8' of git://git.infradead.org/users/pcmoore/audit
2016-07-29 17:54:17 -07:00
audit_fsnotify.c
audit_tree.c
audit_watch.c
audit: fix use-after-free in audit_add_watch
2018-09-26 08:36:37 +02:00
auditfilter.c
audit: fix a memory leak bug
2019-05-31 06:48:20 -07:00
auditsc.c
audit: allow not equal op for audit by executable
2018-08-03 07:55:25 +02:00
backtracetest.c
bounds.c
kbuild: fix kernel/bounds.c 'W=1' warning
2018-11-13 11:16:57 -08:00
capability.c
ptrace: Capture the ptracer's creds not PT_PTRACE_CAP
2017-01-06 10:40:13 +01:00
cfi.c
ANDROID: cfi: Remove unused variable in ptr_to_check_fn
2019-03-06 18:27:16 +00:00
cgroup.c
FROMLIST: psi: introduce psi monitor
2019-03-23 00:29:15 +00:00
cgroup_freezer.c
cgroup_pids.c
cgroup/pids: remove spurious suspicious RCU usage warning
2017-03-26 13:05:58 +02:00
compat.c
configs.c
context_tracking.c
cpu.c
This is the 4.9.185 stable release
2019-07-10 12:32:12 +02:00
cpu_pm.c
cpuset.c
This is the 4.9.55 stable release
2017-10-12 22:31:24 +02:00
crash_dump.c
cred.c
access: avoid the RCU grace period for the temporary subjective credentials
2019-08-04 09:33:43 +02:00
delayacct.c
BACKPORT: delayacct: track delays from thrashing cache pages
2019-03-22 14:08:39 -07:00
dma.c
elfcore.c
exec_domain.c
exit.c
This is the 4.9.155 stable release
2019-02-07 09:14:43 +01:00
extable.c
kernel/extable.c: mark core_kernel_text notrace
2017-07-21 07:42:21 +02:00
fork.c
UPSTREAM: pidfd: add polling support
2019-09-03 13:45:29 -07:00
freezer.c
freezer, oom: check TIF_MEMDIE on the correct task
2016-07-28 16:07:41 -07:00
futex.c
futex: Ensure that futex address is aligned in handle_futex_death()
2019-03-27 14:13:03 +09:00
futex_compat.c
groups.c
kernel: make groups_sort calling a responsibility group_info allocators
2018-01-10 09:29:52 +01:00
hung_task.c
kernel: hung_task.c: disable on suspend
2019-04-20 09:07:52 +02:00
irq_work.c
jump_label.c
jump_label: Invoke jump_label_test() via early_initcall()
2017-12-14 09:28:24 +01:00
kallsyms.c
kallsyms: strip the .cfi postfix from symbols with CONFIG_CFI_CLANG
2018-02-28 15:09:58 -08:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kcov.c
This is the 4.9.117 stable release
2018-08-03 08:50:05 +02:00
kexec.c
kexec: allow architectures to override boot mapping
2016-08-02 19:35:27 -04:00
kexec_core.c
objtool, x86: Add several functions and files to the objtool whitelist
2018-06-05 10:28:57 +02:00
kexec_file.c
kexec: fix double-free when failing to relocate the purgatory
2016-09-01 17:52:01 -07:00
kexec_internal.h
kmod.c
kprobes.c
kprobes: Fix error check when reusing optimized probes
2019-04-27 09:34:45 +02:00
ksysfs.c
kexec: add a kexec_crash_loaded() function
2016-08-02 19:35:30 -04:00
kthread.c
kthread, tracing: Don't expose half-written comm when creating kthreads
2018-08-03 07:55:12 +02:00
latencytop.c
Makefile
This is the 4.9.183 stable release
2019-06-22 08:56:18 +02:00
membarrier.c
Fix: Disable sys_membarrier when nohz_full is enabled
2017-03-12 06:41:45 +01:00
memremap.c
mm, devm_memremap_pages: kill mapping "System RAM" support
2019-01-13 10:03:51 +01:00
module-internal.h
module.c
This is the 4.9.188 stable release
2019-08-06 18:45:16 +02:00
module_signing.c
notifier.c
nsproxy.c
padata.c
padata: use smp_mb in padata_reorder to avoid orphaned padata jobs
2019-08-04 09:33:28 +02:00
panic.c
UPSTREAM: bug: use %pB in BUG and stack protector failure
2019-03-28 21:13:06 -07:00
params.c
pid.c
UPSTREAM: pidfd: add polling support
2019-09-03 13:45:29 -07:00
pid_namespace.c
signal/pid_namespace: Fix reboot_pid_ns to use send_sig not force_sig
2019-08-04 09:33:16 +02:00
profile.c
profile: Convert to hotplug state machine
2016-07-15 10:41:42 +02:00
ptrace.c
ptrace: Fix ->ptracer_cred handling for PTRACE_TRACEME
2019-07-10 09:55:45 +02:00
range.c
reboot.c
relay.c
kernel/relay.c: limit kmalloc size to KMALLOC_MAX_SIZE
2018-05-30 07:50:29 +02:00
resource.c
resource: fix integer overflow at reallocation
2018-04-24 09:34:09 +02:00
seccomp.c
seccomp: Move speculation migitation control to arch code
2018-05-22 16:58:02 +02:00
signal.c
UPSTREAM: pidfd: add polling support
2019-09-03 13:45:29 -07:00
smp.c
cpu/hotplug: Fix SMT supported evaluation
2018-08-15 18:14:53 +02:00
smpboot.c
kthread/smpboot: do not park in kthread_create_on_cpu()
2016-10-11 15:06:33 -07:00
smpboot.h
softirq.c
Mark HI and TASKLET softirq synchronous
2018-08-15 18:14:42 +02:00
stacktrace.c
stacktrace, lockdep: Fix address, newline ugliness
2017-02-14 15:25:42 -08:00
stop_machine.c
stop_machine: Use raw spinlocks
2018-08-03 07:55:24 +02:00
sys.c
This is the 4.9.183 stable release
2019-06-22 08:56:18 +02:00
sys_ni.c
BACKPORT: signal: support CLONE_PIDFD with pidfd_send_signal
2019-09-03 13:44:59 -07:00
sysctl.c
This is the 4.9.183 stable release
2019-06-22 08:56:18 +02:00
sysctl_binary.c
task_work.c
task_work: use READ_ONCE/lockless_dereference, avoid pi_lock if !task_works
2016-08-02 19:35:02 -04:00
taskstats.c
taskstats: fix the length of cgroupstats_cmd_get_policy
2016-11-03 16:55:58 -04:00
test_kprobes.c
torture.c
torture: Convert torture_shutdown() to hrtimer
2016-08-22 10:01:49 -07:00
tracepoint.c
tracepoint: Do not warn on ENOMEM
2018-05-09 09:50:20 +02:00
tsacct.c
ucount.c
kernel/ucount.c: mark user_header with kmemleak_ignore()
2017-06-17 06:41:51 +02:00
uid16.c
kernel: make groups_sort calling a responsibility group_info allocators
2018-01-10 09:29:52 +01:00
up.c
smp: Add function to execute a function synchronously on a CPU
2016-09-05 13:52:39 +02:00
user-return-notifier.c
user.c
ANDROID: proc: Add /proc/uid directory
2018-04-03 11:15:30 -07:00
user_namespace.c
userns: move user access out of the mutex
2018-09-09 20:01:24 +02:00
utsname.c
Merge branch 'nsfs-ioctls' into HEAD
2016-09-22 20:00:36 -05:00
utsname_sysctl.c
sys: don't hold uts_sem while accessing userspace memory
2018-09-09 20:01:24 +02:00
watchdog.c
Revert "ANDROID: hardlockup: detect hard lockups without NMIs using secondary cpus"
2017-06-27 10:31:16 +02:00
watchdog_hld.c
kernel/watchdog: prevent false hardlockup on overloaded system
2017-06-17 06:41:57 +02:00
workqueue.c
UPSTREAM: psi: fix aggregation idle shut-off
2019-03-22 14:15:01 -07:00
workqueue_internal.h
UPSTREAM: psi: fix aggregation idle shut-off
2019-03-22 14:15:01 -07:00