)]}'
{
  "log": [
    {
      "commit": "6b550f9495947fc279d12c38feaf98500e8d0646",
      "tree": "ab018bd7e2f8c2c594252f35ffa7c413f86519cf",
      "parents": [
        "b196be89cdc14a88cc637cdad845a75c5886c82d"
      ],
      "author": {
        "name": "Serge E. Hallyn",
        "email": "serge@hallyn.com",
        "time": "Tue Jan 10 15:11:37 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:54 2012 -0800"
      },
      "message": "user namespace: make signal.c respect user namespaces\n\nipc/mqueue.c: for __SI_MESQ, convert the uid being sent to recipient\u0027s\nuser namespace. (new, thanks Oleg)\n\n__send_signal: convert current\u0027s uid to the recipient\u0027s user namespace\nfor any siginfo which is not SI_FROMKERNEL (patch from Oleg, thanks\nagain :)\n\ndo_notify_parent and do_notify_parent_cldstop: map task\u0027s uid to parent\u0027s\nuser namespace\n\nptrace_signal maps parent\u0027s uid into current\u0027s user namespace before\nincluding in signal to current.  IIUC Oleg has argued that this shouldn\u0027t\nmatter as the debugger will play with it, but it seems like not converting\nthe value currently being set is misleading.\n\nChangelog:\nSep 20: Inspired by Oleg\u0027s suggestion, define map_cred_ns() helper to\n\tsimplify callers and help make clear what we are translating\n        (which uid into which namespace).  Passing the target task would\n\tmake callers even easier to read, but we pass in user_ns because\n\tcurrent_user_ns() !\u003d task_cred_xxx(current, user_ns).\nSep 20: As recommended by Oleg, also put task_pid_vnr() under rcu_read_lock\n\tin ptrace_signal().\nSep 23: In send_signal(), detect when (user) signal is coming from an\n\tancestor or unrelated user namespace.  Pass that on to __send_signal,\n\twhich sets si_uid to 0 or overflowuid if needed.\nOct 12: Base on Oleg\u0027s fixup_uid() patch.  On top of that, handle all\n\tSI_FROMKERNEL cases at callers, because we can\u0027t assume sender is\n\tcurrent in those cases.\nNov 10: (mhelsley) rename fixup_uid to more meaningful usern_fixup_signal_uid\nNov 10: (akpm) make the !CONFIG_USER_NS case clearer\n\nSigned-off-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nFrom: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSubject: __send_signal: pass q-\u003einfo, not info, to userns_fixup_signal_uid (v2)\n\nEric Biederman pointed out that passing info is a bug and could lead to a\nNULL pointer deref to boot.\n\nA collection of signal, securebits, filecaps, cap_bounds, and a few other\nltp tests passed with this kernel.\n\nChangelog:\n    Nov 18: previous patch missed a leading \u0027\u0026\u0027\n\nSigned-off-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nFrom: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSubject: ipc/mqueue: lock() \u003d\u003e unlock() typo\n\nThere was a double lock typo introduced in b085f4bd6b21 \"user namespace:\nmake signal.c respect user namespaces\"\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nAcked-by: Serge Hallyn \u003cserge@hallyn.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5e6292c0f28f03dfdb8ea3d685f0b838a23bfba4",
      "tree": "8684833680054ab48f9da2bbc36c93e3d00a3391",
      "parents": [
        "f350b1778f1b7713ef54fbc7e079e09e2fe098b9"
      ],
      "author": {
        "name": "Matt Fleming",
        "email": "matt.fleming@intel.com",
        "time": "Tue Jan 10 15:11:17 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:54 2012 -0800"
      },
      "message": "signal: add block_sigmask() for adding sigmask to current-\u003eblocked\n\nAbstract the code sequence for adding a signal handler\u0027s sa_mask to\ncurrent-\u003eblocked because the sequence is identical for all architectures.\nFurthermore, in the past some architectures actually got this code wrong,\nso introduce a wrapper that all architectures can use.\n\nSigned-off-by: Matt Fleming \u003cmatt.fleming@intel.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "db0c2bf69aa095d4a6de7b1145f29fe9a7c0f6a3",
      "tree": "8f38957c01b18edddd44d49ecc3beeac08a20b4e",
      "parents": [
        "ac69e0928054ff29a5049902fb477f9c7605c773",
        "0d19ea866562e46989412a0676412fa0983c9ce7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\n* \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits)\n  cgroup: fix to allow mounting a hierarchy by name\n  cgroup: move assignement out of condition in cgroup_attach_proc()\n  cgroup: Remove task_lock() from cgroup_post_fork()\n  cgroup: add sparse annotation to cgroup_iter_start() and cgroup_iter_end()\n  cgroup: mark cgroup_rmdir_waitq and cgroup_attach_proc() as static\n  cgroup: only need to check oldcgrp\u003d\u003dnewgrp once\n  cgroup: remove redundant get/put of task struct\n  cgroup: remove redundant get/put of old css_set from migrate\n  cgroup: Remove unnecessary task_lock before fetching css_set on migration\n  cgroup: Drop task_lock(parent) on cgroup_fork()\n  cgroups: remove redundant get/put of css_set from css_set_check_fetched()\n  resource cgroups: remove bogus cast\n  cgroup: kill subsys-\u003ecan_attach_task(), pre_attach() and attach_task()\n  cgroup, cpuset: don\u0027t use ss-\u003epre_attach()\n  cgroup: don\u0027t use subsys-\u003ecan_attach_task() or -\u003eattach_task()\n  cgroup: introduce cgroup_taskset and use it in subsys-\u003ecan_attach(), cancel_attach() and attach()\n  cgroup: improve old cgroup handling in cgroup_attach_proc()\n  cgroup: always lock threadgroup during migration\n  threadgroup: extend threadgroup_lock() to cover exit and exec\n  threadgroup: rename signal-\u003ethreadgroup_fork_lock to -\u003egroup_rwsem\n  ...\n\nFix up conflict in kernel/cgroup.c due to commit e0197aae59e5: \"cgroups:\nfix a css_set not found bug in cgroup_attach_proc\" that already\nmentioned that the bug is fixed (differently) in Tejun\u0027s cgroup\npatchset. This one, in other words.\n"
    },
    {
      "commit": "0db49b72bce26341274b74fd968501489a361ae3",
      "tree": "cdb076827aefb38d719d4c42f8ef291c36072fa8",
      "parents": [
        "35b740e4662ef386f0c60e1b60aaf5b44db9914c",
        "1ac9bc6943edf7d181b4b1cc734981350d4f6bae"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 06 08:33:28 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 06 08:44:54 2012 -0800"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (40 commits)\n  sched/tracing: Add a new tracepoint for sleeptime\n  sched: Disable scheduler warnings during oopses\n  sched: Fix cgroup movement of waking process\n  sched: Fix cgroup movement of newly created process\n  sched: Fix cgroup movement of forking process\n  sched: Remove cfs bandwidth period check in tg_set_cfs_period()\n  sched: Fix load-balance lock-breaking\n  sched: Replace all_pinned with a generic flags field\n  sched: Only queue remote wakeups when crossing cache boundaries\n  sched: Add missing rcu_dereference() around -\u003ereal_parent usage\n  [S390] fix cputime overflow in uptime_proc_show\n  [S390] cputime: add sparse checking and cleanup\n  sched: Mark parent and real_parent as __rcu\n  sched, nohz: Fix missing RCU read lock\n  sched, nohz: Set the NOHZ_BALANCE_KICK flag for idle load balancer\n  sched, nohz: Fix the idle cpu check in nohz_idle_balance\n  sched: Use jump_labels for sched_feat\n  sched/accounting: Fix parameter passing in task_group_account_field\n  sched/accounting: Fix user/system tick double accounting\n  sched/accounting: Re-use scheduler statistics for the root cgroup\n  ...\n\nFix up conflicts in\n - arch/ia64/include/asm/cputime.h, include/asm-generic/cputime.h\n\tusecs_to_cputime64() vs the sparse cleanups\n - kernel/sched/fair.c, kernel/time/tick-sched.c\n\tscheduler changes in multiple branches\n"
    },
    {
      "commit": "8a88951b5878dc475dcd841cefc767e36397d14e",
      "tree": "c31fd8cdfa08dce4768f42e556d97929deac2343",
      "parents": [
        "50b8d257486a45cba7b65ca978986ed216bbcc10"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jan 04 17:29:20 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 04 15:01:59 2012 -0800"
      },
      "message": "ptrace: ensure JOBCTL_STOP_SIGMASK is not zero after detach\n\nThis is the temporary simple fix for 3.2, we need more changes in this\narea.\n\n1. do_signal_stop() assumes that the running untraced thread in the\n   stopped thread group is not possible. This was our goal but it is\n   not yet achieved: a stopped-but-resumed tracee can clone the running\n   thread which can initiate another group-stop.\n\n   Remove WARN_ON_ONCE(!current-\u003eptrace).\n\n2. A new thread always starts with -\u003ejobctl \u003d 0. If it is auto-attached\n   and this group is stopped, __ptrace_unlink() sets JOBCTL_STOP_PENDING\n   but JOBCTL_STOP_SIGMASK part is zero, this triggers WANR_ON(!signr)\n   in do_jobctl_trap() if another debugger attaches.\n\n   Change __ptrace_unlink() to set the artificial SIGSTOP for report.\n\n   Alternatively we could change ptrace_init_task() to copy signr from\n   current, but this means we can copy it for no reason and hide the\n   possible similar problems.\n\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[3.1]\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "648616343cdbe904c585a6c12e323d3b3c72e46f",
      "tree": "514bce1b52663db4ab5662b637c764cf3c2ed1eb",
      "parents": [
        "55b02d2f4445ad625213817a1736bf2884d32547"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Thu Dec 15 14:56:09 2011 +0100"
      },
      "committer": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Thu Dec 15 14:56:19 2011 +0100"
      },
      "message": "[S390] cputime: add sparse checking and cleanup\n\nMake cputime_t and cputime64_t nocast to enable sparse checking to\ndetect incorrect use of cputime. Drop the cputime macros for simple\nscalar operations. The conversion macros are still needed.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n"
    },
    {
      "commit": "77e4ef99d1c596a31747668e5fd837f77b6349b6",
      "tree": "b9dcc8d73f9febf6a18edc0b2efa3ecddc2a7a35",
      "parents": [
        "257058ae2b971646b96ab3a15605ac69186e562a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "message": "threadgroup: extend threadgroup_lock() to cover exit and exec\n\nthreadgroup_lock() protected only protected against new addition to\nthe threadgroup, which was inherently somewhat incomplete and\nproblematic for its only user cgroup.  On-going migration could race\nagainst exec and exit leading to interesting problems - the symmetry\nbetween various attach methods, task exiting during method execution,\n-\u003eexit() racing against attach methods, migrating task switching basic\nproperties during exec and so on.\n\nThis patch extends threadgroup_lock() such that it protects against\nall three threadgroup altering operations - fork, exit and exec.  For\nexit, threadgroup_change_begin/end() calls are added to exit_signals\naround assertion of PF_EXITING.  For exec, threadgroup_[un]lock() are\nupdated to also grab and release cred_guard_mutex.\n\nWith this change, threadgroup_lock() guarantees that the target\nthreadgroup will remain stable - no new task will be added, no new\nPF_EXITING will be set and exec won\u0027t happen.\n\nThe next patch will update cgroup so that it can take full advantage\nof this change.\n\n-v2: beefed up comment as suggested by Frederic.\n\n-v3: narrowed scope of protection in exit path as suggested by\n     Frederic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9984de1a5a8a96275fcab818f7419af5a3c86e71",
      "tree": "1935d411752707a1621c5caf64f75dfe105beb3a",
      "parents": [
        "7c77509c542927ee2a3c8812fad84957e51bf67d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon May 23 14:51:41 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "kernel: Map most files to use export.h instead of module.h\n\nThe changed files were only including linux/module.h for the\nEXPORT_SYMBOL infrastructure, and nothing else.  Revector them\nonto the isolated export header for faster compile times.\n\nNothing to see here but a whole lot of instances of:\n\n  -#include \u003clinux/module.h\u003e\n  +#include \u003clinux/export.h\u003e\n\nThis commit is only changing the kernel dir; next targets\nwill probably be mm, fs, the arch dirs, etc.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "d178bc3a708f39cbfefc3fab37032d3f2511b4ec",
      "tree": "af492e92e140f1f6abad5a377a269ef7335824de",
      "parents": [
        "edb2b255a0bebac5aeb17c7613aeb76ba4e6c63c"
      ],
      "author": {
        "name": "Serge Hallyn",
        "email": "serge.hallyn@canonical.com",
        "time": "Mon Sep 26 10:45:18 2011 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Sep 29 13:13:08 2011 -0700"
      },
      "message": "user namespace: usb: make usb urbs user namespace aware (v2)\n\nAdd to the dev_state and alloc_async structures the user namespace\ncorresponding to the uid and euid.  Pass these to kill_pid_info_as_uid(),\nwhich can then implement a proper, user-namespace-aware uid check.\n\nChangelog:\nSep 20: Per Oleg\u0027s suggestion: Instead of caching and passing user namespace,\n\tuid, and euid each separately, pass a struct cred.\nSep 26: Address Alan Stern\u0027s comments: don\u0027t define a struct cred at\n\tusbdev_open(), and take and put a cred at async_completed() to\n\tensure it lasts for the duration of kill_pid_info_as_cred().\n\nSigned-off-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "c1095c6da518b0b64e724f629051fa67655cd8d9",
      "tree": "8c2e33ca6c8e3caa71437c3b69b36a8cf03b4f08",
      "parents": [
        "678624e401b0b7747762b5223fb23f86dcdacc93"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jul 27 12:49:44 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 27 12:53:36 2011 -0700"
      },
      "message": "signals: sys_ssetmask/sys_rt_sigsuspend should use set_current_blocked()\n\nsys_ssetmask(), sys_rt_sigsuspend() and compat_sys_rt_sigsuspend()\nchange -\u003eblocked directly.  This is not correct, see the changelog in\ne6fa16ab \"signal: sigprocmask() should do retarget_shared_pending()\"\n\nChange them to use set_current_blocked().\n\nAnother change is that now we are doing -\u003esaved_sigmask \u003d -\u003eblocked\nlockless, it doesn\u0027t make any sense to do this under -\u003esiglock.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8209f53d79444747782a28520187abaf689761f2",
      "tree": "726270ea29e037f026d77a99787b9d844531ac42",
      "parents": [
        "22a3b9771117d566def0150ea787fcc95f16e724",
        "eac1b5e57d7abc836e78fd3fbcf77dbeed01edc9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (39 commits)\n  ptrace: do_wait(traced_leader_killed_by_mt_exec) can block forever\n  ptrace: fix ptrace_signal() \u0026\u0026 STOP_DEQUEUED interaction\n  connector: add an event for monitoring process tracers\n  ptrace: dont send SIGSTOP on auto-attach if PT_SEIZED\n  ptrace: mv send-SIGSTOP from do_fork() to ptrace_init_task()\n  ptrace_init_task: initialize child-\u003ejobctl explicitly\n  has_stopped_jobs: s/task_is_stopped/SIGNAL_STOP_STOPPED/\n  ptrace: make former thread ID available via PTRACE_GETEVENTMSG after PTRACE_EVENT_EXEC stop\n  ptrace: wait_consider_task: s/same_thread_group/ptrace_reparented/\n  ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()\n  ptrace: ptrace_reparented() should check same_thread_group()\n  redefine thread_group_leader() as exit_signal \u003e\u003d 0\n  do not change dead_task-\u003eexit_signal\n  kill task_detached()\n  reparent_leader: check EXIT_DEAD instead of task_detached()\n  make do_notify_parent() __must_check, update the callers\n  __ptrace_detach: avoid task_detached(), check do_notify_parent()\n  kill tracehook_notify_death()\n  make do_notify_parent() return bool\n  ptrace: s/tracehook_tracer_task()/ptrace_parent()/\n  ...\n"
    },
    {
      "commit": "8a35241803eeb0e9fd3fe27835d6b2775c73b641",
      "tree": "09f15db936084e239279844bcb6db6608e2bb06f",
      "parents": [
        "f701e5b73a1a79ea62ffd45d9e2bed4c7d5c1fd2"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jul 21 17:06:53 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jul 21 17:06:53 2011 +0200"
      },
      "message": "ptrace: fix ptrace_signal() \u0026\u0026 STOP_DEQUEUED interaction\n\nSimple test-case,\n\n\tint main(void)\n\t{\n\t\tint pid, status;\n\n\t\tpid \u003d fork();\n\t\tif (!pid) {\n\t\t\tpause();\n\t\t\tassert(0);\n\t\t\treturn 0x23;\n\t\t}\n\n\t\tassert(ptrace(PTRACE_ATTACH, pid, 0,0) \u003d\u003d 0);\n\t\tassert(wait(\u0026status) \u003d\u003d pid);\n\t\tassert(WIFSTOPPED(status) \u0026\u0026 WSTOPSIG(status) \u003d\u003d SIGSTOP);\n\n\t\tkill(pid, SIGCONT);\t// \u003c--- also clears STOP_DEQUEUD\n\n\t\tassert(ptrace(PTRACE_CONT, pid, 0,0) \u003d\u003d 0);\n\t\tassert(wait(\u0026status) \u003d\u003d pid);\n\t\tassert(WIFSTOPPED(status) \u0026\u0026 WSTOPSIG(status) \u003d\u003d SIGCONT);\n\n\t\tassert(ptrace(PTRACE_CONT, pid, 0, SIGSTOP) \u003d\u003d 0);\n\t\tassert(wait(\u0026status) \u003d\u003d pid);\n\t\tassert(WIFSTOPPED(status) \u0026\u0026 WSTOPSIG(status) \u003d\u003d SIGSTOP);\n\n\t\tkill(pid, SIGKILL);\n\t\treturn 0;\n\t}\n\nWithout the patch it hangs. After the patch SIGSTOP \"injected\" by the\ntracer is not ignored and stops the tracee.\n\nNote also that if this test-case uses, say, SIGWINCH instead of SIGCONT,\neverything works without the patch. This can\u0027t be right, and this is\nconfusing.\n\nThe problem is that SIGSTOP (or any other sig_kernel_stop() signal) has\nno effect without JOBCTL_STOP_DEQUEUED. This means it is simply ignored\nafter PTRACE_CONT unless JOBCTL_STOP_DEQUEUED was set \"by accident\", say\nit wasn\u0027t cleared after initial SIGSTOP sent by PTRACE_ATTACH.\n\nAt first glance we could change ptrace_signal() to add STOP_DEQUEUED\nafter return from ptrace_stop(), but this is not right in case when the\ntracer does not change the reported SIGSTOP and SIGCONT comes in between.\nThis is even more wrong with PT_SEIZED, SIGCONT adds JOBCTL_TRAP_NOTIFY\nwhich will be \"lost\" during the TRAP_STOP | TRAP_NOTIFY report.\n\nSo lets add STOP_DEQUEUED _before_ we report the signal. It has no effect\nunless sig_kernel_stop() \u003d\u003d T after the tracer resumes us, and in the\nlatter case the pending STOP_DEQUEUED means no SIGCONT in between, we\nshould stop.\n\nNote also that if SIGCONT was sent, PT_SEIZED tracee will correctly\nreport PTRACE_EVENT_STOP/SIGTRAP and thus the tracer can notice the fact\nSIGSTOP was cancelled.\n\nAlso, move the current-\u003eptrace check from ptrace_signal() to its caller,\nget_signal_to_deliver(), this looks more natural.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a841796f11c90d53dbac773be56b04fbee8af272",
      "tree": "9401a53faddecc7c1644565d0e22630028f82bca",
      "parents": [
        "ec433f0c51527426989ea8a38a856d810d739414"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jul 19 03:25:36 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jul 20 11:04:54 2011 -0700"
      },
      "message": "signal: align __lock_task_sighand() irq disabling and RCU\n\nThe __lock_task_sighand() function calls rcu_read_lock() with interrupts\nand preemption enabled, but later calls rcu_read_unlock() with interrupts\ndisabled.  It is therefore possible that this RCU read-side critical\nsection will be preempted and later RCU priority boosted, which means that\nrcu_read_unlock() will call rt_mutex_unlock() in order to deboost itself, but\nwith interrupts disabled. This results in lockdep splats, so this commit\nnests the RCU read-side critical section within the interrupt-disabled\nregion of code.  This prevents the RCU read-side critical section from\nbeing preempted, and thus prevents the attempt to deboost with interrupts\ndisabled.\n\nIt is quite possible that a better long-term fix is to make rt_mutex_unlock()\ndisable irqs when acquiring the rt_mutex structure\u0027s -\u003ewait_lock.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "bb3696da89743d580f869142d0a6e6ba9b7fe89a",
      "tree": "fb961c4164198742024ed8924a8824699a3065f1",
      "parents": [
        "0347e17739095c58c0194fed6a61aced3536d258"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jun 24 17:34:23 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:10 2011 +0200"
      },
      "message": "ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()\n\nKill real_parent_is_ptracer() and update the callers to use\nptrace_reparented(), after the previous patch they do the same.\n\nRemove the unnecessary -\u003eptrace !\u003d 0 check in get_signal_to_deliver(),\nif ptrace_reparented() \u003d\u003d T then the task must be ptraced.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d4f7c511c1c2a67eb287987cf1ce9554149030e6",
      "tree": "0756b300e8f558a923782a9ccea9a8b532e39159",
      "parents": [
        "e550f14dc6322e794d4e70825f63c9c99177ae8b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:10:11 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:10 2011 +0200"
      },
      "message": "do not change dead_task-\u003eexit_signal\n\n__ptrace_detach() and do_notify_parent() set task-\u003eexit_signal \u003d -1\nto mark the task dead. This is no longer needed, nobody checks\nexit_signal to detect the EXIT_DEAD task.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "53c8f9f199b239668e6b1a907735ee323a0d1ccd",
      "tree": "785afb9c72a2df27cd6802cf311df18711c59b76",
      "parents": [
        "06d984737bac0545fe20bb5447ee488b95adb531"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:08:18 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:08 2011 +0200"
      },
      "message": "make do_notify_parent() return bool\n\n- change do_notify_parent() to return a boolean, true if the task should\n  be reaped because its parent ignores SIGCHLD.\n\n- update the only caller which checks the returned value, exit_notify().\n\nThis temporary uglifies exit_notify() even more, will be cleanuped by\nthe next change.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a288eecce5253cc1565d400a52b9b476a157e040",
      "tree": "a933dd8c9791be83b7a67a33502c79e7b441960e",
      "parents": [
        "f3c04b934d429b1ace21866f011b66de328c0dc9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 17 16:50:37 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 19:26:28 2011 +0200"
      },
      "message": "ptrace: kill trivial tracehooks\n\nAt this point, tracehooks aren\u0027t useful to mainline kernel and mostly\njust add an extra layer of obfuscation.  Although they have comments,\nwithout actual in-kernel users, it is difficult to tell what are their\nassumptions and they\u0027re actually trying to achieve.  To mainline\nkernel, they just aren\u0027t worth keeping around.\n\nThis patch kills the following trivial tracehooks.\n\n* Ones testing whether task is ptraced.  Replace with -\u003eptrace test.\n\n\ttracehook_expect_breakpoints()\n\ttracehook_consider_ignored_signal()\n\ttracehook_consider_fatal_signal()\n\n* ptrace_event() wrappers.  Call directly.\n\n\ttracehook_report_exec()\n\ttracehook_report_exit()\n\ttracehook_report_vfork_done()\n\n* ptrace_release_task() wrapper.  Call directly.\n\n\ttracehook_finish_release_task()\n\n* noop\n\n\ttracehook_prepare_release_task()\n\ttracehook_report_death()\n\nThis doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d21142ece414ce1088cfcae760689aa60d6fee80",
      "tree": "9f97b4518cd06fe695476fc6cc4ff9ed8d5bdd58",
      "parents": [
        "544b2c91a9f14f9565af1972203438b7f49afd48"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 17 16:50:34 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 19:26:27 2011 +0200"
      },
      "message": "ptrace: kill task_ptrace()\n\ntask_ptrace(task) simply dereferences task-\u003eptrace and isn\u0027t even used\nconsistently only adding confusion.  Kill it and directly access\n-\u003eptrace instead.\n\nThis doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "544b2c91a9f14f9565af1972203438b7f49afd48",
      "tree": "38615eeed1e50580a2341b5a9d15c98793d33c2d",
      "parents": [
        "fb1d910c178ba0c5bc32d3e5a9e82e05b7aad3cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:18 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:54 2011 +0200"
      },
      "message": "ptrace: implement PTRACE_LISTEN\n\nThe previous patch implemented async notification for ptrace but it\nonly worked while trace is running.  This patch introduces\nPTRACE_LISTEN which is suggested by Oleg Nestrov.\n\nIt\u0027s allowed iff tracee is in STOP trap and puts tracee into\nquasi-running state - tracee never really runs but wait(2) and\nptrace(2) consider it to be running.  While ptracer is listening,\ntracee is allowed to re-enter STOP to notify an async event.\nListening state is cleared on the first notification.  Ptracer can\nalso clear it by issuing INTERRUPT - tracee will re-trap into STOP\nwith listening state cleared.\n\nThis allows ptracer to monitor group stop state without running tracee\n- use INTERRUPT to put tracee into STOP trap, issue LISTEN and then\nwait(2) to wait for the next group stop event.  When it happens,\nPTRACE_GETSIGINFO provides information to determine the current state.\n\nTest program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_INTERRUPT\t0x4207\n  #define PTRACE_LISTEN\t\t0x4208\n\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee, tracer;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  siginfo_t si;\n\n\t\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t\t  ptrace(PTRACE_INTERRUPT, tracee, NULL, NULL);\n\t  repeat:\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\n\t\t  ptrace(PTRACE_GETSIGINFO, tracee, NULL, \u0026si);\n\t\t  if (!si.si_code) {\n\t\t\t  printf(\"tracer: SIG %d\\n\", si.si_signo);\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t (void *)(unsigned long)si.si_signo);\n\t\t\t  goto repeat;\n\t\t  }\n\t\t  printf(\"tracer: stopped\u003d%d signo\u003d%d\\n\",\n\t\t\t si.si_signo !\u003d SIGTRAP, si.si_signo);\n\t\t  if (si.si_signo !\u003d SIGTRAP)\n\t\t\t  ptrace(PTRACE_LISTEN, tracee, NULL, NULL);\n\t\t  else\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t\t  goto repeat;\n\t  }\n\n\t  for (i \u003d 0; i \u003c 3; i++) {\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGSTOP\\n\");\n\t\t  kill(tracee, SIGSTOP);\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGCONT\\n\");\n\t\t  kill(tracee, SIGCONT);\n\t  }\n\t  nanosleep(\u0026ts1s, NULL);\n\n\t  kill(tracer, SIGKILL);\n\t  kill(tracee, SIGKILL);\n\t  return 0;\n  }\n\nThis is identical to the program to test TRAP_NOTIFY except that\ntracee is PTRACE_LISTEN\u0027d instead of PTRACE_CONT\u0027d when group stopped.\nThis allows ptracer to monitor when group stop ends without running\ntracee.\n\n  # ./test-listen\n  tracer: stopped\u003d0 signo\u003d5\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n\n-v2: Moved JOBCTL_LISTENING check in wait_task_stopped() into\n     task_stopped_code() as suggested by Oleg.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "fb1d910c178ba0c5bc32d3e5a9e82e05b7aad3cd",
      "tree": "dd889f33758a914cb538583073000bc21aeb1759",
      "parents": [
        "fca26f260c528ee51a2e451b5b200aeb528f3e09"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:17 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:53 2011 +0200"
      },
      "message": "ptrace: implement TRAP_NOTIFY and use it for group stop events\n\nCurrently there\u0027s no way for ptracer to find out whether group stop\nfinished other than polling with INTERRUPT - GETSIGINFO - CONT\nsequence.  This patch implements group stop notification for ptracer\nusing STOP traps.\n\nWhen group stop state of a seized tracee changes, JOBCTL_TRAP_NOTIFY\nis set, which schedules a STOP trap which is sticky - it isn\u0027t cleared\nby other traps and at least one STOP trap will happen eventually.\nSTOP trap is synchronization point for event notification and the\ntracer can determine the current group stop state by looking at the\nsignal number portion of exit code (si_status from waitid(2) or\nsi_code from PTRACE_GETSIGINFO).\n\nNotifications are generated both on start and end of group stops but,\nbecause group stop participation always happens before STOP trap, this\ndoesn\u0027t cause an extra trap while tracee is participating in group\nstop.  The symmetry will be useful later.\n\nNote that this notification works iff tracee is not trapped.\nCurrently there is no way to be notified of group stop state changes\nwhile tracee is trapped.  This will be addressed by a later patch.\n\nAn example program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_INTERRUPT\t0x4207\n\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee, tracer;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  siginfo_t si;\n\n\t\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t\t  ptrace(PTRACE_INTERRUPT, tracee, NULL, NULL);\n\t  repeat:\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\n\t\t  ptrace(PTRACE_GETSIGINFO, tracee, NULL, \u0026si);\n\t\t  if (!si.si_code) {\n\t\t\t  printf(\"tracer: SIG %d\\n\", si.si_signo);\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t (void *)(unsigned long)si.si_signo);\n\t\t\t  goto repeat;\n\t\t  }\n\t\t  printf(\"tracer: stopped\u003d%d signo\u003d%d\\n\",\n\t\t\t si.si_signo !\u003d SIGTRAP, si.si_signo);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t\t  goto repeat;\n\t  }\n\n\t  for (i \u003d 0; i \u003c 3; i++) {\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGSTOP\\n\");\n\t\t  kill(tracee, SIGSTOP);\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGCONT\\n\");\n\t\t  kill(tracee, SIGCONT);\n\t  }\n\t  nanosleep(\u0026ts1s, NULL);\n\n\t  kill(tracer, SIGKILL);\n\t  kill(tracee, SIGKILL);\n\t  return 0;\n  }\n\nIn the above program, tracer keeps tracee running and gets\nnotification of each group stop state changes.\n\n  # ./test-notify\n  tracer: stopped\u003d0 signo\u003d5\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3544d72a0e10d0aa1c1bd59ed77a53a59cdc12f7",
      "tree": "27eb767b5cb98f58cccb5b7053a58bccd105f9d0",
      "parents": [
        "73ddff2bee159ffb580bd24faf625cd5e628f5ec"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:15 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:53 2011 +0200"
      },
      "message": "ptrace: implement PTRACE_SEIZE\n\nPTRACE_ATTACH implicitly issues SIGSTOP on attach which has side\neffects on tracee signal and job control states.  This patch\nimplements a new ptrace request PTRACE_SEIZE which attaches a tracee\nwithout trapping it or affecting its signal and job control states.\n\nThe usage is the same with PTRACE_ATTACH but it takes PTRACE_SEIZE_*\nflags in @data.  Currently, the only defined flag is\nPTRACE_SEIZE_DEVEL which is a temporary flag to enable PTRACE_SEIZE.\nPTRACE_SEIZE will change ptrace behaviors outside of attach itself.\nThe changes will be implemented gradually and the DEVEL flag is to\nprevent programs which expect full SEIZE behavior from using it before\nall the behavior modifications are complete while allowing unit\ntesting.  The flag will be removed once SEIZE behaviors are completely\nimplemented.\n\n* PTRACE_SEIZE, unlike ATTACH, doesn\u0027t force tracee to trap.  After\n  attaching tracee continues to run unless a trap condition occurs.\n\n* PTRACE_SEIZE doesn\u0027t affect signal or group stop state.\n\n* If PTRACE_SEIZE\u0027d, group stop uses PTRACE_EVENT_STOP trap which uses\n  exit_code of (signr | PTRACE_EVENT_STOP \u003c\u003c 8) where signr is one of\n  the stopping signals if group stop is in effect or SIGTRAP\n  otherwise, and returns usual trap siginfo on PTRACE_GETSIGINFO\n  instead of NULL.\n\nSeizing sets PT_SEIZED in -\u003eptrace of the tracee.  This flag will be\nused to determine whether new SEIZE behaviors should be enabled.\n\nTest program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n  static const struct timespec ts3s \u003d { .tv_sec \u003d 3 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee;\n\n\t  tracee \u003d fork();\n\t  if (tracee \u003d\u003d 0) {\n\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  while (1) {\n\t\t\t  printf(\"tracee: alive\\n\");\n\t\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  }\n\t  }\n\n\t  if (argc \u003e 1)\n\t\t  kill(tracee, SIGSTOP);\n\n\t  nanosleep(\u0026ts100ms, NULL);\n\n\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t  if (argc \u003e 1) {\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t  }\n\t  nanosleep(\u0026ts3s, NULL);\n\t  printf(\"tracer: exiting\\n\");\n\t  return 0;\n  }\n\nWhen the above program is called w/o argument, tracee is seized while\nrunning and remains running.  When tracer exits, tracee continues to\nrun and print out messages.\n\n  # ./test-seize-simple\n  tracee: alive\n  tracee: alive\n  tracee: alive\n  tracer: exiting\n  tracee: alive\n  tracee: alive\n\nWhen called with an argument, tracee is seized from stopped state and\ncontinued, and returns to stopped state when tracer exits.\n\n  # ./test-seize\n  tracee: alive\n  tracee: alive\n  tracee: alive\n  tracer: exiting\n  # ps -el|grep test-seize\n  1 T     0  4720     1  0  80   0 -   941 signal ttyS0    00:00:00 test-seize\n\n-v2: SEIZE doesn\u0027t schedule TRAP_STOP and leaves tracee running as Jan\n     suggested.\n\n-v3: PTRACE_EVENT_STOP traps now report group stop state by signr.  If\n     group stop is in effect the stop signal number is returned as\n     part of exit_code; otherwise, SIGTRAP.  This was suggested by\n     Denys and Oleg.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Kratochvil \u003cjan.kratochvil@redhat.com\u003e\nCc: Denys Vlasenko \u003cvda.linux@googlemail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "73ddff2bee159ffb580bd24faf625cd5e628f5ec",
      "tree": "218cf5101b67c98ef99814e59706976d3ad245c2",
      "parents": [
        "dd1d6772692316fe35094085c5e4d9a370ad3462"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:14 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:52 2011 +0200"
      },
      "message": "job control: introduce JOBCTL_TRAP_STOP and use it for group stop trap\n\ndo_signal_stop() implemented both normal group stop and trap for group\nstop while ptraced.  This approach has been enough but scheduled\nchanges require trap mechanism which can be used in more generic\nmanner and using group stop trap for generic trap site simplifies both\nuserland visible interface and implementation.\n\nThis patch adds a new jobctl flag - JOBCTL_TRAP_STOP.  When set, it\ntriggers a trap site, which behaves like group stop trap, in\nget_signal_to_deliver() after checking for pending signals.  While\nptraced, do_signal_stop() doesn\u0027t stop itself.  It initiates group\nstop if requested and schedules JOBCTL_TRAP_STOP and returns.  The\ncaller - get_signal_to_deliver() - is responsible for checking whether\nTRAP_STOP is pending afterwards and handling it.\n\nptrace_attach() is updated to use JOBCTL_TRAP_STOP instead of\nJOBCTL_STOP_PENDING and __ptrace_unlink() to clear all pending trap\nbits and TRAPPING so that TRAP_STOP and future trap bits don\u0027t linger\nafter detach.\n\nWhile at it, add proper function comment to do_signal_stop() and make\nit return bool.\n\n-v2: __ptrace_unlink() updated to clear JOBCTL_TRAP_MASK and TRAPPING\n     instead of JOBCTL_PENDING_MASK.  This avoids accidentally\n     clearing JOBCTL_STOP_CONSUME.  Spotted by Oleg.\n\n-v3: do_signal_stop() updated to return %false without dropping\n     siglock while ptraced and TRAP_STOP check moved inside for(;;)\n     loop after group stop participation.  This avoids unnecessary\n     relocking and also will help avoiding unnecessary traps by\n     consuming group stop before handling pending traps.\n\n-v4: Jobctl trap handling moved into a separate function -\n     do_jobctl_trap().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "ada9c93312f7ec49514c68c211595ce2601cebae",
      "tree": "d20d678c04daf68705f3006e3bc2a00746f3eb18",
      "parents": [
        "60b8b1de0dd2bf246f0e074d287bb3f0bc42a755"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue Jun 14 15:50:11 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 14 19:12:17 2011 -0700"
      },
      "message": "signal.c: fix kernel-doc notation\n\nFix kernel-doc warnings in signal.c:\n\n  Warning(kernel/signal.c:2374): No description found for parameter \u0027nset\u0027\n  Warning(kernel/signal.c:2374): Excess function parameter \u0027set\u0027 description in \u0027sys_rt_sigprocmask\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dd1d6772692316fe35094085c5e4d9a370ad3462",
      "tree": "d6f2743d96b93ded07d35a0af2cafa6056bfdc74",
      "parents": [
        "62c124ff3bcdb414af635c2bf822c9e4f2a5abfa"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "signal: remove three noop tracehooks\n\nRemove the following three noop tracehooks in signals.c.\n\n* tracehook_force_sigpending()\n* tracehook_get_signal()\n* tracehook_finish_jctl()\n\nThe code area is about to be updated and these hooks don\u0027t do anything\nother than obfuscating the logic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "62c124ff3bcdb414af635c2bf822c9e4f2a5abfa",
      "tree": "5d279211e098d24245d49e394d84aa8cfdb6f277",
      "parents": [
        "7dd3db54e77d21eb95e145f19ba53f68250d0e73"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "ptrace: use bit_waitqueue for TRAPPING instead of wait_chldexit\n\nptracer-\u003esignal-\u003ewait_chldexit was used to wait for TRAPPING; however,\n-\u003ewait_chldexit was already complicated with waker-side filtering\nwithout adding TRAPPING wait on top of it.  Also, it unnecessarily\nmade TRAPPING clearing depend on the current ptrace relationship - if\nthe ptracee is detached, wakeup is lost.\n\nThere is no reason to use signal-\u003ewait_chldexit here.  We\u0027re just\nwaiting for JOBCTL_TRAPPING bit to clear and given the relatively\ninfrequent use of ptrace, bit_waitqueue can serve it perfectly.\n\nThis patch makes JOBCTL_TRAPPING wait use bit_waitqueue instead of\nsignal-\u003ewait_chldexit.\n\n-v2: Use JOBCTL_*_BIT macros instead of ilog2() as suggested by Linus.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "7dd3db54e77d21eb95e145f19ba53f68250d0e73",
      "tree": "628e44b22e6fbf2828cf2c533c41b3d24f3e3ec9",
      "parents": [
        "6dfca32984237a8a011b5bf367e53341a265b2a4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "job control: introduce task_set_jobctl_pending()\n\ntask-\u003ejobctl currently hosts JOBCTL_STOP_PENDING and will host TRAP\npending bits too.  Setting pending conditions on a dying task may make\nthe task unkillable.  Currently, each setting site is responsible for\nchecking for the condition but with to-be-added job control traps this\nbecomes too fragile.\n\nThis patch adds task_set_jobctl_pending() which should be used when\nsetting task-\u003ejobctl bits to schedule a stop or trap.  The function\nperforms the followings to ease setting pending bits.\n\n* Sanity checks.\n\n* If fatal signal is pending or PF_EXITING is set, no bit is set.\n\n* STOP_SIGMASK is automatically cleared if new value is being set.\n\ndo_signal_stop() and ptrace_attach() are updated to use\ntask_set_jobctl_pending() instead of setting STOP_PENDING explicitly.\nThe surrounding structures around setting are changed to fit\ntask_set_jobctl_pending() better but there should be no userland\nvisible behavior difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "6dfca32984237a8a011b5bf367e53341a265b2a4",
      "tree": "a879c682f00921959ee28b563b9024c0ac54f861",
      "parents": [
        "3759a0d94c18764247b66511d1038f2b93aa95de"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "job control: make task_clear_jobctl_pending() clear TRAPPING automatically\n\nJOBCTL_TRAPPING indicates that ptracer is waiting for tracee to\n(re)transit into TRACED.  task_clear_jobctl_pending() must be called\nwhen either tracee enters TRACED or the transition is cancelled for\nsome reason.  The former is achieved by explicitly calling\ntask_clear_jobctl_pending() in ptrace_stop() and the latter by calling\nit at the end of do_signal_stop().\n\nCalling task_clear_jobctl_trapping() at the end of do_signal_stop()\nlimits the scope TRAPPING can be used and is fragile in that seemingly\nunrelated changes to tracee\u0027s control flow can lead to stuck TRAPPING.\n\nWe already have task_clear_jobctl_pending() calls on those cancelling\nevents to clear JOBCTL_STOP_PENDING.  Cancellations can be handled by\nmaking those call sites use JOBCTL_PENDING_MASK instead and updating\ntask_clear_jobctl_pending() such that task_clear_jobctl_trapping() is\ncalled automatically if no stop/trap is pending.\n\nThis patch makes the above changes and removes the fallback\ntask_clear_jobctl_trapping() call from do_signal_stop().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3759a0d94c18764247b66511d1038f2b93aa95de",
      "tree": "ec56295fc1bd252bcbe1cb8552102deeef03bbb7",
      "parents": [
        "81be24b8cdeb69e62f9d1b6b425fd9ffdd37f581"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:10 2011 +0200"
      },
      "message": "job control: introduce JOBCTL_PENDING_MASK and task_clear_jobctl_pending()\n\nThis patch introduces JOBCTL_PENDING_MASK and replaces\ntask_clear_jobctl_stop_pending() with task_clear_jobctl_pending()\nwhich takes an extra @mask argument.\n\nJOBCTL_PENDING_MASK is currently equal to JOBCTL_STOP_PENDING but\nfuture patches will add more bits.  recalc_sigpending_tsk() is updated\nto use JOBCTL_PENDING_MASK instead.\n\ntask_clear_jobctl_pending() takes @mask which in subset of\nJOBCTL_PENDING_MASK and clears the relevant jobctl bits.  If\nJOBCTL_STOP_PENDING is set, other STOP bits are cleared together.  All\ntask_clear_jobctl_stop_pending() users are updated to call\ntask_clear_jobctl_pending() with JOBCTL_STOP_PENDING which is\nfunctionally identical to task_clear_jobctl_stop_pending().\n\nThis patch doesn\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "81be24b8cdeb69e62f9d1b6b425fd9ffdd37f581",
      "tree": "63afd141fdb380c7b00a01a2080ace6bcc232386",
      "parents": [
        "755e276b3326f300585435d2f3876e66e248c476"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:13:59 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:10 2011 +0200"
      },
      "message": "ptrace: relocate set_current_state(TASK_TRACED) in ptrace_stop()\n\nIn ptrace_stop(), after arch hook is done, the task state and jobctl\nbits are updated while holding siglock.  The ordering requirement\nthere is that TASK_TRACED is set before JOBCTL_TRAPPING is cleared to\nprevent ptracer waiting on TRAPPING doesn\u0027t end up waking up TRACED is\nactually set and sees TASK_RUNNING in wait(2).\n\nMove set_current_state(TASK_TRACED) to the top of the block and\nreorganize comments.  This makes the ordering more obvious\n(TASK_TRACED before other updates) and helps future updates to group\nstop participation.\n\nThis patch doesn\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "a8f072c1d624a627b67f2ace2f0c25d856ef4e54",
      "tree": "9ba3e96aa874b08c7156a3584f27187bcdbdd9cd",
      "parents": [
        "0b1007c3578569469a6fab6ae5cca918ccdc3ee1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:13:59 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:09 2011 +0200"
      },
      "message": "job control: rename signal-\u003egroup_stop and flags to jobctl and update them\n\nsignal-\u003egroup_stop currently hosts mostly group stop related flags;\nhowever, it\u0027s gonna be used for wider purposes and the GROUP_STOP_\nflag prefix becomes confusing.  Rename signal-\u003egroup_stop to\nsignal-\u003ejobctl and rename all GROUP_STOP_* flags to JOBCTL_*.\n\nBit position macros JOBCTL_*_BIT are defined and JOBCTL_* flags are\ndefined in terms of them to allow using bitops later.\n\nWhile at it, reassign JOBCTL_TRAPPING to bit 22 to better accomodate\nfuture additions.\n\nThis doesn\u0027t cause any functional change.\n\n-v2: JOBCTL_*_BIT macros added as suggested by Linus.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d92fcf0552a15891b25c343cee340d295e24109c",
      "tree": "ad43a9c62d926f223d699544bcef4695af4f3e9d",
      "parents": [
        "0666fb51b1483f27506e212cc7f7b2645b5c7acc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 25 19:22:27 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 25 19:22:27 2011 +0200"
      },
      "message": "signal: sys_pause() should check signal_pending()\n\nERESTART* is always wrong without TIF_SIGPENDING. Teach sys_pause()\nto handle the spurious wakeup correctly.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3ed4c0583daa34dedb568b26ff99e5a7b58db612",
      "tree": "a531d4cc94acaa58fe0600cf83da9fb8b77f6e50",
      "parents": [
        "ad9471752ebae25daa133b4e5d9299809c35e155",
        "bd715d9a4f13f87bad5526c2cd41370949473b16"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 13:33:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 13:33:21 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (41 commits)\n  signal: trivial, fix the \"timespec declared inside parameter list\" warning\n  job control: reorganize wait_task_stopped()\n  ptrace: fix signal-\u003ewait_chldexit usage in task_clear_group_stop_trapping()\n  signal: sys_sigprocmask() needs retarget_shared_pending()\n  signal: cleanup sys_sigprocmask()\n  signal: rename signandsets() to sigandnsets()\n  signal: do_sigtimedwait() needs retarget_shared_pending()\n  signal: introduce do_sigtimedwait() to factor out compat/native code\n  signal: sys_rt_sigtimedwait: simplify the timeout logic\n  signal: cleanup sys_rt_sigprocmask()\n  x86: signal: sys_rt_sigreturn() should use set_current_blocked()\n  x86: signal: handle_signal() should use set_current_blocked()\n  signal: sigprocmask() should do retarget_shared_pending()\n  signal: sigprocmask: narrow the scope of -\u003esiglock\n  signal: retarget_shared_pending: optimize while_each_thread() loop\n  signal: retarget_shared_pending: consider shared/unblocked signals only\n  signal: introduce retarget_shared_pending()\n  ptrace: ptrace_check_attach() should not do s/STOPPED/TRACED/\n  signal: Turn SIGNAL_STOP_DEQUEUED into GROUP_STOP_DEQUEUED\n  signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending()\n  ...\n"
    },
    {
      "commit": "40ae717d1e78d982bd469b2013a4cbf4ec1ca434",
      "tree": "4063fe2d86828c6b6c10b6f8c29b67ab27167b3b",
      "parents": [
        "2e4f7c7769a0b8b6b3e88b0436c6c634f146a4ef"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 06 11:52:22 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon May 09 14:19:54 2011 +0200"
      },
      "message": "ptrace: fix signal-\u003ewait_chldexit usage in task_clear_group_stop_trapping()\n\nGROUP_STOP_TRAPPING waiting mechanism piggybacks on\nsignal-\u003ewait_chldexit which is primarily used to implement waiting for\nwait(2) and friends.  When do_wait() waits on signal-\u003ewait_chldexit,\nit uses a custom wake up callback, child_wait_callback(), which\nexpects the child task which is waking up the parent to be passed in\nas @key to filter out spurious wakeups.\n\ntask_clear_group_stop_trapping() used __wake_up_sync() which uses NULL\n@key causing the following oops if the parent was doing do_wait().\n\n  BUG: unable to handle kernel NULL pointer dereference at 00000000000002d8\n  IP: [\u003cffffffff810499f9\u003e] child_wait_callback+0x29/0x80\n  PGD 1d899067 PUD 1e418067 PMD 0\n  Oops: 0000 [#1] PREEMPT SMP\n  last sysfs file: /sys/devices/pci0000:00/0000:00:03.0/local_cpus\n  CPU 2\n  Modules linked in:\n\n  Pid: 4498, comm: test-continued Not tainted 2.6.39-rc6-work+ #32 Bochs Bochs\n  RIP: 0010:[\u003cffffffff810499f9\u003e]  [\u003cffffffff810499f9\u003e] child_wait_callback+0x29/0x80\n  RSP: 0000:ffff88001b889bf8  EFLAGS: 00010046\n  RAX: 0000000000000000 RBX: ffff88001fab3af8 RCX: 0000000000000000\n  RDX: 0000000000000001 RSI: 0000000000000002 RDI: ffff88001d91df20\n  RBP: ffff88001b889c08 R08: 0000000000000000 R09: 0000000000000000\n  R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000\n  R13: ffff88001fb70550 R14: 0000000000000000 R15: 0000000000000001\n  FS:  00007f26ccae4700(0000) GS:ffff88001fd00000(0000) knlGS:0000000000000000\n  CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n  CR2: 00000000000002d8 CR3: 000000001b8ac000 CR4: 00000000000006e0\n  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n  DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n  Process test-continued (pid: 4498, threadinfo ffff88001b888000, task ffff88001fb88000)\n  Stack:\n   ffff88001b889c18 ffff88001fb70538 ffff88001b889c58 ffffffff810312f9\n   0000000000000001 0000000200000001 ffff88001b889c58 ffff88001fb70518\n   0000000000000002 0000000000000082 0000000000000001 0000000000000000\n  Call Trace:\n   [\u003cffffffff810312f9\u003e] __wake_up_common+0x59/0x90\n   [\u003cffffffff81035263\u003e] __wake_up_sync_key+0x53/0x80\n   [\u003cffffffff810352a0\u003e] __wake_up_sync+0x10/0x20\n   [\u003cffffffff8105a984\u003e] task_clear_jobctl_trapping+0x44/0x50\n   [\u003cffffffff8105bcbc\u003e] ptrace_stop+0x7c/0x290\n   [\u003cffffffff8105c20a\u003e] do_signal_stop+0x28a/0x2d0\n   [\u003cffffffff8105d27f\u003e] get_signal_to_deliver+0x14f/0x5a0\n   [\u003cffffffff81002175\u003e] do_signal+0x75/0x7b0\n   [\u003cffffffff8100292d\u003e] do_notify_resume+0x5d/0x70\n   [\u003cffffffff8182e36a\u003e] retint_signal+0x46/0x8c\n  Code: 00 00 55 48 89 e5 53 48 83 ec 08 0f 1f 44 00 00 8b 47 d8 83 f8 03 74 3a 85 c0 49 89 c8 75 23 89 c0 48 8b 5f e0 4c 8d 0c 40 31 c0 \u003c4b\u003e 39 9c c8 d8 02 00 00 74 1d 48 83 c4 08 5b c9 c3 66 0f 1f 44\n\nFix it by using __wake_up_sync_key() and passing in the child as @key.\n\nI still think it\u0027s a mistake to piggyback on wait_chldexit for this.\nGiven the relative low frequency of ptrace use, we would be much\nbetter off leaving already complex wait_chldexit alone and using bit\nwaitqueue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "2e4f7c7769a0b8b6b3e88b0436c6c634f146a4ef",
      "tree": "1e8a46790b0c0834006cd07c321aa4b7556a3d05",
      "parents": [
        "b013c399245a88a73aaa031279f0c4d7cea7fe68"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon May 09 13:48:56 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon May 09 13:48:56 2011 +0200"
      },
      "message": "signal: sys_sigprocmask() needs retarget_shared_pending()\n\nsys_sigprocmask() changes current-\u003eblocked by hand. Convert this code\nto use set_current_blocked().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "b013c399245a88a73aaa031279f0c4d7cea7fe68",
      "tree": "a008708eee3d659e4f416fdf56894d572ae798b8",
      "parents": [
        "702a5073fdb71eb29cd4912575289fb5044c1894"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 11:36:20 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:40 2011 +0200"
      },
      "message": "signal: cleanup sys_sigprocmask()\n\nCleanup. Remove the unneeded goto\u0027s, we can simply read blocked.sig[0]\nunconditionally and then copy-to-user it if oset !\u003d NULL.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "702a5073fdb71eb29cd4912575289fb5044c1894",
      "tree": "d650a10178427b59df2068b4d211f12f8993230f",
      "parents": [
        "b182801ab35f7a0afb3cdf8ba5df464d04206b46"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 22:01:27 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:39 2011 +0200"
      },
      "message": "signal: rename signandsets() to sigandnsets()\n\nAs Tejun and Linus pointed out, \"nand\" is the wrong name for \"x \u0026 ~y\",\nit should be \"andn\". Rename signandsets() as suggested.\n\nSuggested-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b182801ab35f7a0afb3cdf8ba5df464d04206b46",
      "tree": "dcdda5843c6453b60fe4adcf004283ac5f8e315b",
      "parents": [
        "943df1485a8ff0e600729e082e568ece04d4de9e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:56:14 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:39 2011 +0200"
      },
      "message": "signal: do_sigtimedwait() needs retarget_shared_pending()\n\ndo_sigtimedwait() changes current-\u003eblocked and thus it needs\nset_current_blocked()-\u003eretarget_shared_pending().\n\nWe could use set_current_blocked() directly. It is fine to change\n-\u003ereal_blocked from all-zeroes to -\u003eblocked and vice versa lockless,\nbut this is not immediately clear, looks racy, and needs a huge\ncomment to explain why this is correct.\n\nTo keep the things simple this patch adds the new static helper,\n__set_task_blocked() which should be called with -\u003esiglock held. This\nway we can change both -\u003ereal_blocked and -\u003eblocked atomically under\n-\u003esiglock as the current code does. This is more understandable.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "943df1485a8ff0e600729e082e568ece04d4de9e",
      "tree": "d2d4b7b41f163e011cb7a373376c9ae87e5941be",
      "parents": [
        "fe0faa005d43bc44c357631d51c273806086caa4"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:44:14 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:38 2011 +0200"
      },
      "message": "signal: introduce do_sigtimedwait() to factor out compat/native code\n\nFactor out the common code in sys_rt_sigtimedwait/compat_sys_rt_sigtimedwait\nto the new helper, do_sigtimedwait().\n\nAdd the comment to document the extra tick we add to timespec_to_jiffies(ts),\nthanks to Linus who explained this to me.\n\nPerhaps it would be better to move compat_sys_rt_sigtimedwait() into\nsignal.c under CONFIG_COMPAT, then we can make do_sigtimedwait() static.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "fe0faa005d43bc44c357631d51c273806086caa4",
      "tree": "7977c5ec7c452ed3a0036747b8d8861b742c30b3",
      "parents": [
        "bb7efee2ca63b08795ffb3cda96fc89d2e641b79"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:24:19 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:38 2011 +0200"
      },
      "message": "signal: sys_rt_sigtimedwait: simplify the timeout logic\n\nNo functional changes, cleanup compat_sys_rt_sigtimedwait() and\nsys_rt_sigtimedwait().\n\nCalculate the timeout before we take -\u003esiglock, this simplifies and\nlessens the code. Use timespec_valid() to check the timespec.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "bb7efee2ca63b08795ffb3cda96fc89d2e641b79",
      "tree": "05e05d78f815d9fb8f8963860d2287189a17d7b1",
      "parents": [
        "e9bd3f0faa90084f188830d77723bafe422e486b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:18:10 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:38 2011 +0200"
      },
      "message": "signal: cleanup sys_rt_sigprocmask()\n\nsys_rt_sigprocmask() looks unnecessarily complicated, simplify it.\nWe can just read current-\u003eblocked lockless unconditionally before\nanything else and then copy-to-user it if needed.  At worst we\ncopy 4 words on mips.\n\nWe could copy-to-user the old mask first and simplify the code even\nmore, but the patch tries to keep the current behaviour: we change\ncurrent-\u003eblock even if copy_to_user(oset) fails.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e6fa16ab9c1e9b344428e6fea4d29e3cc4b28fb0",
      "tree": "c1bdacc0537213cba8ba75a63ac286e21c0a7250",
      "parents": [
        "73ef4aeb61b53fce464a7e24ef03a26f98b2f617"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 20:59:41 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:37 2011 +0200"
      },
      "message": "signal: sigprocmask() should do retarget_shared_pending()\n\nIn short, almost every changing of current-\u003eblocked is wrong, or at least\ncan lead to the unexpected results.\n\nFor example. Two threads T1 and T2, T1 sleeps in sigtimedwait/pause/etc.\nkill(tgid, SIG) can pick T2 for TIF_SIGPENDING. If T2 calls sigprocmask()\nand blocks SIG before it notices the pending signal, nobody else can handle\nthis pending shared signal.\n\nI am not sure this is bug, but at least this looks strange imho. T1 should\nnot sleep forever, there is a signal which should wake it up.\n\nThis patch moves the code which actually changes -\u003eblocked into the new\nhelper, set_current_blocked() and changes this code to call\nretarget_shared_pending() as exit_signals() does. We should only care about\nthe signals we just blocked, we use \"newset \u0026 ~current-\u003eblocked\" as a mask.\n\nWe do not check !sigisemptyset(newblocked), retarget_shared_pending() is\ncheap unless mask \u0026 shared_pending.\n\nNote: for this particular case we could simply change sigprocmask() to\nreturn -EINTR if signal_pending(), but then we should change other callers\nand, more importantly, if we need this fix then set_current_blocked() will\nhave more callers and some of them can\u0027t restart. See the next patch as a\nrandom example.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "73ef4aeb61b53fce464a7e24ef03a26f98b2f617",
      "tree": "15acc5d7ded643ccd1da1d502033822a2452497c",
      "parents": [
        "fec9993db093acfc3999a364e31f8adae41fcb28"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:54:20 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:36 2011 +0200"
      },
      "message": "signal: sigprocmask: narrow the scope of -\u003esiglock\n\nNo functional changes, preparation to simplify the review of the next change.\n\n1. We can read current-\u003eblock lockless, nobody else can ever change this mask.\n\n2. Calculate the resulting sigset_t outside of -\u003esiglock into the temporary\n   variable, then take -\u003esiglock and change -\u003eblocked.\n\nAlso, kill the stale comment about BKL.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fec9993db093acfc3999a364e31f8adae41fcb28",
      "tree": "6398e6f0d811128cb46c04ec631f3dcc6075728a",
      "parents": [
        "f646e227b88a164a841d6b6dd969d8a45272dd83"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:50:21 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:35 2011 +0200"
      },
      "message": "signal: retarget_shared_pending: optimize while_each_thread() loop\n\nretarget_shared_pending() blindly does recalc_sigpending_and_wake() for\nevery sub-thread, this is suboptimal. We can check t-\u003eblocked and stop\nlooping once every bit in shared_pending has the new target.\n\nNote: we do not take task_is_stopped_or_traced(t) into account, we are\nnot trying to speed up the signal delivery or to avoid the unnecessary\n(but harmless) signal_wake_up(0) in this unlikely case.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f646e227b88a164a841d6b6dd969d8a45272dd83",
      "tree": "bd11235d720e384efc20e01f116bbf904ca58b4f",
      "parents": [
        "0edceb7bcd82802f721f3c94eed9b3e2869d3740"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:18:39 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:35 2011 +0200"
      },
      "message": "signal: retarget_shared_pending: consider shared/unblocked signals only\n\nexit_signals() checks signal_pending() before retarget_shared_pending() but\nthis is suboptimal. We can avoid the while_each_thread() loop in case when\nthere are no shared signals visible to us.\n\nAdd the \"shared_pending.signal \u0026 ~blocked\" check. We don\u0027t use tsk-\u003eblocked\ndirectly but pass ~blocked as an argument, this is needed for the next patch.\n\nNote: we can optimize this more. while_each_thread(t) can check t-\u003eblocked\ninto account and stop after every pending signal has the new target, see the\nnext patch.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0edceb7bcd82802f721f3c94eed9b3e2869d3740",
      "tree": "ef24801563d721a2823d6c863d3d68f20ce39857",
      "parents": [
        "e46bc9b6fd65bc9f406a4211fbf95683cc9c2937"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:17:37 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:35 2011 +0200"
      },
      "message": "signal: introduce retarget_shared_pending()\n\nNo functional changes. Move the notify-other-threads code from exit_signals()\nto the new helper, retarget_shared_pending().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f9fa0bc1fabe1d861e46d80ecbe7e85da359195c",
      "tree": "7d90bcd4b78f22a72ea4d3102b8e2714b78d1e43",
      "parents": [
        "bb3c90f0de7b34995b5e35cf5dc97a3d428b3761"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Fri Apr 08 10:53:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 08 11:05:24 2011 -0700"
      },
      "message": "signal.c: fix erroneous syscall kernel-doc\n\nFix erroneous syscall kernel-doc comments in kernel/signal.c.\n\nReported-by: Matt Fleming \u003cmatt@console-pimps.org\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e46bc9b6fd65bc9f406a4211fbf95683cc9c2937",
      "tree": "57046f6b2f4674a0c9048ab1ad1ff50fae7e373a",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "321fb561971ba0f10ce18c0f8a4b9fbfc7cef4b9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 07 20:44:11 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 07 20:44:11 2011 +0200"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into ptrace\n"
    },
    {
      "commit": "42933bac11e811f02200c944d8562a15f8ec4ff0",
      "tree": "fcdd9afe56eb0e746565ddd1f92f22d36678b843",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "25985edcedea6396277003854657b5f3cb31a628"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6\n\n* \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6:\n  Fix common misspellings\n"
    },
    {
      "commit": "41c57892a2895865afc89ff1a21f91a0f1506f66",
      "tree": "ca637f0e7f4ec93b9c6f58c5868c27305a58da43",
      "parents": [
        "5aba085ededa6c5a1ff465e2aebc3e8eb00a7567"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Mon Apr 04 15:00:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 04 17:51:46 2011 -0700"
      },
      "message": "kernel/signal.c: add kernel-doc notation to syscalls\n\nAdd kernel-doc to syscalls in signal.c.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5aba085ededa6c5a1ff465e2aebc3e8eb00a7567",
      "tree": "61037c7906bc6334823bc75d1fa0b990aeadcea3",
      "parents": [
        "21b86bd5a838ee882d36d354185e29650b0757dd"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Mon Apr 04 14:59:31 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 04 17:51:46 2011 -0700"
      },
      "message": "kernel/signal.c: fix typos and coding style\n\nGeneral coding style and comment fixes; no code changes:\n\n - Use multi-line-comment coding style.\n - Put some function signatures completely on one line.\n - Hyphenate some words.\n - Spell Posix as POSIX.\n - Correct typos \u0026 spellos in some comments.\n - Drop trailing whitespace.\n - End sentences with periods.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee77f075921730b2b465880f9fd4367003bdab39",
      "tree": "dfae10b9718b79650477f912de148c903bc1bbd0",
      "parents": [
        "780006eac2fe7f4d2582da16a096e5a44c4767ff"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 01 20:12:38 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 04 02:11:05 2011 +0200"
      },
      "message": "signal: Turn SIGNAL_STOP_DEQUEUED into GROUP_STOP_DEQUEUED\n\nThis patch moves SIGNAL_STOP_DEQUEUED from signal_struct-\u003eflags to\ntask_struct-\u003egroup_stop, and thus makes it per-thread.\n\nLike SIGNAL_STOP_DEQUEUED, GROUP_STOP_DEQUEUED can be false-positive\nafter return from get_signal_to_deliver(), this is fine. The only\npurpose of this bit is: we can drop -\u003esiglock after __dequeue_signal()\nreturns the sig_kernel_stop() signal and before we call\ndo_signal_stop(), in this case we must not miss SIGCONT if it comes in\nbetween.\n\nBut, unlike SIGNAL_STOP_DEQUEUED, GROUP_STOP_DEQUEUED can not be\nfalse-positive in do_signal_stop() if multiple threads dequeue the\nsig_kernel_stop() signal at the same time.\n\nConsider two threads T1 and T2, SIGTTIN has a hanlder.\n\n\t- T1 dequeues SIGTSTP and sets SIGNAL_STOP_DEQUEUED, then\n\t  it drops -\u003esiglock\n\n\t- SIGCONT comes and clears SIGNAL_STOP_DEQUEUED, SIGTSTP\n\t  should be cancelled.\n\n\t- T2 dequeues SIGTTIN and sets SIGNAL_STOP_DEQUEUED again.\n\t  Since we have a handler we should not stop, T2 returns\n\t  to usermode to run the handler.\n\n\t- T1 continues, calls do_signal_stop() and wrongly starts\n\t  the group stop because SIGNAL_STOP_DEQUEUED was restored\n\t  in between.\n\nWith or without this change:\n\n\t- we need to do something with ptrace_signal() which can\n\t  return SIGSTOP, but this needs another discussion\n\n\t- SIGSTOP can be lost if it races with the mt exec, will\n\t  be fixed later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "780006eac2fe7f4d2582da16a096e5a44c4767ff",
      "tree": "13d315029abead58b8b88071c7177271824b211a",
      "parents": [
        "1deac632fc3dcff33a6df3e82ef10c738ac13fe6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 01 20:12:16 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 04 02:11:04 2011 +0200"
      },
      "message": "signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending()\n\nPF_EXITING or TASK_STOPPED has already called task_participate_group_stop()\nand cleared its -\u003egroup_stop. No need to do task_clear_group_stop_pending()\nwhen we start the new group stop.\n\nAdd a small comment to explain the !task_is_stopped() check. Note that this\ncheck is not exactly right and it can lead to unnecessary stop later if the\nthread is TASK_PTRACED. What we need is task_participated_in_group_stop(),\nthis will be solved later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1deac632fc3dcff33a6df3e82ef10c738ac13fe6",
      "tree": "137481584f4692911e2725b31776de3d2dd72068",
      "parents": [
        "244056f9dbbc6dc4126a301c745fa3dd67d8af3c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 01 20:11:50 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 04 02:11:04 2011 +0200"
      },
      "message": "signal: prepare_signal(SIGCONT) shouldn\u0027t play with TIF_SIGPENDING\n\nprepare_signal(SIGCONT) should never set TIF_SIGPENDING or wake up\nthe TASK_INTERRUPTIBLE threads. We are going to call complete_signal()\nwhich should pick the right thread correctly. All we need is to wake\nup the TASK_STOPPED threads.\n\nIf the task was stopped, it can\u0027t return to usermode without taking\n-\u003esiglock. Otherwise we don\u0027t care, and the spurious TIF_SIGPENDING\ncan\u0027t be useful.\n\nThe comment says:\n\n\t* If there is a handler for SIGCONT, we must make\n\t* sure that no thread returns to user mode before\n\t* we post the signal\n\nIt is not clear what this means. Probably, \"when there\u0027s only a single\nthread\" and this continues to be true. Otherwise, even if this SIGCONT\nis not private, with or without this change only one thread can dequeue\nSIGCONT, other threads can happily return to user mode before before\nthat thread handles this signal.\n\nNote also that wake_up_state(t, __TASK_STOPPED) can\u0027t race with the task\nwhich changes its state, TASK_STOPPED state is protected by -\u003esiglock as\nwell.\n\nIn short: when it comes to signal delivery, SIGCONT is the normal signal\nand does not need any special support.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "243b422af9ea9af4ead07a8ad54c90d4f9b6081a",
      "tree": "bdcd77b51cce8bd2ed5fcc41c6b430a8d6a9d74f",
      "parents": [
        "5847098cd896c92819800e17e983bf6530035209"
      ],
      "author": {
        "name": "Roland Dreier",
        "email": "roland@purestorage.com",
        "time": "Mon Mar 28 14:13:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 28 15:45:44 2011 -0700"
      },
      "message": "Relax si_code check in rt_sigqueueinfo and rt_tgsigqueueinfo\n\nCommit da48524eb206 (\"Prevent rt_sigqueueinfo and rt_tgsigqueueinfo\nfrom spoofing the signal code\") made the check on si_code too strict.\nThere are several legitimate places where glibc wants to queue a\nnegative si_code different from SI_QUEUE:\n\n - This was first noticed with glibc\u0027s aio implementation, which wants\n   to queue a signal with si_code SI_ASYNCIO; the current kernel\n   causes glibc\u0027s tst-aio4 test to fail because rt_sigqueueinfo()\n   fails with EPERM.\n\n - Further examination of the glibc source shows that getaddrinfo_a()\n   wants to use SI_ASYNCNL (which the kernel does not even define).\n   The timer_create() fallback code wants to queue signals with SI_TIMER.\n\nAs suggested by Oleg Nesterov \u003coleg@redhat.com\u003e, loosen the check to\nforbid only the problematic SI_TKILL case.\n\nReported-by: Klaus Dittrich \u003ckladit@arcor.de\u003e\nAcked-by: Julien Tinnes \u003cjln@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Roland Dreier \u003croland@purestorage.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "39fd33933b0209e4b6254743f2cede07c5ad4c52",
      "tree": "394f09178324fd1e31847a6c71d81f01e6236b02",
      "parents": [
        "bb96a6f50be27390dc959ff67d9ea0ea0cfbe177"
      ],
      "author": {
        "name": "Serge E. Hallyn",
        "email": "serge@hallyn.com",
        "time": "Wed Mar 23 16:43:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:47:04 2011 -0700"
      },
      "message": "userns: allow killing tasks in your own or child userns\n\nChangelog:\n\tDec  8: Fixed bug in my check_kill_permission pointed out by\n\t        Eric Biederman.\n\tDec 13: Apply Eric\u0027s suggestion to pass target task into kill_ok_by_cred()\n\t        for clarity\n\tDec 31: address comment by Eric Biederman:\n\t\tdon\u0027t need cred/tcred in check_kill_permission.\n\tJan  1: use const cred struct.\n\tJan 11: Per Bastian Blank\u0027s advice, clean up kill_ok_by_cred().\n\tFeb 16: kill_ok_by_cred: fix bad parentheses\n\tFeb 23: per akpm, let compiler inline kill_ok_by_cred\n\nSigned-off-by: Serge E. Hallyn \u003cserge.hallyn@canonical.com\u003e\nAcked-by: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nAcked-by: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "244056f9dbbc6dc4126a301c745fa3dd67d8af3c",
      "tree": "dced7105f53b5d5ed34e170d77f5c6ab0172542a",
      "parents": [
        "ceb6bd67f9b9db765e1c29405f26e8460391badd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Don\u0027t send duplicate job control stop notification while ptraced\n\nJust as group_exit_code shouldn\u0027t be generated when a PTRACE_CONT\u0027d\ntask re-enters job control stop, notifiction for the event should be\nsuppressed too.  The logic is the same as the group_exit_code\ngeneration suppression in do_signal_stop(), if SIGNAL_STOP_STOPPED is\nalready set, the task is re-entering job control stop without\nintervening SIGCONT and the notifications should be suppressed.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003csignal.h\u003e\n  #include \u003ctime.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  static const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n  static pid_t tracee, tracer;\n\n  static const char *pid_who(pid_t pid)\n  {\n\t  return pid \u003d\u003d tracee ? \"tracee\" : (pid \u003d\u003d tracer ? \"tracer\" : \"mommy \");\n  }\n\n  static void sigchld_sigaction(int signo, siginfo_t *si, void *ucxt)\n  {\n\t  printf(\"%s: SIG status\u003d%02d code\u003d%02d (%s)\\n\",\n\t\t pid_who(getpid()), si-\u003esi_status, si-\u003esi_code,\n\t\t pid_who(si-\u003esi_pid));\n  }\n\n  int main(void)\n  {\n\t  const struct sigaction chld_sa \u003d { .sa_sigaction \u003d sigchld_sigaction,\n\t\t\t\t\t     .sa_flags \u003d SA_SIGINFO|SA_RESTART };\n\t  siginfo_t si;\n\n\t  sigaction(SIGCHLD, \u0026chld_sa, NULL);\n\n\t  tracee \u003d fork();\n\t  if (!tracee) {\n\t\t  tracee \u003d getpid();\n\t\t  while (1)\n\t\t\t  pause();\n\t  }\n\n\t  kill(tracee, SIGSTOP);\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  tracer \u003d getpid();\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  printf(\"tracer: detaching\\n\");\n\t\t  ptrace(PTRACE_DETACH, tracee, NULL, NULL);\n\t\t  return 0;\n\t  }\n\n\t  while (1)\n\t\t  pause();\n\t  return 0;\n  }\n\nBefore the patch, the parent gets the second notification for the\ntracee after the tracer detaches.  si_status is zero because\ngroup_exit_code is not set by the group stop completion which\ntriggered this notification.\n\n  mommy : SIG status\u003d19 code\u003d05 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: SIG status\u003d19 code\u003d04 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: detaching\n  mommy : SIG status\u003d00 code\u003d05 (tracee)\n  mommy : SIG status\u003d00 code\u003d01 (tracer)\n  ^C\n\nAfter the patch, the duplicate notification is gone.\n\n  mommy : SIG status\u003d19 code\u003d05 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: SIG status\u003d19 code\u003d04 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: detaching\n  mommy : SIG status\u003d00 code\u003d01 (tracer)\n  ^C\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "ceb6bd67f9b9db765e1c29405f26e8460391badd",
      "tree": "d4db6cfe58bf2d84bf6af8f1079619050f6c8adc",
      "parents": [
        "62bcf9d992ecc19ea4f37ff57ee0b3333e3e843e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Notify the real parent of job control events regardless of ptrace\n\nWith recent changes, job control and ptrace stopped states are\nproperly separated and accessible to the real parent and the ptracer\nrespectively; however, notifications of job control stopped/continued\nevents to the real parent while ptraced are still missing.\n\nA ptracee participates in group stop in ptrace_stop() but the\ncompletion isn\u0027t notified.  If participation results in completion of\ngroup stop, notify the real parent of the event.  The ptrace and group\nstops are separate and can be handled as such.\n\nHowever, when the real parent and the ptracer are in the same thread\ngroup, only the ptrace stop event is visible through wait(2) and the\nduplicate notifications are different from the current behavior and\nare confusing.  Suppress group stop notification in such cases.\n\nThe continued state is shared between the real parent and the ptracer\nbut is only meaningful to the real parent.  Always notify the real\nparent and notify the ptracer too for backward compatibility.  Similar\nto stop notification, if the real parent is the ptracer, suppress a\nduplicate notification.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003ctime.h\u003e\n  #include \u003cerrno.h\u003e\n  #include \u003csys/types.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  int main(void)\n  {\n\t  const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n\t  pid_t tracee, tracer;\n\t  siginfo_t si;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (tracee \u003d\u003d 0) {\n\t\t  while (1) {\n\t\t\t  printf(\"tracee: SIGSTOP\\n\");\n\t\t\t  raise(SIGSTOP);\n\t\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t\t  printf(\"tracee: SIGCONT\\n\");\n\t\t\t  raise(SIGCONT);\n\t\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  }\n\t  }\n\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WNOHANG | WNOWAIT);\n\n\t  tracer \u003d fork();\n\t  if (tracer \u003d\u003d 0) {\n\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\n\t\t  for (i \u003d 0; i \u003c 11; i++) {\n\t\t\t  si.si_pid \u003d 0;\n\t\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t\t  if (si.si_pid \u0026\u0026 si.si_code \u003d\u003d CLD_TRAPPED)\n\t\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t\t (void *)(long)si.si_status);\n\t\t  }\n\t\t  printf(\"tracer: EXITING\\n\");\n\t\t  return 0;\n\t  }\n\n\t  while (1) {\n\t\t  si.si_pid \u003d 0;\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WCONTINUED | WEXITED);\n\t\t  if (si.si_pid)\n\t\t\t  printf(\"mommy : WAIT status\u003d%02d code\u003d%02d\\n\",\n\t\t\t\t si.si_status, si.si_code);\n\t  }\n\t  return 0;\n  }\n\nBefore this patch, while ptraced, the real parent doesn\u0027t get\nnotifications for job control events, so although it can access those\nevents, the later waitid(2) call never wakes up.\n\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracer: EXITING\n  mommy : WAIT status\u003d19 code\u003d05\n  ^C\n\nAfter this patch, it works as expected.\n\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  tracer: EXITING\n  mommy : WAIT status\u003d19 code\u003d05\n  ^C\n\n-v2: Oleg pointed out that\n\n     * Group stop notification to the real parent should also happen\n       when ptracer detach races with ptrace_stop().\n\n     * real_parent_is_ptracer() should be testing thread group\n       equality not the task itself as wait(2) and stop/cont\n       notifications are normally thread-group wide.\n\n     Both issues are fixed accordingly.\n\n-v3: real_parent_is_ptracer() updated to test child-\u003ereal_parent\n     instead of child-\u003egroup_leader-\u003ereal_parent per Oleg\u0027s\n     suggestion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "62bcf9d992ecc19ea4f37ff57ee0b3333e3e843e",
      "tree": "a02286c9afffcda9361e0422370b78fe953df7de",
      "parents": [
        "75b95953a56969a990e6ce154b260be83818fe71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Job control stop notifications should always go to the real parent\n\nThe stopped notifications in do_signal_stop() and exit_signals() are\nalways for the completion of job control.  The one in do_signal_stop()\nmay be delivered to the ptracer if PTRACE_ATTACH races with\nnotification and the one in exit_signals() if task exits while\nptraced.\n\nIn both cases, the notifications are meaningless and confusing to the\nptracer as it never accesses the group stop state while the real\nparent would miss notifications for the events it is watching.\n\nMake sure these notifications always go to the real parent by calling\ndo_notify_parent_cld_stop() with %false @for_ptrace.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "75b95953a56969a990e6ce154b260be83818fe71",
      "tree": "a6a78c433a1ace907511f71be289cdd16ec1137f",
      "parents": [
        "45cb24a1da53beb70f09efccc0373f6a47a9efe0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Add @for_ptrace to do_notify_parent_cldstop()\n\nCurrently, do_notify_parent_cldstop() determines whether the\nnotification is for the real parent or ptracer.  Move the decision to\nthe caller by adding @for_ptrace parameter to\ndo_notify_parent_cldstop().  All the callers are updated to pass\ntask_ptrace(target_task), so this patch doesn\u0027t cause any behavior\ndifference.\n\nWhile at it, add function comment to do_notify_parent_cldstop().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "408a37de6c95832a4880a88a742f89f0cc554d06",
      "tree": "14e89583cd01a91a75e93b262e162e623847d2ef",
      "parents": [
        "0e9f0a4abfd80f8adca624538d479d95159b16d8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Don\u0027t set group_stop exit_code if re-entering job control stop\n\nWhile ptraced, a task may be resumed while the containing process is\nstill job control stopped.  If the task receives another stop signal\nin this state, it will still initiate group stop, which generates\ngroup_exit_code, which the real parent would be able to see once the\nptracer detaches.\n\nIn this scenario, the real parent may see two consecutive CLD_STOPPED\nevents from two stop signals without intervening SIGCONT, which\nnormally is impossible.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  int main(void)\n  {\n\t  pid_t tracee;\n\t  siginfo_t si;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  kill(tracee, SIGSTOP);\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\n\t  if (!fork()) {\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_DETACH, tracee, NULL, NULL);\n\t\t  return 0;\n\t  }\n\n\t  while (1) {\n\t\t  si.si_pid \u003d 0;\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WNOHANG);\n\t\t  if (si.si_pid)\n\t\t\t  printf(\"st\u003d%02d c\u003d%02d\\n\", si.si_status, si.si_code);\n\t  }\n\t  return 0;\n  }\n\nBefore the patch, the latter waitid() in polling mode reports the\nsecond stopped event generated by the implied SIGSTOP of\nPTRACE_ATTACH.\n\n  st\u003d19 c\u003d05\n  ^C\n\nAfter the patch, the second event is not reported.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d79fdd6d96f46fabb779d86332e3677c6f5c2a4f",
      "tree": "2797e34888c687b47997b7c7ea3150468bcbb737",
      "parents": [
        "5224fa3660ad3881d2f2ad726d22614117963f10"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Clean transitions between TASK_STOPPED and TRACED\n\nCurrently, if the task is STOPPED on ptrace attach, it\u0027s left alone\nand the state is silently changed to TRACED on the next ptrace call.\nThe behavior breaks the assumption that arch_ptrace_stop() is called\nbefore any task is poked by ptrace and is ugly in that a task\nmanipulates the state of another task directly.\n\nWith GROUP_STOP_PENDING, the transitions between TASK_STOPPED and\nTRACED can be made clean.  The tracer can use the flag to tell the\ntracee to retry stop on attach and detach.  On retry, the tracee will\nenter the desired state in the correct way.  The lower 16bits of\ntask-\u003egroup_stop is used to remember the signal number which caused\nthe last group stop.  This is used while retrying for ptrace attach as\nthe original group_exit_code could have been consumed with wait(2) by\nthen.\n\nAs the real parent may wait(2) and consume the group_exit_code\nanytime, the group_exit_code needs to be saved separately so that it\ncan be used when switching from regular sleep to ptrace_stop().  This\nis recorded in the lower 16bits of task-\u003egroup_stop.\n\nIf a task is already stopped and there\u0027s no intervening SIGCONT, a\nptrace request immediately following a successful PTRACE_ATTACH should\nalways succeed even if the tracer doesn\u0027t wait(2) for attach\ncompletion; however, with this change, the tracee might still be\nTASK_RUNNING trying to enter TASK_TRACED which would cause the\nfollowing request to fail with -ESRCH.\n\nThis intermediate state is hidden from the ptracer by setting\nGROUP_STOP_TRAPPING on attach and making ptrace_check_attach() wait\nfor it to clear on its signal-\u003ewait_chldexit.  Completing the\ntransition or getting killed clears TRAPPING and wakes up the tracer.\n\nNote that the STOPPED -\u003e RUNNING -\u003e TRACED transition is still visible\nto other threads which are in the same group as the ptracer and the\nreverse transition is visible to all.  Please read the comments for\ndetails.\n\nOleg:\n\n* Spotted a race condition where a task may retry group stop without\n  proper bookkeeping.  Fixed by redoing bookkeeping on retry.\n\n* Spotted that the transition is visible to userland in several\n  different ways.  Most are fixed with GROUP_STOP_TRAPPING.  Unhandled\n  corner case is documented.\n\n* Pointed out not setting GROUP_STOP_SIGMASK on an already stopped\n  task would result in more consistent behavior.\n\n* Pointed out that calling ptrace_stop() from do_signal_stop() in\n  TASK_STOPPED can race with group stop start logic and then confuse\n  the TRAPPING wait in ptrace_check_attach().  ptrace_stop() is now\n  called with TASK_RUNNING.\n\n* Suggested using signal-\u003ewait_chldexit instead of bit wait.\n\n* Spotted a race condition between TRACED transition and clearing of\n  TRAPPING.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Jan Kratochvil \u003cjan.kratochvil@redhat.com\u003e\n"
    },
    {
      "commit": "5224fa3660ad3881d2f2ad726d22614117963f10",
      "tree": "1e8806eda6058bf019f06c8500ec293a757f9331",
      "parents": [
        "0ae8ce1c8c5b9007ce6bfc83ec2aa0dfce5bbed3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Make do_signal_stop() use ptrace_stop() if the task is being ptraced\n\nA ptraced task would still stop at do_signal_stop() when it\u0027s stopping\nfor stop signals and do_signal_stop() behaves the same whether the\ntask is ptraced or not.  However, in addition to stopping,\nptrace_stop() also does ptrace specific stuff like calling\narchitecture specific callbacks, so this behavior makes the code more\nfragile and difficult to understand.\n\nThis patch makes do_signal_stop() test whether the task is ptraced and\nuse ptrace_stop() if so.  This renders tracehook_notify_jctl() rather\npointless as the ptrace notification is now handled by ptrace_stop()\nregardless of the return value from the tracehook.  It probably is a\ngood idea to update it.\n\nThis doesn\u0027t solve the whole problem as tasks already in stopped state\nwould stay in the regular stop when ptrace attached.  That part will\nbe handled by the next patch.\n\nOleg pointed out that this makes a userland-visible change.  Before,\nSIGCONT would be able to wake up a task in group stop even if the task\nis ptraced if the tracer hasn\u0027t issued another ptrace command\nafterwards (as the next ptrace commands transitions the state into\nTASK_TRACED which ignores SIGCONT wakeups).  With this and the next\npatch, SIGCONT may race with the transition into TASK_TRACED and is\nignored if the tracee already entered TASK_TRACED.\n\nAnother userland visible change of this and the next patch is that the\nptracee\u0027s state would now be TASK_TRACED where it used to be\nTASK_STOPPED, which is visible via fs/proc.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Jan Kratochvil \u003cjan.kratochvil@redhat.com\u003e\n"
    },
    {
      "commit": "0ae8ce1c8c5b9007ce6bfc83ec2aa0dfce5bbed3",
      "tree": "f92abf6b41e9524966849972427fadcb7a7ef3f7",
      "parents": [
        "39efa3ef3a376a4e53de2f82fc91182459d34200"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Participate in group stop from ptrace_stop() iff the task is trapping for group stop\n\nCurrently, ptrace_stop() unconditionally participates in group stop\nbookkeeping.  This is unnecessary and inaccurate.  Make it only\nparticipate if the task is trapping for group stop - ie. if @why is\nCLD_STOPPED.  As ptrace_stop() currently is not used when trapping for\ngroup stop, this equals to disabling group stop participation from\nptrace_stop().\n\nA visible behavior change is increased likelihood of delayed group\nstop completion if the thread group contains one or more ptraced\ntasks.\n\nThis is to preapre for further cleanup of the interaction between\ngroup stop and ptrace.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "39efa3ef3a376a4e53de2f82fc91182459d34200",
      "tree": "f75a44fa77396edcf74e41686912554f96681340",
      "parents": [
        "e5c1902e9260a0075ea52cb5ef627a8d9aaede89"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "signal: Use GROUP_STOP_PENDING to stop once for a single group stop\n\nCurrently task-\u003esignal-\u003egroup_stop_count is used to decide whether to\nstop for group stop.  However, if there is a task in the group which\nis taking a long time to stop, other tasks which are continued by\nptrace would repeatedly stop for the same group stop until the group\nstop is complete.\n\nConversely, if a ptraced task is in TASK_TRACED state, the debugger\nwon\u0027t get notified of group stops which is inconsistent compared to\nthe ptraced task in any other state.\n\nThis patch introduces GROUP_STOP_PENDING which tracks whether a task\nis yet to stop for the group stop in progress.  The flag is set when a\ngroup stop starts and cleared when the task stops the first time for\nthe group stop, and consulted whenever whether the task should\nparticipate in a group stop needs to be determined.  Note that now\ntasks in TASK_TRACED also participate in group stop.\n\nThis results in the following behavior changes.\n\n* For a single group stop, a ptracer would see at most one stop\n  reported.\n\n* A ptracee in TASK_TRACED now also participates in group stop and the\n  tracer would get the notification.  However, as a ptraced task could\n  be in TASK_STOPPED state or any ptrace trap could consume group\n  stop, the notification may still be missing.  These will be\n  addressed with further patches.\n\n* A ptracee may start a group stop while one is still in progress if\n  the tracer let it continue with stop signal delivery.  Group stop\n  code handles this correctly.\n\nOleg:\n\n* Spotted that a task might skip signal check even when its\n  GROUP_STOP_PENDING is set.  Fixed by updating\n  recalc_sigpending_tsk() to check GROUP_STOP_PENDING instead of\n  group_stop_count.\n\n* Pointed out that task-\u003egroup_stop should be cleared whenever\n  task-\u003esignal-\u003egroup_stop_count is cleared.  Fixed accordingly.\n\n* Pointed out the behavior inconsistency between TASK_TRACED and\n  RUNNING and the last behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "e5c1902e9260a0075ea52cb5ef627a8d9aaede89",
      "tree": "0fc5ec2460fecfe564323d89227bec9293238c2a",
      "parents": [
        "fe1bc6a0954611b806f9e158eb0817cf8ba21660"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "signal: Fix premature completion of group stop when interfered by ptrace\n\ntask-\u003esignal-\u003egroup_stop_count is used to track the progress of group\nstop.  It\u0027s initialized to the number of tasks which need to stop for\ngroup stop to finish and each stopping or trapping task decrements.\nHowever, each task doesn\u0027t keep track of whether it decremented the\ncounter or not and if woken up before the group stop is complete and\nstops again, it can decrement the counter multiple times.\n\nPlease consider the following example code.\n\n static void *worker(void *arg)\n {\n\t while (1) ;\n\t return NULL;\n }\n\n int main(void)\n {\n\t pthread_t thread;\n\t pid_t pid;\n\t int i;\n\n\t pid \u003d fork();\n\t if (!pid) {\n\t\t for (i \u003d 0; i \u003c 5; i++)\n\t\t\t pthread_create(\u0026thread, NULL, worker, NULL);\n\t\t while (1) ;\n\t\t return 0;\n\t }\n\n\t ptrace(PTRACE_ATTACH, pid, NULL, NULL);\n\t while (1) {\n\t\t waitid(P_PID, pid, NULL, WSTOPPED);\n\t\t ptrace(PTRACE_SINGLESTEP, pid, NULL, (void *)(long)SIGSTOP);\n\t }\n\t return 0;\n }\n\nThe child creates five threads and the parent continuously traps the\nfirst thread and whenever the child gets a signal, SIGSTOP is\ndelivered.  If an external process sends SIGSTOP to the child, all\nother threads in the process should reliably stop.  However, due to\nthe above bug, the first thread will often end up consuming\ngroup_stop_count multiple times and SIGSTOP often ends up stopping\nnone or part of the other four threads.\n\nThis patch adds a new field task-\u003egroup_stop which is protected by\nsiglock and uses GROUP_STOP_CONSUME flag to track which task is still\nto consume group_stop_count to fix this bug.\n\ntask_clear_group_stop_pending() and task_participate_group_stop() are\nadded to help manipulating group stop states.  As ptrace_stop() now\nalso uses task_participate_group_stop(), it will set\nSIGNAL_STOP_STOPPED if it completes a group stop.\n\nThere still are many issues regarding the interaction between group\nstop and ptrace.  Patches to address them will follow.\n\n- Oleg spotted duplicate GROUP_STOP_CONSUME.  Dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "fe1bc6a0954611b806f9e158eb0817cf8ba21660",
      "tree": "356b804f797a53b95976f1c4b75a4671277208c1",
      "parents": [
        "edf2ed153bcae52de70db00a98b0e81a5668e563"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Add @why to ptrace_stop()\n\nTo prepare for cleanup of the interaction between group stop and\nptrace, add @why to ptrace_stop().  Existing users are updated such\nthat there is no behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "edf2ed153bcae52de70db00a98b0e81a5668e563",
      "tree": "78aa0207d78321778d6a504c8138d5bc9ef4b4b4",
      "parents": [
        "71db5eb99c960e9c30e4b3ed04103c513b6251b5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Kill tracehook_notify_jctl()\n\ntracehook_notify_jctl() aids in determining whether and what to report\nto the parent when a task is stopped or continued.  The function also\nadds an extra requirement that siglock may be released across it,\nwhich is currently unused and quite difficult to satisfy in\nwell-defined manner.\n\nAs job control and the notifications are about to receive major\noverhaul, remove the tracehook and open code it.  If ever necessary,\nlet\u0027s factor it out after the overhaul.\n\n* Oleg spotted incorrect CLD_CONTINUED/STOPPED selection when ptraced.\n  Fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "71db5eb99c960e9c30e4b3ed04103c513b6251b5",
      "tree": "89732a4c7bef3c0740ebe0212fc2b432de2d8609",
      "parents": [
        "9f2bf6513a6cca0b00cbbf67ba6197017cfba548"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "signal: Remove superflous try_to_freeze() loop in do_signal_stop()\n\ndo_signal_stop() is used only by get_signal_to_deliver() and after a\nsuccessful signal stop, it always calls try_to_freeze(), so the\ntry_to_freeze() loop around schedule() in do_signal_stop() is\nsuperflous and confusing.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "c672af35d54992b88d3c48133bd62cc3386fb2f9",
      "tree": "32232508b7f736d066a4b4e2acfbb9812f9b383f",
      "parents": [
        "6447f55da90b77faec1697d499ed7986bb4f6de6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:36:59 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:36:59 2011 +0100"
      },
      "message": "signal: Fix SIGCONT notification code\n\nAfter a task receives SIGCONT, its parent is notified via SIGCHLD with\nits siginfo describing what the notified event is.  If SIGCONT is\nreceived while the child process is stopped, the code should be\nCLD_CONTINUED.  If SIGCONT is recieved while the child process is in\nthe process of being stopped, it should be CLD_STOPPED.  Which code to\nuse is determined in prepare_signal() and recorded in signal-\u003eflags\nusing SIGNAL_CLD_CONTINUED|STOP flags.\n\nget_signal_deliver() should test these flags and then notify\naccoringly; however, it incorrectly tested SIGNAL_STOP_CONTINUED\ninstead of SIGNAL_CLD_CONTINUED, thus incorrectly notifying\nCLD_CONTINUED if the signal is delivered before the task is wait(2)ed\nand CLD_STOPPED if the state was fetched already.\n\nFix it by testing SIGNAL_CLD_CONTINUED.  While at it, uncompress the\n?: test into if/else clause for better readability.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "da48524eb20662618854bb3df2db01fc65f3070c",
      "tree": "0e9a9aa0c091e96f110a6ef121f0b31f99491325",
      "parents": [
        "b52307ca144881bf9ef1c2610b3f1911472eb467"
      ],
      "author": {
        "name": "Julien Tinnes",
        "email": "jln@google.com",
        "time": "Fri Mar 18 15:05:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 21 14:23:43 2011 -0700"
      },
      "message": "Prevent rt_sigqueueinfo and rt_tgsigqueueinfo from spoofing the signal code\n\nUserland should be able to trust the pid and uid of the sender of a\nsignal if the si_code is SI_TKILL.\n\nUnfortunately, the kernel has historically allowed sigqueueinfo() to\nsend any si_code at all (as long as it was negative - to distinguish it\nfrom kernel-generated signals like SIGILL etc), so it could spoof a\nSI_TKILL with incorrect siginfo values.\n\nHappily, it looks like glibc has always set si_code to the appropriate\nSI_QUEUE, so there are probably no actual user code that ever uses\nanything but the appropriate SI_QUEUE flag.\n\nSo just tighten the check for si_code (we used to allow any negative\nvalue), and add a (one-time) warning in case there are binaries out\nthere that might depend on using other si_code values.\n\nSigned-off-by: Julien Tinnes \u003cjln@google.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b84011508360d6885a9d95a235ec77d56f133377",
      "tree": "471f4aecda99cb5f82b0fa957887c10d5d176960",
      "parents": [
        "b8ed374e202e23caaf9bd77dcadc9de6447faaa8"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Oct 27 15:34:07 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:12 2010 -0700"
      },
      "message": "signals: annotate lock context change on ptrace_stop()\n\nptrace_stop() releases and regrabs current-\u003esighand-\u003esiglock but was\nmissing proper annotation.  Add it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b8ed374e202e23caaf9bd77dcadc9de6447faaa8",
      "tree": "ea97fe186c7e0c0ee8cd61e0fc94dc42f635fd3b",
      "parents": [
        "5ef45079dd9c8f2e9c7aa788dc3121835ae52863"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Oct 27 15:34:06 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:12 2010 -0700"
      },
      "message": "signals: annotate lock_task_sighand()\n\nlock_task_sighand() grabs sighand-\u003esiglock in case of returning non-NULL\nbut unlock_task_sighand() releases it unconditionally.  This leads sparse\nto complain about the lock context imbalance.  Rename and wrap\nlock_task_sighand() using __cond_lock() macro to make sparse happy.\n\nSuggested-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a337fdac7a5622d1e6547f4b476c14dfe5a2c892",
      "tree": "2c4072b1188235f348f4ee58e18a027ec61ea4dc",
      "parents": [
        "67159813127309c1a65d86e40fa0368241fa668c"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Sep 27 20:32:19 2010 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Thu Oct 07 09:41:25 2010 +0200"
      },
      "message": "HWPOISON: Copy si_addr_lsb to user\n\nThe original hwpoison code added a new siginfo field si_addr_lsb to\npass the granuality of the fault address to user space. Unfortunately\nthis field was never copied to user space. Fix this here.\n\nI added explicit checks for the MCEERR codes to avoid having\nto patch all potential callers to initialize the field.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "694f690d27dadccc8cb9d90532e76593b61fe098",
      "tree": "ea641e53ae530d0d3708fbfcab8109cc5e840d21",
      "parents": [
        "e75aa85892b2ee78c79edac720868cbef16e62eb"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Aug 04 16:59:14 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 04 11:17:10 2010 -0700"
      },
      "message": "CRED: Fix RCU warning due to previous patch fixing __task_cred()\u0027s checks\n\nCommit 8f92054e7ca1 (\"CRED: Fix __task_cred()\u0027s lockdep check and banner\ncomment\") fixed the lockdep checks on __task_cred().  This has shown up\na place in the signalling code where a lock should be held - namely that\ncheck_kill_permission() requires its callers to hold the RCU lock.\n\nFix group_send_sig_info() to get the RCU read lock around its call to\ncheck_kill_permission().\n\nWithout this patch, the following warning can occur:\n\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  [ INFO: suspicious rcu_dereference_check() usage. ]\n  ---------------------------------------------------\n  kernel/signal.c:660 invoked rcu_dereference_check() without protection!\n  ...\n\nReported-by: Tetsuo Handa \u003cpenguin-kernel@i-love.sakura.ne.jp\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "09faef11df8c559a23e2405d123cb2683733a79a",
      "tree": "db8e4c94677be8afebde938c2e6b7ba07b6b6db0",
      "parents": [
        "9c3391684415c9dca239130d9e433a60a4edf04b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "exit: change zap_other_threads() to count sub-threads\n\nChange zap_other_threads() to return the number of other sub-threads found\non -\u003ethread_group list.\n\nOther changes are cosmetic:\n\n\t- change the code to use while_each_thread() helper\n\n\t- remove the obsolete comment about SIGKILL/SIGSTOP\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "065add3941bdca54fe04ed3471a96bce9af88793",
      "tree": "0c3505a04bb1b54926c527644c0ee2f57680c250",
      "parents": [
        "e0129ef91ed758c06b6557c36124acfb2e1c7305"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:42:54 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:44 2010 -0700"
      },
      "message": "signals: check_kill_permission(): don\u0027t check creds if same_thread_group()\n\nAndrew Tridgell reports that aio_read(SIGEV_SIGNAL) can fail if the\nnotification from the helper thread races with setresuid(), see\nhttp://samba.org/~tridge/junkcode/aio_uid.c\n\nThis happens because check_kill_permission() doesn\u0027t permit sending a\nsignal to the task with the different cred-\u003exids.  But there is not any\nsecurity reason to check -\u003ecred\u0027s when the task sends a signal (private or\ngroup-wide) to its sub-thread.  Whatever we do, any thread can bypass all\nsecurity checks and send SIGKILL to all threads, or it can block a signal\nSIG and do kill(gettid(), SIG) to deliver this signal to another\nsub-thread.  Not to mention that CLONE_THREAD implies CLONE_VM.\n\nChange check_kill_permission() to avoid the credentials check when the\nsender and the target are from the same thread group.\n\nAlso, move \"cred \u003d current_cred()\" down to avoid calling get_current()\ntwice.\n\nNote: David Howells pointed out we could relax this even more, the\nCLONE_SIGHAND (without CLONE_THREAD) case probably does not need\nthese checks too.\n\nRoland said:\n: The glibc (libpthread) that does set*id across threads has\n: been in use for a while (2.3.4?), probably in distro\u0027s using kernels as old\n: or older than any active -stable streams.  In the race in question, this\n: kernel bug is breaking valid POSIX application expectations.\n\nReported-by: Andrew Tridgell \u003ctridge@samba.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: Eric Paris \u003ceparis@parisplace.org\u003e\nCc: Jakub Jelinek \u003cjakub@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[all kernel versions]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "67fc4e0cb931d6b4ccf21248e4199b154478ecea",
      "tree": "4cf49d00bc9ac03c3c77d91fadd13fcabc75e0c9",
      "parents": [
        "5d5314d6795f3c1c0f415348ff8c51f7de042b77"
      ],
      "author": {
        "name": "Jason Wessel",
        "email": "jason.wessel@windriver.com",
        "time": "Thu May 20 21:04:21 2010 -0500"
      },
      "committer": {
        "name": "Jason Wessel",
        "email": "jason.wessel@windriver.com",
        "time": "Thu May 20 21:04:21 2010 -0500"
      },
      "message": "kdb: core for kgdb back end (2 of 2)\n\nThis patch contains the hooks and instrumentation into kernel which\nlive outside the kernel/debug directory, which the kdb core\nwill call to run commands like lsmod, dmesg, bt etc...\n\nCC: linux-arch@vger.kernel.org\nSigned-off-by: Jason Wessel \u003cjason.wessel@windriver.com\u003e\nSigned-off-by: Martin Hicks \u003cmort@sgi.com\u003e\n"
    },
    {
      "commit": "78d7d407b62a021e6d2e8dc24c0b90e390ab58a1",
      "tree": "8c1074b84db4b977bad6802a3701e0113c0a7739",
      "parents": [
        "d4bb527438b4181cd3c564ae04dd344c381283a1"
      ],
      "author": {
        "name": "Jiri Slaby",
        "email": "jslaby@suse.cz",
        "time": "Fri Mar 05 13:42:54 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:33 2010 -0800"
      },
      "message": "kernel core: use helpers for rlimits\n\nMake sure compiler won\u0027t do weird things with limits.  E.g.  fetching them\ntwice may return 2 different values after writable limits are implemented.\n\nI.e.  either use rlimit helpers added in commit 3e10e716abf3 (\"resource:\nadd helpers for fetching rlimits\") or ACCESS_ONCE if not applicable.\n\nSigned-off-by: Jiri Slaby \u003cjslaby@suse.cz\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a27341cd5fcb7cf2d2d4726e9f324009f7162c00",
      "tree": "5b55a232509de5791ad00a15da3eaa93c3ae55c6",
      "parents": [
        "eaa5eec739637f32f8733d528ff0b94fd62b1214"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 02 08:36:46 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 03 19:21:10 2010 -0800"
      },
      "message": "Prioritize synchronous signals over \u0027normal\u0027 signals\n\nThis makes sure that we pick the synchronous signals caused by a\nprocessor fault over any pending regular asynchronous signals sent to\nuse by [t]kill().\n\nThis is not strictly required semantics, but it makes it _much_ easier\nfor programs like Wine that expect to find the fault information in the\nsignal stack.\n\nWithout this, if a non-synchronous signal gets picked first, the delayed\nasynchronous signal will have its signal context pointing to the new\nsignal invocation, rather than the instruction that caused the SIGSEGV\nor SIGBUS in the first place.\n\nThis is not all that pretty, and we\u0027re discussing making the synchronous\nsignals more explicit rather than have these kinds of implicit\npreferences of SIGSEGV and friends.  See for example\n\n\thttp://bugzilla.kernel.org/show_bug.cgi?id\u003d15395\n\nfor some of the discussion.  But in the meantime this is a simple and\nfairly straightforward work-around, and the whole\n\n\tif (x \u0026 Y)\n\t\tx \u0026\u003d Y;\n\nthing can be compiled into (and gcc does do it) just three instructions:\n\n\tmovq    %rdx, %rax\n\tandl    $Y, %eax\n\tcmovne  %rax, %rdx\n\nso it is at least a simple solution to a subtle issue.\n\nReported-and-tested-by: Pavel Vilim \u003cwylda@volny.cz\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b45c6e76bc2c72f6426c14bed64fdcbc9bf37cb0",
      "tree": "5b1d7a869db512f1297c82142adf006c3c6786c0",
      "parents": [
        "bd4f490a079730aadfaf9a728303ea0135c01945"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "andi@firstfloor.org",
        "time": "Fri Jan 08 14:42:52 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 11 09:34:05 2010 -0800"
      },
      "message": "kernel/signal.c: fix kernel information leak with print-fatal-signals\u003d1\n\nWhen print-fatal-signals is enabled it\u0027s possible to dump any memory\nreachable by the kernel to the log by simply jumping to that address from\nuser space.\n\nOr crash the system if there\u0027s some hardware with read side effects.\n\nThe fatal signals handler will dump 16 bytes at the execution address,\nwhich is fully controlled by ring 3.\n\nIn addition when something jumps to a unmapped address there will be up to\n16 additional useless page faults, which might be potentially slow (and at\nleast is not very efficient)\n\nFortunately this option is off by default and only there on i386.\n\nBut fix it by checking for kernel addresses and also stopping when there\u0027s\na page fault.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "10e5453ffa0d04a2eda3cda3f55b88cb9c04595f",
      "tree": "def247dc399549bc1359fe9d1faa49c621f8890d",
      "parents": [
        "3cd312c3e887b4bee2d94668a481b3d19c07732c",
        "d4581a239a40319205762b76c01eb6363f277efa"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Dec 19 09:47:34 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Dec 19 09:47:34 2009 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  sys: Fix missing rcu protection for __task_cred() access\n  signals: Fix more rcu assumptions\n  signal: Fix racy access to __task_cred in kill_pid_info_as_uid()\n"
    },
    {
      "commit": "1be53963b0519bd3681749a9bed8b83aeb005cca",
      "tree": "0bc6497a8039021f781f1c902f59e6f71f772793",
      "parents": [
        "ad09750b51150ca87531b8790a379214a974c167"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Dec 15 16:47:26 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:09 2009 -0800"
      },
      "message": "signals: check -\u003egroup_stop_count after tracehook_get_signal()\n\nMove the call to do_signal_stop() down, after tracehook call.  This makes\n-\u003egroup_stop_count condition visible to tracers before do_signal_stop()\nwill participate in this group-stop.\n\nCurrently the patch has no effect, tracehook_get_signal() always returns 0.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ad09750b51150ca87531b8790a379214a974c167",
      "tree": "785520da252e18a058642c7bc95dda35100e4565",
      "parents": [
        "7486e5d9fc773cb67c29381567bed5236fc9573c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Dec 15 16:47:25 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:09 2009 -0800"
      },
      "message": "signals: kill force_sig_specific()\n\nKill force_sig_specific(), this trivial wrapper has no callers.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Sukadev Bhattiprolu \u003csukadev@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7486e5d9fc773cb67c29381567bed5236fc9573c",
      "tree": "848f10295391c27ca16c8c58812f5e7a81856280",
      "parents": [
        "dd34200adc01c5217ef09b55905b5c2312d65535"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Dec 15 16:47:24 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:09 2009 -0800"
      },
      "message": "signals: cosmetic, collect_signal: use SI_USER\n\nTrivial, s/0/SI_USER/ in collect_signal() for grep.\n\nThis is a bit confusing, we don\u0027t know the source of this signal.\nBut we don\u0027t care, and \"info-\u003esi_code \u003d 0\" is imho worse.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Sukadev Bhattiprolu \u003csukadev@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dd34200adc01c5217ef09b55905b5c2312d65535",
      "tree": "7173ed6b5531086923a9221ef502f1dd2793c8a4",
      "parents": [
        "614c517d7c00af1b26ded20646b329397d6f51a1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Dec 15 16:47:24 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:09 2009 -0800"
      },
      "message": "signals: send_signal: use si_fromuser() to detect from_ancestor_ns\n\nChange send_signal() to use si_fromuser().  From now SEND_SIG_NOINFO\ntriggers the \"from_ancestor_ns\" check.\n\nThis fixes reparent_thread()-\u003egroup_send_sig_info(pdeath_signal)\nbehaviour, before this patch send_signal() does not detect the\ncross-namespace case when the child of the dying parent belongs to the\nsub-namespace.\n\nThis patch can affect the behaviour of send_sig(), kill_pgrp() and\nkill_pid() when the caller sends the signal to the sub-namespace with\n\"priv \u003d\u003d 0\" but surprisingly all callers seem to use them correctly,\nincluding disassociate_ctty(on_exit).\n\nExcept: drivers/staging/comedi/drivers/addi-data/*.c incorrectly use\nsend_sig(priv \u003d\u003e 0).  But his is minor and should be fixed anyway.\n\nReported-by: Daniel Lezcano \u003cdlezcano@fr.ibm.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nReviewed-by: Sukadev Bhattiprolu \u003csukadev@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "614c517d7c00af1b26ded20646b329397d6f51a1",
      "tree": "ddd7a82b3479c9fabe141b4c82a1794650a82b4f",
      "parents": [
        "d51965037325e51f6cd68583413243c3573e47b0"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Dec 15 16:47:22 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 16 07:20:08 2009 -0800"
      },
      "message": "signals: SEND_SIG_NOINFO should be considered as SI_FROMUSER()\n\nNo changes in compiled code. The patch adds the new helper, si_fromuser()\nand changes check_kill_permission() to use this helper.\n\nThe real effect of this patch is that from now we \"officially\" consider\nSEND_SIG_NOINFO signal as \"from user-space\" signals. This is already true\nif we look at the code which uses SEND_SIG_NOINFO, except __send_signal()\nhas another opinion - see the next patch.\n\nThe naming of these special SEND_SIG_XXX siginfo\u0027s is really bad\nimho.  From __send_signal()\u0027s pov they mean\n\n\tSEND_SIG_NOINFO\t\tfrom user\n\tSEND_SIG_PRIV\t\tfrom kernel\n\tSEND_SIG_FORCED\t\tno info\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nReviewed-by: Sukadev Bhattiprolu \u003csukadev@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7cf7db8df0b78076eafa4ead47559344ca7b7a43",
      "tree": "5e536389e23d6c00fc93e51a4e4b90cfeac3fbc6",
      "parents": [
        "14d8c9f3c09e7fd7b9af80904289fe204f5b93c6"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Dec 10 00:53:21 2009 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Dec 10 23:04:11 2009 +0100"
      },
      "message": "signals: Fix more rcu assumptions\n\n1) Remove the misleading comment in __sigqueue_alloc() which claims\n   that holding a spinlock is equivalent to rcu_read_lock().\n\n2) Add a rcu_read_lock/unlock around the __task_cred() access\n   in __sigqueue_alloc()\n\nThis needs to be revisited to remove the remaining users of\nread_lock(\u0026tasklist_lock) but that\u0027s outside the scope of this patch.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nLKML-Reference: \u003c20091210004703.269843657@linutronix.de\u003e\n"
    },
    {
      "commit": "14d8c9f3c09e7fd7b9af80904289fe204f5b93c6",
      "tree": "1c373436517c5853aab0e99cce83364a21134d0e",
      "parents": [
        "ea5b41f9d595be354f7a50e56b28c2d72e6e88a5"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Dec 10 00:53:17 2009 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Dec 10 23:04:11 2009 +0100"
      },
      "message": "signal: Fix racy access to __task_cred in kill_pid_info_as_uid()\n\nkill_pid_info_as_uid() accesses __task_cred() without being in a RCU\nread side critical section. tasklist_lock is not protecting that when\nCONFIG_TREE_PREEMPT_RCU\u003dy.\n\nConvert the whole tasklist_lock section to rcu and use\nlock_task_sighand to prevent the exit race.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nLKML-Reference: \u003c20091210004703.232302055@linutronix.de\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "c3fa27d1367fac63ac8533d6f20ea851d0d70a10",
      "tree": "e7731554085e22b6b63411b1ebb401079f3e0bbb",
      "parents": [
        "96fa2b508d2d3fe040cf4ef2fffb955f0a537ea1",
        "d103d01e4b19f185d3c85f77402b605534c32e89"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Dec 05 15:30:21 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Dec 05 15:30:21 2009 -0800"
      },
      "message": "Merge branch \u0027perf-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027perf-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (470 commits)\n  x86: Fix comments of register/stack access functions\n  perf tools: Replace %m with %a in sscanf\n  hw-breakpoints: Keep track of user disabled breakpoints\n  tracing/syscalls: Make syscall events print callbacks static\n  tracing: Add DEFINE_EVENT(), DEFINE_SINGLE_EVENT() support to docbook\n  perf: Don\u0027t free perf_mmap_data until work has been done\n  perf_event: Fix compile error\n  perf tools: Fix _GNU_SOURCE macro related strndup() build error\n  trace_syscalls: Remove unused syscall_name_to_nr()\n  trace_syscalls: Simplify syscall profile\n  trace_syscalls: Remove duplicate init_enter_##sname()\n  trace_syscalls: Add syscall_nr field to struct syscall_metadata\n  trace_syscalls: Remove enter_id exit_id\n  trace_syscalls: Set event_enter_##sname-\u003edata to its metadata\n  trace_syscalls: Remove unused event_syscall_enter and event_syscall_exit\n  perf_event: Initialize data.period in perf_swevent_hrtimer()\n  perf probe: Simplify event naming\n  perf probe: Add --list option for listing current probe events\n  perf probe: Add argv_split() from lib/argv_split.c\n  perf probe: Move probe event utility functions to probe-event.c\n  ...\n"
    },
    {
      "commit": "ba005e1f417295d28cd1563ab82bc33af07fb16a",
      "tree": "d771659edc46c1bd5467578a6616657c8cf26db5",
      "parents": [
        "f9d4257e01d266e67420cc99d456b6d4c8464f54"
      ],
      "author": {
        "name": "Masami Hiramatsu",
        "email": "mhiramat@redhat.com",
        "time": "Tue Nov 24 16:56:58 2009 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 10:55:38 2009 +0100"
      },
      "message": "tracepoint: Add signal loss events\n\nAdd signal_overflow_fail and signal_lose_info tracepoints\nfor signal-lost events.\n\nChanges in v3:\n - Add docbook style comments\n\nChanges in v2:\n - Use siginfo string macro\n\nSuggested-by: Roland McGrath \u003croland@redhat.com\u003e\nReviewed-by: Jason Baron \u003cjbaron@redhat.com\u003e\nSigned-off-by: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: systemtap \u003csystemtap@sources.redhat.com\u003e\nCc: DLE \u003cdle-develop@lists.sourceforge.net\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nLKML-Reference: \u003c20091124215658.30449.9934.stgit@dhcp-100-2-132.bos.redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f9d4257e01d266e67420cc99d456b6d4c8464f54",
      "tree": "6661efc95e3002b9b1bf8d9c94deb9ec736a04de",
      "parents": [
        "d1eb650ff4130972fa21462fa49cd35a2865403b"
      ],
      "author": {
        "name": "Masami Hiramatsu",
        "email": "mhiramat@redhat.com",
        "time": "Tue Nov 24 16:56:51 2009 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 10:55:38 2009 +0100"
      },
      "message": "tracepoint: Add signal deliver event\n\nAdd a tracepoint where a process gets a signal. This tracepoint\nshows signal-number, sa-handler and sa-flag.\n\nChanges in v3:\n - Add docbook style comments\n\nChanges in v2:\n - Add siginfo argument\n - Fix comment\n\nSigned-off-by: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nReviewed-by: Jason Baron \u003cjbaron@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: systemtap \u003csystemtap@sources.redhat.com\u003e\nCc: DLE \u003cdle-develop@lists.sourceforge.net\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nLKML-Reference: \u003c20091124215651.30449.20926.stgit@dhcp-100-2-132.bos.redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d1eb650ff4130972fa21462fa49cd35a2865403b",
      "tree": "e43cee89ccad8adfa06f2e5f746ad96d2e00d9b3",
      "parents": [
        "80bbf6b641c8843b9d751a1f299aa7ee073ab9d4"
      ],
      "author": {
        "name": "Masami Hiramatsu",
        "email": "mhiramat@redhat.com",
        "time": "Tue Nov 24 16:56:45 2009 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 10:55:37 2009 +0100"
      },
      "message": "tracepoint: Move signal sending tracepoint to events/signal.h\n\nMove signal sending event to events/signal.h. This patch also\nrenames sched_signal_send event to signal_generate.\n\nChanges in v4:\n - Fix a typo of task_struct pointer.\n\nChanges in v3:\n - Add docbook style comments\n\nChanges in v2:\n - Add siginfo argument\n - Add siginfo storing macro\n\nSigned-off-by: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nReviewed-by: Jason Baron \u003cjbaron@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: systemtap \u003csystemtap@sources.redhat.com\u003e\nCc: DLE \u003cdle-develop@lists.sourceforge.net\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nLKML-Reference: \u003c20091124215645.30449.60208.stgit@dhcp-100-2-132.bos.redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f84d49b218b7d4c6cba2e0b41f24bd4045403962",
      "tree": "d62ed0c15152c1a0a78fb75feac649dafc05b041",
      "parents": [
        "2a855dd01bc1539111adb7233f587c5c468732ac"
      ],
      "author": {
        "name": "Naohiro Ooiwa",
        "email": "nooiwa@miraclelinux.com",
        "time": "Mon Nov 09 00:46:42 2009 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Nov 09 09:44:26 2009 +0100"
      },
      "message": "signal: Print warning message when dropping signals\n\nWhen the system has too many timers or too many aggregate\nqueued signals, the EAGAIN error is returned to application\nfrom kernel, including timer_create() [POSIX.1b].\n\nIt means that the app exceeded the limit of pending signals,\nbut in general application writers do not expect this\noutcome and the current silent failure can cause rare app\nfailures under very high load.\n\nThis patch adds a new message when we reach the limit\nand if print_fatal_signals is enabled:\n\n    task/1234: reached RLIMIT_SIGPENDING, dropping signal\n\nIf you see this message and your system behaved unexpectedly,\nyou can run following command to lift the limit:\n\n   # ulimit -i unlimited\n\nWith help from Hiroshi Shimamoto \u003ch-shimamoto@ct.jp.nec.com\u003e.\n\nSigned-off-by: Naohiro Ooiwa \u003cnooiwa@miraclelinux.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Hiroshi Shimamoto \u003ch-shimamoto@ct.jp.nec.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: oleg@redhat.com\nLKML-Reference: \u003c4AF6E7E2.9080406@miraclelinux.com\u003e\n[ Modified a few small details, gave surrounding code some love. ]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d9588725e52650e82989707f8fd2feb67ad2dc8e",
      "tree": "39a9f9f5e8ba6a6e008b9ada310347e24ede400e",
      "parents": [
        "ba0a6c9f6fceed11c6a99e8326f0477fe383e6b5"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Wed Sep 23 15:57:04 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:01 2009 -0700"
      },
      "message": "signals: inline __fatal_signal_pending\n\n__fatal_signal_pending inlines to one instruction on x86, probably two\ninstructions on other machines.  It takes two longer x86 instructions just\nto call it and test its return value, not to mention the function itself.\n\nOn my random x86_64 config, this saved 70 bytes of text (59 of those being\n__fatal_signal_pending itself).\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4a30debfb778240a4b1767d4b0c5a5b25ab97160",
      "tree": "bc4fed4ebb8368ebbfa719a004b15101b0a71d53",
      "parents": [
        "964ee7df90d799e38fb1556c57cd5c45fc736436"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:57:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:01 2009 -0700"
      },
      "message": "signals: introduce do_send_sig_info() helper\n\nIntroduce do_send_sig_info() and convert group_send_sig_info(),\nsend_sig_info(), do_send_specific() to use this helper.\n\nHopefully it will have more users soon, it allows to specify\nspecific/group behaviour via \"bool group\" argument.\n\nShaves 80 bytes from .text.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: stephane eranian \u003ceranian@googlemail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ae6d2ed7bb3877ff35b9569402025f40ea2e1803",
      "tree": "80527061ab7615cd890236b777b2be6e909a1573",
      "parents": [
        "b6fe2d117e98805ee76352e6468f87d494a97292"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Wed Sep 23 15:56:53 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "signals: tracehook_notify_jctl change\n\nThis changes tracehook_notify_jctl() so it\u0027s called with the siglock held,\nand changes its argument and return value definition.  These clean-ups\nmake it a better fit for what new tracing hooks need to check.\n\nTracing needs the siglock here, held from the time TASK_STOPPED was set,\nto avoid potential SIGCONT races if it wants to allow any blocking in its\ntracing hooks.\n\nThis also folds the finish_stop() function into its caller\ndo_signal_stop().  The function is short, called only once and only\nunconditionally.  It aids readability to fold it in.\n\n[oleg@redhat.com: do not call tracehook_notify_jctl() in TASK_STOPPED state]\n[oleg@redhat.com: introduce tracehook_finish_jctl() helper]\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a7f0765edfd53aed09cb7b0e15863688b39447de",
      "tree": "c89adfe418f9988ad4044e0f22827458bdf6b155",
      "parents": [
        "1dd3a27326d307952f8ad2499478c84dc7311517"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "ptrace: __ptrace_detach: do __wake_up_parent() if we reap the tracee\n\nThe bug is old, it wasn\u0027t cause by recent changes.\n\nTest case:\n\n\tstatic void *tfunc(void *arg)\n\t{\n\t\tint pid \u003d (long)arg;\n\n\t\tassert(ptrace(PTRACE_ATTACH, pid, NULL, NULL) \u003d\u003d 0);\n\t\tkill(pid, SIGKILL);\n\n\t\tsleep(1);\n\t\treturn NULL;\n\t}\n\n\tint main(void)\n\t{\n\t\tpthread_t th;\n\t\tlong pid \u003d fork();\n\n\t\tif (!pid)\n\t\t\tpause();\n\n\t\tsignal(SIGCHLD, SIG_IGN);\n\t\tassert(pthread_create(\u0026th, NULL, tfunc, (void*)pid) \u003d\u003d 0);\n\n\t\tint r \u003d waitpid(-1, NULL, __WNOTHREAD);\n\t\tprintf(\"waitpid: %d %m\\n\", r);\n\n\t\treturn 0;\n\t}\n\nBefore the patch this program hangs, after this patch waitpid() correctly\nfails with errno \u003d\u003d -ECHILD.\n\nThe problem is, __ptrace_detach() reaps the EXIT_ZOMBIE tracee if its\n-\u003ereal_parent is our sub-thread and we ignore SIGCHLD.  But in this case\nwe should wake up other threads which can sleep in do_wait().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0dd8486b5cfe8048e0613334659d9252ecd1b08a",
      "tree": "c221d40b94aecfd75b25dea768bba0b9f97cb9c8",
      "parents": [
        "0083fc2c50e6c5127c2802ad323adf8143ab7856"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 01 11:18:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 01 11:18:56 2009 -0700"
      },
      "message": "do_sigaltstack: small cleanups\n\nThe previous commit (\"do_sigaltstack: avoid copying \u0027stack_t\u0027 as a\nstructure to user space\") fixed a real bug.  This one just cleans up the\ncopy from user space to that gcc can generate better code for it (and so\nthat it looks the same as the later copy back to user space).\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0083fc2c50e6c5127c2802ad323adf8143ab7856",
      "tree": "0ec735c46d8be4ae4c637243b126feba0be2ebe8",
      "parents": [
        "ed680c4ad478d0fee9740f7d029087f181346564"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 01 10:34:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Aug 01 10:46:52 2009 -0700"
      },
      "message": "do_sigaltstack: avoid copying \u0027stack_t\u0027 as a structure to user space\n\nUlrich Drepper correctly points out that there is generally padding in\nthe structure on 64-bit hosts, and that copying the structure from\nkernel to user space can leak information from the kernel stack in those\npadding bytes.\n\nAvoid the whole issue by just copying the three members one by one\ninstead, which also means that the function also can avoid the need for\na stack frame.  This also happens to match how we copy the new structure\nfrom user space, so it all even makes sense.\n\n[ The obvious solution of adding a memset() generates horrid code, gcc\n  does really stupid things. ]\n\nReported-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "d92656633b8352c6d4b14afcb7beb154d76e7aa6"
}
