)]}'
{
  "log": [
    {
      "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": "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": "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"
    },
    {
      "commit": "d92656633b8352c6d4b14afcb7beb154d76e7aa6",
      "tree": "616dabaff973bc4483ece684c93afdb2dcacff59",
      "parents": [
        "d1e98f429aa10132b3010ba3b0be47552a2eb14b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:52 2009 -0700"
      },
      "message": "ptrace: do_notify_parent_cldstop: fix the wrong -\u003ensproxy usage\n\nIf the non-traced sub-thread calls do_notify_parent_cldstop(), we send the\nnotification to group_leader-\u003ereal_parent and we report group_leader\u0027s\npid.\n\nBut, if group_leader is traced we use the wrong -\u003eparent-\u003ensproxy-\u003epid_ns,\nthe tracer and parent can live in different namespaces.  Change the code\nto use \"parent\" instead of tsk-\u003eparent.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nAcked-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.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": "5cb11446892833e50970fb2277a9f7563b0a8bd3",
      "tree": "9cb858cb093c4b927601ef8a612d8dd791aeb1c8",
      "parents": [
        "1c216279539bd65c5a3d497e25d441dbddbcf1ec"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:51 2009 -0700"
      },
      "message": "ptrace: do not use task-\u003eptrace directly in core kernel\n\nNo functional changes.\n\n- Nobody except ptrace.c \u0026 co should use ptrace flags directly, we have\n  task_ptrace() for that.\n\n- No need to specially check PT_PTRACED, we must not have other PT_ bits\n  set without PT_PTRACED. And no need to know this flag exists.\n\nSigned-off-by: 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": "7a0aeb14e18ad59394bd9bbc6e57fb345819e748",
      "tree": "04c7229103e1009ad8886ed663e047abe58805fb",
      "parents": [
        "3b5c760efcddf1ebdd39a2035b554e96febd7466"
      ],
      "author": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Sat May 16 11:28:33 2009 +0200"
      },
      "committer": {
        "name": "Vegard Nossum",
        "email": "vegard.nossum@gmail.com",
        "time": "Mon Jun 15 15:49:43 2009 +0200"
      },
      "message": "signal: fix __send_signal() false positive kmemcheck warning\n\nThis false positive is due to field padding in struct sigqueue. When\nthis dynamically allocated structure is copied to the stack (in arch-\nspecific delivery code), kmemcheck sees a read from the padding, which\nis, naturally, uninitialized.\n\nHide the false positive using the __GFP_NOTRACK_FALSE_POSITIVE flag.\nAlso made the rlimit override code a bit clearer by introducing a new\nvariable.\n\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Vegard Nossum \u003cvegard.nossum@gmail.com\u003e\n"
    },
    {
      "commit": "3296ca27f50ecbd71db1d808c7a72d311027f919",
      "tree": "833eaa58b2013bda86d4bd95faf6efad7a2d5ca4",
      "parents": [
        "e893123c7378192c094747dadec326b7c000c190",
        "73fbad283cfbbcf02939bdbda31fc4a30e729cca"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 10:01:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 10:01:41 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: (44 commits)\n  nommu: Provide mmap_min_addr definition.\n  TOMOYO: Add description of lists and structures.\n  TOMOYO: Remove unused field.\n  integrity: ima audit dentry_open failure\n  TOMOYO: Remove unused parameter.\n  security: use mmap_min_addr indepedently of security models\n  TOMOYO: Simplify policy reader.\n  TOMOYO: Remove redundant markers.\n  SELinux: define audit permissions for audit tree netlink messages\n  TOMOYO: Remove unused mutex.\n  tomoyo: avoid get+put of task_struct\n  smack: Remove redundant initialization.\n  integrity: nfsd imbalance bug fix\n  rootplug: Remove redundant initialization.\n  smack: do not beyond ARRAY_SIZE of data\n  integrity: move ima_counts_get\n  integrity: path_check update\n  IMA: Add __init notation to ima functions\n  IMA: Minimal IMA policy and boot param for TCB IMA policy\n  selinux: remove obsolete read buffer limit from sel_read_bool\n  ...\n"
    },
    {
      "commit": "862366118026a358882eefc70238dbcc3db37aac",
      "tree": "4eb62bc10327a5afac064a95a091ea05ecd2acc1",
      "parents": [
        "57eee9ae7bbcfb692dc96c739a5184adb6349733",
        "511b01bdf64ad8a38414096eab283c7784aebfc4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 10 19:53:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 10 19:53:40 2009 -0700"
      },
      "message": "Merge branch \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027tracing-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (244 commits)\n  Revert \"x86, bts: reenable ptrace branch trace support\"\n  tracing: do not translate event helper macros in print format\n  ftrace/documentation: fix typo in function grapher name\n  tracing/events: convert block trace points to TRACE_EVENT(), fix !CONFIG_BLOCK\n  tracing: add protection around module events unload\n  tracing: add trace_seq_vprint interface\n  tracing: fix the block trace points print size\n  tracing/events: convert block trace points to TRACE_EVENT()\n  ring-buffer: fix ret in rb_add_time_stamp\n  ring-buffer: pass in lockdep class key for reader_lock\n  tracing: add annotation to what type of stack trace is recorded\n  tracing: fix multiple use of __print_flags and __print_symbolic\n  tracing/events: fix output format of user stack\n  tracing/events: fix output format of kernel stack\n  tracing/trace_stack: fix the number of entries in the header\n  ring-buffer: discard timestamps that are at the start of the buffer\n  ring-buffer: try to discard unneeded timestamps\n  ring-buffer: fix bug in ring_buffer_discard_commit\n  ftrace: do not profile functions when disabled\n  tracing: make trace pipe recognize latency format flag\n  ...\n"
    },
    {
      "commit": "d254117099d711f215e62427f55dfb8ebd5ad011",
      "tree": "0848ff8dd74314fec14a86497f8d288c86ba7c65",
      "parents": [
        "07ff7a0b187f3951788f64ae1f30e8109bc8e9eb",
        "8c9ed899b44c19e81859fbb0e9d659fe2f8630fc"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri May 08 17:56:47 2009 +1000"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Fri May 08 17:56:47 2009 +1000"
      },
      "message": "Merge branch \u0027master\u0027 into next\n"
    },
    {
      "commit": "62ab4505e3efaf67784f84059e0fb9cedb1728ea",
      "tree": "54da8395eaf30a0386cd71214fbabe94ded229e2",
      "parents": [
        "30b4ae8a4498543863501f707879b7220b649602"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat Apr 04 21:01:06 2009 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Apr 30 19:24:24 2009 +0200"
      },
      "message": "signals: implement sys_rt_tgsigqueueinfo\n\nsys_kill has the per thread counterpart sys_tgkill. sigqueueinfo is\nmissing a thread directed counterpart. Such an interface is important\nfor migrating applications from other OSes which have the per thread\ndelivery implemented.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nAcked-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\n"
    },
    {
      "commit": "30b4ae8a4498543863501f707879b7220b649602",
      "tree": "c8207d2f7221b5b89b1e7cb6b896135f0f061f69",
      "parents": [
        "091438dd5668396328a3419abcbc6591159eb8d1"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat Apr 04 21:01:01 2009 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Apr 30 19:24:23 2009 +0200"
      },
      "message": "signals: split do_tkill\n\nSplit out the code from do_tkill to make it reusable by the follow up\npatch which implements sys_rt_tgsigqueueinfo\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3bcac0263f0b45e67a64034ebcb69eb9abb742f4",
      "tree": "33f4db08edaa12e1c20df348e2fa28c7c2198ebe",
      "parents": [
        "88c48db9788862d0290831d081bc3c64e13b592f"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Apr 29 13:45:05 2009 +0100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Thu Apr 30 09:07:13 2009 +1000"
      },
      "message": "SELinux: Don\u0027t flush inherited SIGKILL during execve()\n\nDon\u0027t flush inherited SIGKILL during execve() in SELinux\u0027s post cred commit\nhook.  This isn\u0027t really a security problem: if the SIGKILL came before the\ncredentials were changed, then we were right to receive it at the time, and\nshould honour it; if it came after the creds were changed, then we definitely\nshould honour it; and in any case, all that will happen is that the process\nwill be scrapped before it ever returns to userspace.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "ad8d75fff811a6a230f7f43b05a6483099349533",
      "tree": "764f75c0785b29067b141719b6e8000f005da7fd",
      "parents": [
        "ecda8ae02a08ef065ff387f5cb2a2d4999da2408"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Apr 14 19:39:12 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Apr 14 22:05:43 2009 -0400"
      },
      "message": "tracing/events: move trace point headers into include/trace/events\n\nImpact: clean up\n\nCreate a sub directory in include/trace called events to keep the\ntrace point headers in their own separate directory. Only headers that\ndeclare trace points should be defined in this directory.\n\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Zhao Lei \u003czhaolei@cn.fujitsu.com\u003e\nCc: Eduard - Gabriel Munteanu \u003ceduard.munteanu@linux360.ro\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "a8d154b009168337494fbf345671bab74d3e4b8b",
      "tree": "4097612e1a5cc8bf7658542f7d0f51b815113eaf",
      "parents": [
        "ea20d9293ce423a39717ed4375393129a2e701f9"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 10 09:36:00 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Apr 14 12:57:28 2009 -0400"
      },
      "message": "tracing: create automated trace defines\n\nThis patch lowers the number of places a developer must modify to add\nnew tracepoints. The current method to add a new tracepoint\ninto an existing system is to write the trace point macro in the\ntrace header with one of the macros TRACE_EVENT, TRACE_FORMAT or\nDECLARE_TRACE, then they must add the same named item into the C file\nwith the macro DEFINE_TRACE(name) and then add the trace point.\n\nThis change cuts out the needing to add the DEFINE_TRACE(name).\nEvery file that uses the tracepoint must still include the trace/\u003ctype\u003e.h\nfile, but the one C file must also add a define before the including\nof that file.\n\n #define CREATE_TRACE_POINTS\n #include \u003ctrace/mytrace.h\u003e\n\nThis will cause the trace/mytrace.h file to also produce the C code\nnecessary to implement the trace point.\n\nNote, if more than one trace/\u003ctype\u003e.h is used to create the C code\nit is best to list them all together.\n\n #define CREATE_TRACE_POINTS\n #include \u003ctrace/foo.h\u003e\n #include \u003ctrace/bar.h\u003e\n #include \u003ctrace/fido.h\u003e\n\nThanks to Mathieu Desnoyers and Christoph Hellwig for coming up with\nthe cleaner solution of the define above the includes over my first\ndesign to have the C code include a \"special\" header.\n\nThis patch converts sched, irq and lockdep and skb to use this new\nmethod.\n\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: Zhao Lei \u003czhaolei@cn.fujitsu.com\u003e\nCc: Eduard - Gabriel Munteanu \u003ceduard.munteanu@linux360.ro\u003e\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "6588c1e3ff01418acafd938db0740e3477dc8cb7",
      "tree": "b58beed5813667619be47c5d064f8f78804e92d1",
      "parents": [
        "b3bfa0cba867f23365b81658b47efd906830879b"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@linux.vnet.ibm.com",
        "time": "Thu Apr 02 16:58:09 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:58 2009 -0700"
      },
      "message": "signals: SI_USER: Masquerade si_pid when crossing pid ns boundary\n\nWhen sending a signal to a descendant namespace, set -\u003esi_pid to 0 since\nthe sender does not have a pid in the receiver\u0027s namespace.\n\nNote:\n\t- If rt_sigqueueinfo() sets si_code to SI_USER when sending a\n\t  signal across a pid namespace boundary, the value in -\u003esi_pid\n\t  will be cleared to 0.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3bfa0cba867f23365b81658b47efd906830879b",
      "tree": "e54d9a9c4c23fc00bb2ff3ed57ef5317a0660ea5",
      "parents": [
        "e4da026f980df125a4918c3bb9fe93185c7ef12a"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@linux.vnet.ibm.com",
        "time": "Thu Apr 02 16:58:08 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:58 2009 -0700"
      },
      "message": "signals: protect cinit from blocked fatal signals\n\nNormally SIG_DFL signals to global and container-init are dropped early.\nBut if a signal is blocked when it is posted, we cannot drop the signal\nsince the receiver may install a handler before unblocking the signal.\nOnce this signal is queued however, the receiver container-init has no way\nof knowing if the signal was sent from an ancestor or descendant\nnamespace.  This patch ensures that contianer-init drops all SIG_DFL\nsignals in get_signal_to_deliver() except SIGKILL/SIGSTOP.\n\nIf SIGSTOP/SIGKILL originate from a descendant of container-init they are\nnever queued (i.e dropped in sig_ignored() in an earler patch).\n\nIf SIGSTOP/SIGKILL originate from parent namespace, the signal is queued\nand container-init processes the signal.\n\nIOW, if get_signal_to_deliver() sees a sig_kernel_only() signal for global\nor container-init, the signal must have been generated internally or must\nhave come from an ancestor ns and we process the signal.\n\nFurther, the signal_group_exit() check was needed to cover the case of a\nmulti-threaded init sending SIGKILL to other threads when doing an exit()\nor exec().  But since the new sig_kernel_only() check covers the SIGKILL,\nthe signal_group_exit() check is no longer needed and can be removed.\n\nFinally, now that we have all pieces in place, set SIGNAL_UNKILLABLE for\ncontainer-inits.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "921cf9f63089c7442d44083477620132f4cea066",
      "tree": "2a79eb0f7328ba2f05759d1b2c1e141bcfe4aafc",
      "parents": [
        "7978b567d31555fc828b8f945c605ad29e117b22"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@linux.vnet.ibm.com",
        "time": "Thu Apr 02 16:58:05 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:58 2009 -0700"
      },
      "message": "signals: protect cinit from unblocked SIG_DFL signals\n\nDrop early any SIG_DFL or SIG_IGN signals to container-init from within\nthe same container.  But queue SIGSTOP and SIGKILL to the container-init\nif they are from an ancestor container.\n\nBlocked, fatal signals (i.e when SIG_DFL is to terminate) from within the\ncontainer can still terminate the container-init.  That will be addressed\nin the next patch.\n\nNote:\tTo be bisect-safe, SIGNAL_UNKILLABLE will be set for container-inits\n   \tin a follow-on patch. Until then, this patch is just a preparatory\n\tstep.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7978b567d31555fc828b8f945c605ad29e117b22",
      "tree": "a66d7880f3031e417c2afb76c990ed5340565816",
      "parents": [
        "f008faff0e2777c8b3fe853891b774ca465938d8"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@linux.vnet.ibm.com",
        "time": "Thu Apr 02 16:58:04 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:58 2009 -0700"
      },
      "message": "signals: add from_ancestor_ns parameter to send_signal()\n\nsend_signal() (or its helper) needs to determine the pid namespace of the\nsender.  But a signal sent via kill_pid_info_as_uid() comes from within\nthe kernel and send_signal() does not need to determine the pid namespace\nof the sender.  So define a helper for send_signal() which takes an\nadditional parameter, \u0027from_ancestor_ns\u0027 and have kill_pid_info_as_uid()\nuse that helper directly.\n\nThe \u0027from_ancestor_ns\u0027 parameter will be used in a follow-on patch.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f008faff0e2777c8b3fe853891b774ca465938d8",
      "tree": "d2f325995473a33652f7f7ead71e63d5298fbd01",
      "parents": [
        "43918f2bf4806675943416d539d9d5e4d585ebff"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 02 16:58:02 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:58 2009 -0700"
      },
      "message": "signals: protect init from unwanted signals more\n\n(This is a modified version of the patch submitted by Oleg Nesterov\nhttp://lkml.org/lkml/2008/11/18/249 and tries to address comments that\ncame up in that discussion)\n\ninit ignores the SIG_DFL signals but we queue them anyway, including\nSIGKILL.  This is mostly OK, the signal will be dropped silently when\ndequeued, but the pending SIGKILL has 2 bad implications:\n\n        - it implies fatal_signal_pending(), so we confuse things\n          like wait_for_completion_killable/lock_page_killable.\n\n        - for the sub-namespace inits, the pending SIGKILL can\n          mask (legacy_queue) the subsequent SIGKILL from the\n          parent namespace which must kill cinit reliably.\n          (preparation, cinits don\u0027t have SIGNAL_UNKILLABLE yet)\n\nThe patch can\u0027t help when init is ptraced, but ptracing of init is not\n\"safe\" anyway.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "43918f2bf4806675943416d539d9d5e4d585ebff",
      "tree": "1de2ea08eed647b181b7f008f95e4bc4ec34c343",
      "parents": [
        "90bc8d8b1a38f1ab131a2399a202e1889db95de8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 02 16:58:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:58 2009 -0700"
      },
      "message": "signals: remove \u0027handler\u0027 parameter to tracehook functions\n\nContainer-init must behave like global-init to processes within the\ncontainer and hence it must be immune to unhandled fatal signals from\nwithin the container (i.e SIG_DFL signals that terminate the process).\n\nBut the same container-init must behave like a normal process to processes\nin ancestor namespaces and so if it receives the same fatal signal from a\nprocess in ancestor namespace, the signal must be processed.\n\nImplementing these semantics requires that send_signal() determine pid\nnamespace of the sender but since signals can originate from workqueues/\ninterrupt-handlers, determining pid namespace of sender may not always be\npossible or safe.\n\nThis patchset implements the design/simplified semantics suggested by\nOleg Nesterov.  The simplified semantics for container-init are:\n\n\t- container-init must never be terminated by a signal from a\n\t  descendant process.\n\n\t- container-init must never be immune to SIGKILL from an ancestor\n\t  namespace (so a process in parent namespace must always be able\n\t  to terminate a descendant container).\n\n\t- container-init may be immune to unhandled fatal signals (like\n\t  SIGUSR1) even if they are from ancestor namespace. SIGKILL/SIGSTOP\n\t  are the only reliable signals to a container-init from ancestor\n\t  namespace.\n\nThis patch:\n\nBased on an earlier patch submitted by Oleg Nesterov and comments from\nRoland McGrath (http://lkml.org/lkml/2008/11/19/258).\n\nThe handler parameter is currently unused in the tracehook functions.\nBesides, the tracehook functions are called with siglock held, so the\nfunctions can check the handler if they later need to.\n\nRemoving the parameter simiplifies changes to sig_ignored() in a follow-on\npatch.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "53da1d9456fe7f87a920a78fdbdcf1225d197cb7",
      "tree": "eccd5357ceff25a9a07be802ac0161c8c1842e64",
      "parents": [
        "b0dcb4a91ddb79f2e213205cf8d86b467f8559c7"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Mar 23 16:07:24 2009 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 23 09:22:31 2009 -0700"
      },
      "message": "fix ptrace slowness\n\nThis patch fixes bug #12208:\n\n  Bug-Entry       : http://bugzilla.kernel.org/show_bug.cgi?id\u003d12208\n  Subject         : uml is very slow on 2.6.28 host\n\nThis turned out to be not a scheduler regression, but an already\nexisting problem in ptrace being triggered by subtle scheduler\nchanges.\n\nThe problem is this:\n\n - task A is ptracing task B\n - task B stops on a trace event\n - task A is woken up and preempts task B\n - task A calls ptrace on task B, which does ptrace_check_attach()\n - this calls wait_task_inactive(), which sees that task B is still on the runq\n - task A goes to sleep for a jiffy\n - ...\n\nSince UML does lots of the above sequences, those jiffies quickly add\nup to make it slow as hell.\n\nThis patch solves this by not rescheduling in read_unlock() after\nptrace_stop() has woken up the tracer.\n\nThanks to Oleg Nesterov and Ingo Molnar for the feedback.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCC: stable@kernel.org\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "32bd671d6cbeda60dc73be77fa2b9037d9a9bfa0",
      "tree": "591c941b9f12ce9f3caefd112f0ada3c5fcc53ab",
      "parents": [
        "83895147b702434e6f236deeca75211fd0e3da3a"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Feb 05 12:24:15 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Feb 05 13:04:33 2009 +0100"
      },
      "message": "signal: re-add dead task accumulation stats.\n\nWe\u0027re going to split the process wide cpu accounting into two parts:\n\n - clocks; which can take all the time they want since they run\n           from user context.\n\n - timers; which need constant time tracing but can affort the overhead\n           because they\u0027re default off -- and rare.\n\nThe clock readout will go back to a full sum of the thread group, for this\nwe need to re-add the exit stats that were removed in the initial itimer\nrework (f06febc9: timers: fix itimer/many thread hang).\n\nFurthermore, since that full sum can be rather slow for large thread groups\nand we have the complete dead task stats, revert the do_notify_parent time\ncomputation.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "3a9f84d354ce1e19956083c8e691727dea33bd5a",
      "tree": "abe8c280d3adb7a8e5fc838c59b122a46e6fd464",
      "parents": [
        "bf50c903faba4ec7686ee8a570ac384b0f20814d"
      ],
      "author": {
        "name": "Ed Swierk",
        "email": "eswierk@aristanetworks.com",
        "time": "Mon Jan 26 15:33:31 2009 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 27 00:36:19 2009 +0100"
      },
      "message": "signals, debug: fix BUG: using smp_processor_id() in preemptible code in print_fatal_signal()\n\nWith print-fatal-signals\u003d1 on a kernel with CONFIG_PREEMPT\u003dy, sending an\nunexpected signal to a process causes a BUG: using smp_processor_id() in\npreemptible code.\n\nget_signal_to_deliver() releases the siglock before calling\nprint_fatal_signal(), which calls show_regs(), which calls\nsmp_processor_id(), which is not supposed to be called from a\npreemptible thread.\n\nMake sure show_regs() runs with preemption disabled.\n\nSigned-off-by: Ed Swierk \u003ceswierk@aristanetworks.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d4e82042c4cfa87a7d51710b71f568fe80132551",
      "tree": "202c311b52f4e4db9fbbbd80607744e2aa2e5885",
      "parents": [
        "836f92adf121f806e9beb5b6b88bd5c9c4ea3f24"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:34 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:31 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 32\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "a5f8fa9e9ba5ef3305e147f41ad6e1e84ac1f0bd",
      "tree": "a9bedc6890d6379f0839c280a20c5da3bd9f2352",
      "parents": [
        "17da2bd90abf428523de0fb98f7075e00e3ed42e"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:11 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:21 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 09\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "17da2bd90abf428523de0fb98f7075e00e3ed42e",
      "tree": "4f2daf3cb792b7da62e6ae771b58902cc5ea24ab",
      "parents": [
        "754fe8d297bfae7b77f7ce866e2fb0c5fb186506"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:10 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:21 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 08\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "754fe8d297bfae7b77f7ce866e2fb0c5fb186506",
      "tree": "b2650f728d50791fa86ecd8c49806f51db714bd4",
      "parents": [
        "5add95d4f7cf08f6f62510f19576992912387501"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:09 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:20 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 07\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "b290ebe2c46d01b742b948ce03f09e8a3efb9a92",
      "tree": "4419602f911a8205de2160c56a0ff844f350557e",
      "parents": [
        "ae1251ab785f6da87219df8352ffdac68bba23e4"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:06 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:19 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 04\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "2ed7c03ec17779afb4fcfa3b8c61df61bd4879ba",
      "tree": "4e0fefd574bab5470a02edf439727f472a9663c6",
      "parents": [
        "4c696ba7982501d43dea11dbbaabd2aa8a19cc42"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:13:54 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:14 2009 +0100"
      },
      "message": "[CVE-2009-0029] Convert all system calls to return a long\n\nConvert all system calls to return a long. This should be a NOP since all\nconverted types should have the same size anyway.\nWith the exception of sys_exit_group which returned void. But that doesn\u0027t\nmatter since the system call doesn\u0027t return.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "9cd4fd10437dda6b520cb1410b28f36967a34de8",
      "tree": "1a1d5eaa0d650c1efe0e63dbadb9674cac209d9d",
      "parents": [
        "09bca05c90c639f57aae057e0c28f287e61f5a07"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@linux.vnet.ibm.com",
        "time": "Tue Jan 06 14:42:46 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:29 2009 -0800"
      },
      "message": "SEND_SIG_NOINFO: set si_pid to tgid instead of pid\n\nPOSIX requires the si_pid to be the process id of the sender, so -\u003esi_pid\nshould really be set to \u0027tgid\u0027.  This change does have following changes\nin behavior:\n\n\t- When sending pdeath_signal on re-parent to a sub-thread, -\u003esi_pid\n\t  cannot be used to identify the thread that did the re-parent since\n\t  it will now show the tgid instead of thread id.\n\n\t- A multi-threaded application that expects to find the specific\n\t  thread that encountered a SIGPIPE using the -\u003esi_pid will now\n\t  break.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nAcked-By: Roland McGrath \u003croland@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "09bca05c90c639f57aae057e0c28f287e61f5a07",
      "tree": "5a5d88930380da8994525da361c9c8114ebf82fc",
      "parents": [
        "ecb08d81313a3c015225236775de259d99ab47fe"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@linux.vnet.ibm.com",
        "time": "Tue Jan 06 14:42:45 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 06 15:59:28 2009 -0800"
      },
      "message": "SEND_SIG_NOINFO: masquerade si_pid when crossing pid-ns boundary\n\nFor SEND_SIG_NOINFO, si_pid is currently set to the pid of sender\nin sender\u0027s active pid namespace. But if the receiver is in a\nEg: when parent sends the \u0027pdeath_signal\u0027 to a child that is in\na descendant pid namespace, we should set si_pid 0.\n\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@linux.vnet.ibm.com\u003e\nAcked-By: Roland McGrath \u003croland@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "b0f4b285d7ed174804658539129a834270f4829a"
}
