)]}'
{
  "log": [
    {
      "commit": "efee984c27b67e3ebef40410f35671997441b57c",
      "tree": "53457dba2338f853d34e1754e7f7f960e4a29482",
      "parents": [
        "17440f171e28e86cc21a4c8fd1fa3c561503f80e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Apr 28 02:04:15 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:58:52 2012 -0400"
      },
      "message": "new helper: signal_delivered()\n\nDoes block_sigmask() + tracehook_signal_handler();  called when\nsigframe has been successfully built.  All architectures converted\nto it; block_sigmask() itself is gone now (merged into this one).\n\nI\u0027m still not too happy with the signature, but that\u0027s a separate\nstory (IMO we need a structure that would contain signal number +\nsiginfo + k_sigaction, so that get_signal_to_deliver() would fill one,\nsignal_delivered(), handle_signal() and probably setup...frame() -\ntake one).\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "77097ae503b170120ab66dd1d547f8577193f91f",
      "tree": "bee5b2e8d91b9ec8ab74c58cbec1796c7bacc2e5",
      "parents": [
        "edd63a2763bdae0daa4f0a4d4c5d61d1154352a5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 27 13:58:59 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:58:51 2012 -0400"
      },
      "message": "most of set_current_blocked() callers want SIGKILL/SIGSTOP removed from set\n\nOnly 3 out of 63 do not.  Renamed the current variant to __set_current_blocked(),\nadded set_current_blocked() that will exclude unblockable signals, switched\nopen-coded instances to it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a610d6e672d6d3723e8da257ad4a8a288a8f2f89",
      "tree": "2fac6ce7f72756771f4f87583205cc402589dcad",
      "parents": [
        "5754f412a3f107cbcd93ee125bef296f2a07539b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon May 21 23:42:15 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:58:49 2012 -0400"
      },
      "message": "pull clearing RESTORE_SIGMASK into block_sigmask()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "754421c8cab1a568be844a7069fe04c1cf6391b8",
      "tree": "71fa1f54e664ff45289fccfa946747a18e20727f",
      "parents": [
        "fb21affa49204acd409328415b49bfe90136653c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Apr 26 18:31:00 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jun 01 12:58:46 2012 -0400"
      },
      "message": "HAVE_RESTORE_SIGMASK is defined on all architectures now\n\nEveryone either defines it in arch thread_info.h or has TIF_RESTORE_SIGMASK\nand picks default set_restore_sigmask() in linux/thread_info.h.  Kill the\nifdefs, slap #error in linux/thread_info.h to catch breakage when new ones\nget merged.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3208450488ae724196f1efffc457e4265957c04e",
      "tree": "bfad76a020bf5635e6529b3105f6ea4b521d7973",
      "parents": [
        "9eaa3d9bb2c4da99b1161cfcc63f3e77d9d3d156"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu May 31 16:26:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 31 17:49:31 2012 -0700"
      },
      "message": "pidns: use task_active_pid_ns in do_notify_parent\n\nUsing task_active_pid_ns is more robust because it works even after we\nhave called exit_namespaces.  This change allows us to have parent\nprocesses that are zombies.  Normally a zombie parent processes is crazy\nand the last thing you would want to have but in the case of not letting\nthe init process of a pid namespace be reaped until all of it\u0027s children\nare dead and reaped a zombie parent process is exactly what we want.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Pavel Emelyanov \u003cxemul@parallels.com\u003e\nCc: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nCc: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "654443e20dfc0617231f28a07c96a979ee1a0239",
      "tree": "a0dc3f093eb13892539082e663607c34b4fc2d07",
      "parents": [
        "2c01e7bc46f10e9190818437e564f7e0db875ae9",
        "9cba26e66d09bf394ae5a739627a1dc8b7cae6f4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 24 11:39:34 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 24 11:39:34 2012 -0700"
      },
      "message": "Merge branch \u0027perf-uprobes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull user-space probe instrumentation from Ingo Molnar:\n \"The uprobes code originates from SystemTap and has been used for years\n  in Fedora and RHEL kernels.  This version is much rewritten, reviews\n  from PeterZ, Oleg and myself shaped the end result.\n\n  This tree includes uprobes support in \u0027perf probe\u0027 - but SystemTap\n  (and other tools) can take advantage of user probe points as well.\n\n  Sample usage of uprobes via perf, for example to profile malloc()\n  calls without modifying user-space binaries.\n\n  First boot a new kernel with CONFIG_UPROBE_EVENT\u003dy enabled.\n\n  If you don\u0027t know which function you want to probe you can pick one\n  from \u0027perf top\u0027 or can get a list all functions that can be probed\n  within libc (binaries can be specified as well):\n\n\t$ perf probe -F -x /lib/libc.so.6\n\n  To probe libc\u0027s malloc():\n\n\t$ perf probe -x /lib64/libc.so.6 malloc\n\tAdded new event:\n\tprobe_libc:malloc    (on 0x7eac0)\n\n  You can now use it in all perf tools, such as:\n\n\tperf record -e probe_libc:malloc -aR sleep 1\n\n  Make use of it to create a call graph (as the flat profile is going to\n  look very boring):\n\n\t$ perf record -e probe_libc:malloc -gR make\n\t[ perf record: Woken up 173 times to write data ]\n\t[ perf record: Captured and wrote 44.190 MB perf.data (~1930712\n\n\t$ perf report | less\n\n\t  32.03%            git  libc-2.15.so   [.] malloc\n\t                    |\n\t                    --- malloc\n\n\t  29.49%            cc1  libc-2.15.so   [.] malloc\n\t                    |\n\t                    --- malloc\n\t                       |\n\t                       |--0.95%-- 0x208eb1000000000\n\t                       |\n\t                       |--0.63%-- htab_traverse_noresize\n\n\t  11.04%             as  libc-2.15.so   [.] malloc\n\t                     |\n\t                     --- malloc\n\t                        |\n\n\t   7.15%             ld  libc-2.15.so   [.] malloc\n\t                     |\n\t                     --- malloc\n\t                        |\n\n\t   5.07%             sh  libc-2.15.so   [.] malloc\n\t                     |\n\t                     --- malloc\n\t                        |\n\t   4.99%  python-config  libc-2.15.so   [.] malloc\n\t          |\n\t          --- malloc\n\t             |\n\t   4.54%           make  libc-2.15.so   [.] malloc\n\t                   |\n\t                   --- malloc\n\t                      |\n\t                      |--7.34%-- glob\n\t                      |          |\n\t                      |          |--93.18%-- 0x41588f\n\t                      |          |\n\t                      |           --6.82%-- glob\n\t                      |                     0x41588f\n\n\t   ...\n\n  Or:\n\n\t$ perf report -g flat | less\n\n\t# Overhead        Command  Shared Object      Symbol\n\t# ........  .............  .............  ..........\n\t#\n\t  32.03%            git  libc-2.15.so   [.] malloc\n\t          27.19%\n\t              malloc\n\n\t  29.49%            cc1  libc-2.15.so   [.] malloc\n\t          24.77%\n\t              malloc\n\n\t  11.04%             as  libc-2.15.so   [.] malloc\n\t          11.02%\n\t              malloc\n\n\t   7.15%             ld  libc-2.15.so   [.] malloc\n\t           6.57%\n\t              malloc\n\n\t ...\n\n  The core uprobes design is fairly straightforward: uprobes probe\n  points register themselves at (inode:offset) addresses of\n  libraries/binaries, after which all existing (or new) vmas that map\n  that address will have a software breakpoint injected at that address.\n  vmas are COW-ed to preserve original content.  The probe points are\n  kept in an rbtree.\n\n  If user-space executes the probed inode:offset instruction address\n  then an event is generated which can be recovered from the regular\n  perf event channels and mmap-ed ring-buffer.\n\n  Multiple probes at the same address are supported, they create a\n  dynamic callback list of event consumers.\n\n  The basic model is further complicated by the XOL speedup: the\n  original instruction that is probed is copied (in an architecture\n  specific fashion) and executed out of line when the probe triggers.\n  The XOL area is a single vma per process, with a fixed number of\n  entries (which limits probe execution parallelism).\n\n  The API: uprobes are installed/removed via\n  /sys/kernel/debug/tracing/uprobe_events, the API is integrated to\n  align with the kprobes interface as much as possible, but is separate\n  to it.\n\n  Injecting a probe point is privileged operation, which can be relaxed\n  by setting perf_paranoid to -1.\n\n  You can use multiple probes as well and mix them with kprobes and\n  regular PMU events or tracepoints, when instrumenting a task.\"\n\nFix up trivial conflicts in mm/memory.c due to previous cleanup of\nunmap_single_vma().\n\n* \u0027perf-uprobes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (21 commits)\n  perf probe: Detect probe target when m/x options are absent\n  perf probe: Provide perf interface for uprobes\n  tracing: Fix kconfig warning due to a typo\n  tracing: Provide trace events interface for uprobes\n  tracing: Extract out common code for kprobes/uprobes trace events\n  tracing: Modify is_delete, is_return from int to bool\n  uprobes/core: Decrement uprobe count before the pages are unmapped\n  uprobes/core: Make background page replacement logic account for rss_stat counters\n  uprobes/core: Optimize probe hits with the help of a counter\n  uprobes/core: Allocate XOL slots for uprobes use\n  uprobes/core: Handle breakpoint and singlestep exceptions\n  uprobes/core: Rename bkpt to swbp\n  uprobes/core: Make order of function parameters consistent across functions\n  uprobes/core: Make macro names consistent\n  uprobes: Update copyright notices\n  uprobes/core: Move insn to arch specific structure\n  uprobes/core: Remove uprobe_opcode_sz\n  uprobes/core: Make instruction tables volatile\n  uprobes: Move to kernel/events/\n  uprobes/core: Clean up, refactor and improve the code\n  ...\n"
    },
    {
      "commit": "f9369910a6225b8d4892c3f20ae740a711cd5ace",
      "tree": "8650ff79d7607bceb35509c028400ecf1c317de0",
      "parents": [
        "05f144a0d5c2207a0349348127f996e104ad7404",
        "415d04d08fec74b226c92c1fb54ad117c9c6bac4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 18:11:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 18:11:45 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal\n\nPull first series of signal handling cleanups from Al Viro:\n \"This is just the first part of the queue (about a half of it);\n  assorted fixes all over the place in signal handling.\n\n  This one ends with all sigsuspend() implementations switched to\n  generic one (-\u003esaved_sigmask-based).\n\n  With this, a bunch of assorted old buglets are fixed and most of the\n  missing bits of NOTIFY_RESUME hookup are in place.  Two more fixes sit\n  in arm and um trees respectively, and there\u0027s a couple of broken ones\n  that need obvious fixes - parisc and avr32 check TIF_NOTIFY_RESUME\n  only on one of two codepaths; fixes for that will happen in the next\n  series\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal: (55 commits)\n  unicore32: if there\u0027s no handler we need to restore sigmask, syscall or no syscall\n  xtensa: add handling of TIF_NOTIFY_RESUME\n  microblaze: drop \u0027oldset\u0027 argument of do_notify_resume()\n  microblaze: handle TIF_NOTIFY_RESUME\n  score: add handling of NOTIFY_RESUME to do_notify_resume()\n  m68k: add TIF_NOTIFY_RESUME and handle it.\n  sparc: kill ancient comment in sparc_sigaction()\n  h8300: missing checks of __get_user()/__put_user() return values\n  frv: missing checks of __get_user()/__put_user() return values\n  cris: missing checks of __get_user()/__put_user() return values\n  powerpc: missing checks of __get_user()/__put_user() return values\n  sh: missing checks of __get_user()/__put_user() return values\n  sparc: missing checks of __get_user()/__put_user() return values\n  avr32: struct old_sigaction is never used\n  m32r: struct old_sigaction is never used\n  xtensa: xtensa_sigaction doesn\u0027t exist\n  alpha: tidy signal delivery up\n  score: don\u0027t open-code force_sigsegv()\n  cris: don\u0027t open-code force_sigsegv()\n  blackfin: don\u0027t open-code force_sigsegv()\n  ...\n"
    },
    {
      "commit": "644473e9c60c1ff4f6351fed637a6e5551e3dce7",
      "tree": "10316518bedc735a2c6552886658d69dfd9f1eb0",
      "parents": [
        "fb827ec68446c83e9e8754fa9b55aed27ecc4661",
        "4b06a81f1daee668fbd6de85557bfb36dd36078f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 23 17:42:39 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\n\nPull user namespace enhancements from Eric Biederman:\n \"This is a course correction for the user namespace, so that we can\n  reach an inexpensive, maintainable, and reasonably complete\n  implementation.\n\n  Highlights:\n   - Config guards make it impossible to enable the user namespace and\n     code that has not been converted to be user namespace safe.\n\n   - Use of the new kuid_t type ensures the if you somehow get past the\n     config guards the kernel will encounter type errors if you enable\n     user namespaces and attempt to compile in code whose permission\n     checks have not been updated to be user namespace safe.\n\n   - All uids from child user namespaces are mapped into the initial\n     user namespace before they are processed.  Removing the need to add\n     an additional check to see if the user namespace of the compared\n     uids remains the same.\n\n   - With the user namespaces compiled out the performance is as good or\n     better than it is today.\n\n   - For most operations absolutely nothing changes performance or\n     operationally with the user namespace enabled.\n\n   - The worst case performance I could come up with was timing 1\n     billion cache cold stat operations with the user namespace code\n     enabled.  This went from 156s to 164s on my laptop (or 156ns to\n     164ns per stat operation).\n\n   - (uid_t)-1 and (gid_t)-1 are reserved as an internal error value.\n     Most uid/gid setting system calls treat these value specially\n     anyway so attempting to use -1 as a uid would likely cause\n     entertaining failures in userspace.\n\n   - If setuid is called with a uid that can not be mapped setuid fails.\n     I have looked at sendmail, login, ssh and every other program I\n     could think of that would call setuid and they all check for and\n     handle the case where setuid fails.\n\n   - If stat or a similar system call is called from a context in which\n     we can not map a uid we lie and return overflowuid.  The LFS\n     experience suggests not lying and returning an error code might be\n     better, but the historical precedent with uids is different and I\n     can not think of anything that would break by lying about a uid we\n     can\u0027t map.\n\n   - Capabilities are localized to the current user namespace making it\n     safe to give the initial user in a user namespace all capabilities.\n\n  My git tree covers all of the modifications needed to convert the core\n  kernel and enough changes to make a system bootable to runlevel 1.\"\n\nFix up trivial conflicts due to nearby independent changes in fs/stat.c\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (46 commits)\n  userns:  Silence silly gcc warning.\n  cred: use correct cred accessor with regards to rcu read lock\n  userns: Convert the move_pages, and migrate_pages permission checks to use uid_eq\n  userns: Convert cgroup permission checks to use uid_eq\n  userns: Convert tmpfs to use kuid and kgid where appropriate\n  userns: Convert sysfs to use kgid/kuid where appropriate\n  userns: Convert sysctl permission checks to use kuid and kgids.\n  userns: Convert proc to use kuid/kgid where appropriate\n  userns: Convert ext4 to user kuid/kgid where appropriate\n  userns: Convert ext3 to use kuid/kgid where appropriate\n  userns: Convert ext2 to use kuid/kgid where appropriate.\n  userns: Convert devpts to use kuid/kgid where appropriate\n  userns: Convert binary formats to use kuid/kgid where appropriate\n  userns: Add negative depends on entries to avoid building code that is userns unsafe\n  userns: signal remove unnecessary map_cred_ns\n  userns: Teach inode_capable to understand inodes whose uids map to other namespaces.\n  userns: Fail exec for suid and sgid binaries with ids outside our user namespace.\n  userns: Convert stat to return values mapped from kuids and kgids\n  userns: Convert user specfied uids and gids in chown into kuids and kgid\n  userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs\n  ...\n"
    },
    {
      "commit": "68f3f16d9ad0f1e28ab3fd0001ab5798c41f15a3",
      "tree": "fd023109413f5eb28b364663fdf4bf2eabca47d4",
      "parents": [
        "bf67f3a5c456a18f2e8d062f7e88506ef2cd9837"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon May 21 21:42:32 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon May 21 23:52:30 2012 -0400"
      },
      "message": "new helper: sigsuspend()\n\nguts of saved_sigmask-based sigsuspend/rt_sigsuspend.  Takes\nkernel sigset_t *.\n\nOpen-coded instances replaced with calling it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "54ba47edac90091d42e5f97516cad56953576a5a",
      "tree": "6c0931ece1c5d72a86ee4022d74ba8c384719afb",
      "parents": [
        "65cc5a17ad3388f89ddc3d68226a09242656809b"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue Mar 13 16:04:35 2012 -0700"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue May 15 14:59:24 2012 -0700"
      },
      "message": "userns: signal remove unnecessary map_cred_ns\n\nmap_cred_ns is a light wrapper around from_kuid with the order of the arguments\nreversed.  Replace map_cred_ns with from_kuid and remove map_cred_ns.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "5af662030e5db1a5560fd917250d5d688a6be586",
      "tree": "c648c0bf8afe4571cf13b098bd6e24fbce86789c",
      "parents": [
        "a29c33f4e506e1dae7e0985b6328046535becbf8"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Sat Mar 03 20:21:47 2012 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu May 03 03:28:51 2012 -0700"
      },
      "message": "userns: Convert ptrace, kill, set_priority permission checks to work with kuids and kgids\n\nUpdate the permission checks to use the new uid_eq and gid_eq helpers\nand remove the now unnecessary user_ns equality comparison.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "76b6db010297d4928ab7b7e7c78dd982f413f0a4",
      "tree": "0d8fef729548a4f266684c0b7e56e4a9ed14780f",
      "parents": [
        "078de5f706ece36afd73bb4b8283314132d2dfdf"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Wed Mar 14 15:24:19 2012 -0700"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu May 03 03:28:39 2012 -0700"
      },
      "message": "userns: Replace user_ns_map_uid and user_ns_map_gid with from_kuid and from_kgid\n\nThese function are no longer needed replace them with their more useful equivalents.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "078de5f706ece36afd73bb4b8283314132d2dfdf",
      "tree": "0dee00713f9cb5e2516260a66b8df99ef7d03e4d",
      "parents": [
        "ae2975bc3476243b45a1e2344236d7920c268f38"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Wed Feb 08 07:00:08 2012 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu May 03 03:28:38 2012 -0700"
      },
      "message": "userns: Store uid and gid values in struct cred with kuid_t and kgid_t types\n\ncred.h and a few trivial users of struct cred are changed.  The rest of the users\nof struct cred are left for other patches as there are too many changes to make\nin one go and leave the change reviewable.  If the user namespace is disabled and\nCONFIG_UIDGID_STRICT_TYPE_CHECKS are disabled the code will contiue to compile\nand behave correctly.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "6ac1ef482d7ae0c690f1640bf6eb818ff9a2d91e",
      "tree": "021cc9f6b477146fcebe6f3be4752abfa2ba18a9",
      "parents": [
        "682968e0c425c60f0dde37977e5beb2b12ddc4cc",
        "a385ec4f11bdcf81af094c03e2444ee9b7fad2e5"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Sat Apr 14 13:18:27 2012 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Sat Apr 14 13:19:04 2012 +0200"
      },
      "message": "Merge branch \u0027perf/core\u0027 into perf/uprobes\n\nMerge in latest upstream (and the latest perf development tree),\nto prepare for tooling changes, and also to pick up v3.4 MM\nchanges that the uprobes code needs to take care of.\n\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "a0727e8ce513fe6890416da960181ceb10fbfae6",
      "tree": "300fc5c620c4e90915985504007d9e66bc896d14",
      "parents": [
        "acf3b2c71ed20c53dc69826683417703c2a88059"
      ],
      "author": {
        "name": "Will Drewry",
        "email": "wad@chromium.org",
        "time": "Thu Apr 12 16:48:00 2012 -0500"
      },
      "committer": {
        "name": "James Morris",
        "email": "james.l.morris@oracle.com",
        "time": "Sat Apr 14 11:13:21 2012 +1000"
      },
      "message": "signal, x86: add SIGSYS info and make it synchronous.\n\nThis change enables SIGSYS, defines _sigfields._sigsys, and adds\nx86 (compat) arch support.  _sigsys defines fields which allow\na signal handler to receive the triggering system call number,\nthe relevant AUDIT_ARCH_* value for that number, and the address\nof the callsite.\n\nSIGSYS is added to the SYNCHRONOUS_MASK because it is desirable for it\nto have setup_frame() called for it. The goal is to ensure that\nucontext_t reflects the machine state from the time-of-syscall and not\nfrom another signal handler.\n\nThe first consumer of SIGSYS would be seccomp filter.  In particular,\na filter program could specify a new return value, SECCOMP_RET_TRAP,\nwhich would result in the system call being denied and the calling\nthread signaled.  This also means that implementing arch-specific\nsupport can be dependent upon HAVE_ARCH_SECCOMP_FILTER.\n\nSuggested-by: H. Peter Anvin \u003chpa@zytor.com\u003e\nSigned-off-by: Will Drewry \u003cwad@chromium.org\u003e\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nReviewed-by: H. Peter Anvin \u003chpa@zytor.com\u003e\nAcked-by: Eric Paris \u003ceparis@redhat.com\u003e\n\nv18: - added acked by, rebase\nv17: - rebase and reviewed-by addition\nv14: - rebase/nochanges\nv13: - rebase on to 88ebdda6159ffc15699f204c33feb3e431bf9bdc\nv12: - reworded changelog (oleg@redhat.com)\nv11: - fix dropped words in the change description\n     - added fallback copy_siginfo support.\n     - added __ARCH_SIGSYS define to allow stepped arch support.\nv10: - first version based on suggestion\nSigned-off-by: James Morris \u003cjames.l.morris@oracle.com\u003e\n"
    },
    {
      "commit": "c4a4d603796c727b9555867571f89483be9c565e",
      "tree": "ae3b47a7b8b35c866df53cb4b4a051d49a28904a",
      "parents": [
        "7e6bd8fadd1216f50468f965d0308f45e5109ced"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Wed Nov 16 23:15:31 2011 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Sat Apr 07 16:55:51 2012 -0700"
      },
      "message": "userns: Use cred-\u003euser_ns instead of cred-\u003euser-\u003euser_ns\n\nOptimize performance and prepare for the removal of the user_ns reference\nfrom user_struct.  Remove the slow long walk through cred-\u003euser-\u003euser_ns and\ninstead go straight to cred-\u003euser_ns.\n\nAcked-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "0195c00244dc2e9f522475868fa278c473ba7339",
      "tree": "f97ca98ae64ede2c33ad3de05ed7bbfa4f4495ed",
      "parents": [
        "f21ce8f8447c8be8847dadcfdbcc76b0d7365fa5",
        "141124c02059eee9dbc5c86ea797b1ca888e77f7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 15:58:21 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 15:58:21 2012 -0700"
      },
      "message": "Merge tag \u0027split-asm_system_h-for-linus-20120328\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-asm_system\n\nPull \"Disintegrate and delete asm/system.h\" from David Howells:\n \"Here are a bunch of patches to disintegrate asm/system.h into a set of\n  separate bits to relieve the problem of circular inclusion\n  dependencies.\n\n  I\u0027ve built all the working defconfigs from all the arches that I can\n  and made sure that they don\u0027t break.\n\n  The reason for these patches is that I recently encountered a circular\n  dependency problem that came about when I produced some patches to\n  optimise get_order() by rewriting it to use ilog2().\n\n  This uses bitops - and on the SH arch asm/bitops.h drags in\n  asm-generic/get_order.h by a circuituous route involving asm/system.h.\n\n  The main difficulty seems to be asm/system.h.  It holds a number of\n  low level bits with no/few dependencies that are commonly used (eg.\n  memory barriers) and a number of bits with more dependencies that\n  aren\u0027t used in many places (eg.  switch_to()).\n\n  These patches break asm/system.h up into the following core pieces:\n\n    (1) asm/barrier.h\n\n        Move memory barriers here.  This already done for MIPS and Alpha.\n\n    (2) asm/switch_to.h\n\n        Move switch_to() and related stuff here.\n\n    (3) asm/exec.h\n\n        Move arch_align_stack() here.  Other process execution related bits\n        could perhaps go here from asm/processor.h.\n\n    (4) asm/cmpxchg.h\n\n        Move xchg() and cmpxchg() here as they\u0027re full word atomic ops and\n        frequently used by atomic_xchg() and atomic_cmpxchg().\n\n    (5) asm/bug.h\n\n        Move die() and related bits.\n\n    (6) asm/auxvec.h\n\n        Move AT_VECTOR_SIZE_ARCH here.\n\n  Other arch headers are created as needed on a per-arch basis.\"\n\nFixed up some conflicts from other header file cleanups and moving code\naround that has happened in the meantime, so David\u0027s testing is somewhat\nweakened by that.  We\u0027ll find out anything that got broken and fix it..\n\n* tag \u0027split-asm_system_h-for-linus-20120328\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-asm_system: (38 commits)\n  Delete all instances of asm/system.h\n  Remove all #inclusions of asm/system.h\n  Add #includes needed to permit the removal of asm/system.h\n  Move all declarations of free_initmem() to linux/mm.h\n  Disintegrate asm/system.h for OpenRISC\n  Split arch_align_stack() out from asm-generic/system.h\n  Split the switch_to() wrapper out of asm-generic/system.h\n  Move the asm-generic/system.h xchg() implementation to asm-generic/cmpxchg.h\n  Create asm-generic/barrier.h\n  Make asm-generic/cmpxchg.h #include asm-generic/cmpxchg-local.h\n  Disintegrate asm/system.h for Xtensa\n  Disintegrate asm/system.h for Unicore32 [based on ver #3, changed by gxt]\n  Disintegrate asm/system.h for Tile\n  Disintegrate asm/system.h for Sparc\n  Disintegrate asm/system.h for SH\n  Disintegrate asm/system.h for Score\n  Disintegrate asm/system.h for S390\n  Disintegrate asm/system.h for PowerPC\n  Disintegrate asm/system.h for PA-RISC\n  Disintegrate asm/system.h for MN10300\n  ...\n"
    },
    {
      "commit": "d550bbd40c0e10aefa05103dadbe0ae42e683707",
      "tree": "c1f32662f605f2b87c73901fbf66d12b2ca69b04",
      "parents": [
        "e839ca528718e68cad32a307dc9aabf01ef3eb05"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Mar 28 18:30:03 2012 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Mar 28 18:30:03 2012 +0100"
      },
      "message": "Disintegrate asm/system.h for Sparc\n\nDisintegrate asm/system.h for Sparc.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\ncc: sparclinux@vger.kernel.org\n"
    },
    {
      "commit": "def8cf72562e17ec8316ce0cb5697c7afd6400e3",
      "tree": "de0ee350a81685eddadcbfc8d29545e0f7a01d05",
      "parents": [
        "629d362b9950166c6fac2aa8425db34d824bb043"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Mar 23 15:02:45 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 23 16:58:41 2012 -0700"
      },
      "message": "signal: cosmetic, s/from_ancestor_ns/force/ in prepare_signal() paths\n\nCosmetic, rename the from_ancestor_ns argument in prepare_signal()\npaths.  After the previous change it doesn\u0027t match the reality.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Anton Vorontsov \u003canton.vorontsov@linaro.org\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "629d362b9950166c6fac2aa8425db34d824bb043",
      "tree": "9f109337c786caff4bfcf7a57516fe961fe769fc",
      "parents": [
        "43aca3246cb7f736b20c11da9ce932a124a2a85a"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Mar 23 15:02:44 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 23 16:58:41 2012 -0700"
      },
      "message": "signal: give SEND_SIG_FORCED more power to beat SIGNAL_UNKILLABLE\n\nforce_sig_info() and friends have the special semantics for synchronous\nsignals, this interface should not be used if the target is not current.\nAnd it needs the fixes, in particular the clearing of SIGNAL_UNKILLABLE\nis not exactly right.\n\nHowever there are callers which have to use force_ exactly because it\nclears SIGNAL_UNKILLABLE and thus it can kill the CLONE_NEWPID tasks,\nalthough this is almost always is wrong by various reasons.\n\nWith this patch SEND_SIG_FORCED ignores SIGNAL_UNKILLABLE, like we do if\nthe signal comes from the ancestor namespace.\n\nThis makes the naming in prepare_signal() paths insane, fixed by the\nnext cleanup.\n\nNote: this only affects SIGKILL/SIGSTOP, but this is enough for\nforce_sig() abusers.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Anton Vorontsov \u003canton.vorontsov@linaro.org\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b6e238dceed36891cc633167afe7151f1f3d83c5",
      "tree": "eef4928c1a0cb1b56eb20f8d0ee592709d533f10",
      "parents": [
        "e636825346b36a07ccfc8e30946d52855e21f681"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Mar 19 17:03:41 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 20 14:16:50 2012 -0700"
      },
      "message": "exit_signal: fix the \"parent has changed security domain\" logic\n\nexit_notify() changes -\u003eexit_signal if the parent already did exec.\nThis doesn\u0027t really work, we are not going to send the signal now\nif there is another live thread or the exiting task is traced. The\nparent can exec before the last dies or the tracer detaches.\n\nMove this check into do_notify_parent() which actually sends the\nsignal.\n\nThe user-visible change is that we do not change -\u003eexit_signal,\nand thus the exiting task is still \"clone children\" for\ndo_wait()-\u003eeligible_child(__WCLONE). Hopefully this is fine, the\ncurrent logic is racy anyway.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0326f5a94ddea33fa331b2519f4172f4fb387baa",
      "tree": "5485c637754a126c90852e5285842e8462d2826a",
      "parents": [
        "ef15eda98217f5183f457e7a2de8b79555ef908b"
      ],
      "author": {
        "name": "Srikar Dronamraju",
        "email": "srikar@linux.vnet.ibm.com",
        "time": "Tue Mar 13 23:30:11 2012 +0530"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Mar 14 07:41:36 2012 +0100"
      },
      "message": "uprobes/core: Handle breakpoint and singlestep exceptions\n\nUprobes uses exception notifiers to get to know if a thread hit\na breakpoint or a singlestep exception.\n\nWhen a thread hits a uprobe or is singlestepping post a uprobe\nhit, the uprobe exception notifier sets its TIF_UPROBE bit,\nwhich will then be checked on its return to userspace path\n(do_notify_resume() -\u003euprobe_notify_resume()), where the\nconsumers handlers are run (in task context) based on the\ndefined filters.\n\nUprobe hits are thread specific and hence we need to maintain\ninformation about if a task hit a uprobe, what uprobe was hit,\nthe slot where the original instruction was copied for xol so\nthat it can be singlestepped with appropriate fixups.\n\nIn some cases, special care is needed for instructions that are\nexecuted out of line (xol). These are architecture specific\nartefacts, such as handling RIP relative instructions on x86_64.\n\nSince the instruction at which the uprobe was inserted is\nexecuted out of line, architecture specific fixups are added so\nthat the thread continues normal execution in the presence of a\nuprobe.\n\nPostpone the signals until we execute the probed insn.\npost_xol() path does a recalc_sigpending() before return to\nuser-mode, this ensures the signal can\u0027t be lost.\n\nUprobes relies on DIE_DEBUG notification to notify if a\nsinglestep is complete.\n\nAdds x86 specific uprobe exception notifiers and appropriate\nhooks needed to determine a uprobe hit and subsequent post\nprocessing.\n\nAdd requisite x86 fixups for xol for uprobes. Specific cases\nneeding fixups include relative jumps (x86_64), calls, etc.\n\nWhere possible, we check and skip singlestepping the\nbreakpointed instructions. For now we skip single byte as well\nas few multibyte nop instructions. However this can be extended\nto other instructions too.\n\nCredits to Oleg Nesterov for suggestions/patches related to\nsignal, breakpoint, singlestep handling code.\n\nSigned-off-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Ananth N Mavinakayanahalli \u003cananth@in.ibm.com\u003e\nCc: Jim Keniston \u003cjkenisto@linux.vnet.ibm.com\u003e\nCc: Linux-mm \u003clinux-mm@kvack.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@infradead.org\u003e\nCc: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nLink: http://lkml.kernel.org/r/20120313180011.29771.89027.sendpatchset@srdronam.in.ibm.com\n[ Performed various cleanliness edits ]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "163566f60bfe6a8176650155e2d98649b0dfabf8",
      "tree": "3c1c8de6abf5af1e3234fc09e2b2aae93ad2b267",
      "parents": [
        "6c303d3ab39f0dc69546f179c424ee1124f50906"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Nov 22 21:37:41 2011 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jan 13 18:49:02 2012 +0100"
      },
      "message": "tracing: send_sigqueue() needs trace_signal_generate() too\n\nAdd trace_signal_generate() into send_sigqueue().\n\nsend_sigqueue() is very similar to __send_signal(), just it uses\nthe preallocated info. It should do the same wrt tracing.\n\nReported-by: Seiji Aguchi \u003csaguchi@redhat.com\u003e\nReviewed-by: Seiji Aguchi \u003cseiji.aguchi@hds.com\u003e\nAcked-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "6c303d3ab39f0dc69546f179c424ee1124f50906",
      "tree": "40fd551256229f2ac1f931c3f9e650ba67deefc7",
      "parents": [
        "099469502f62fbe0d7e4f0b83a2f22538367f734"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Nov 22 21:13:48 2011 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jan 13 18:48:50 2012 +0100"
      },
      "message": "tracing: let trace_signal_generate() report more info, kill overflow_fail/lose_info\n\n__send_signal()-\u003etrace_signal_generate() doesn\u0027t report enough info.\nThe users want to know was the signal actually delivered or not, and\nthey also need the shared/private info.\n\nThe patch moves trace_signal_generate() at the end of __send_signal()\nand adds the 2 additional arguments.\n\nThis also allows us to kill trace_signal_overflow_fail/lose_info, we\ncan simply add the appropriate TRACE_SIGNAL_ \"result\" codes.\n\nReported-by: Seiji Aguchi \u003csaguchi@redhat.com\u003e\nReviewed-by: Seiji Aguchi \u003cseiji.aguchi@hds.com\u003e\nAcked-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "6b550f9495947fc279d12c38feaf98500e8d0646",
      "tree": "ab018bd7e2f8c2c594252f35ffa7c413f86519cf",
      "parents": [
        "b196be89cdc14a88cc637cdad845a75c5886c82d"
      ],
      "author": {
        "name": "Serge E. Hallyn",
        "email": "serge@hallyn.com",
        "time": "Tue Jan 10 15:11:37 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:54 2012 -0800"
      },
      "message": "user namespace: make signal.c respect user namespaces\n\nipc/mqueue.c: for __SI_MESQ, convert the uid being sent to recipient\u0027s\nuser namespace. (new, thanks Oleg)\n\n__send_signal: convert current\u0027s uid to the recipient\u0027s user namespace\nfor any siginfo which is not SI_FROMKERNEL (patch from Oleg, thanks\nagain :)\n\ndo_notify_parent and do_notify_parent_cldstop: map task\u0027s uid to parent\u0027s\nuser namespace\n\nptrace_signal maps parent\u0027s uid into current\u0027s user namespace before\nincluding in signal to current.  IIUC Oleg has argued that this shouldn\u0027t\nmatter as the debugger will play with it, but it seems like not converting\nthe value currently being set is misleading.\n\nChangelog:\nSep 20: Inspired by Oleg\u0027s suggestion, define map_cred_ns() helper to\n\tsimplify callers and help make clear what we are translating\n        (which uid into which namespace).  Passing the target task would\n\tmake callers even easier to read, but we pass in user_ns because\n\tcurrent_user_ns() !\u003d task_cred_xxx(current, user_ns).\nSep 20: As recommended by Oleg, also put task_pid_vnr() under rcu_read_lock\n\tin ptrace_signal().\nSep 23: In send_signal(), detect when (user) signal is coming from an\n\tancestor or unrelated user namespace.  Pass that on to __send_signal,\n\twhich sets si_uid to 0 or overflowuid if needed.\nOct 12: Base on Oleg\u0027s fixup_uid() patch.  On top of that, handle all\n\tSI_FROMKERNEL cases at callers, because we can\u0027t assume sender is\n\tcurrent in those cases.\nNov 10: (mhelsley) rename fixup_uid to more meaningful usern_fixup_signal_uid\nNov 10: (akpm) make the !CONFIG_USER_NS case clearer\n\nSigned-off-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nFrom: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nSubject: __send_signal: pass q-\u003einfo, not info, to userns_fixup_signal_uid (v2)\n\nEric Biederman pointed out that passing info is a bug and could lead to a\nNULL pointer deref to boot.\n\nA collection of signal, securebits, filecaps, cap_bounds, and a few other\nltp tests passed with this kernel.\n\nChangelog:\n    Nov 18: previous patch missed a leading \u0027\u0026\u0027\n\nSigned-off-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nFrom: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSubject: ipc/mqueue: lock() \u003d\u003e unlock() typo\n\nThere was a double lock typo introduced in b085f4bd6b21 \"user namespace:\nmake signal.c respect user namespaces\"\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nAcked-by: Serge Hallyn \u003cserge@hallyn.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5e6292c0f28f03dfdb8ea3d685f0b838a23bfba4",
      "tree": "8684833680054ab48f9da2bbc36c93e3d00a3391",
      "parents": [
        "f350b1778f1b7713ef54fbc7e079e09e2fe098b9"
      ],
      "author": {
        "name": "Matt Fleming",
        "email": "matt.fleming@intel.com",
        "time": "Tue Jan 10 15:11:17 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 10 16:30:54 2012 -0800"
      },
      "message": "signal: add block_sigmask() for adding sigmask to current-\u003eblocked\n\nAbstract the code sequence for adding a signal handler\u0027s sa_mask to\ncurrent-\u003eblocked because the sequence is identical for all architectures.\nFurthermore, in the past some architectures actually got this code wrong,\nso introduce a wrapper that all architectures can use.\n\nSigned-off-by: Matt Fleming \u003cmatt.fleming@intel.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "db0c2bf69aa095d4a6de7b1145f29fe9a7c0f6a3",
      "tree": "8f38957c01b18edddd44d49ecc3beeac08a20b4e",
      "parents": [
        "ac69e0928054ff29a5049902fb477f9c7605c773",
        "0d19ea866562e46989412a0676412fa0983c9ce7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 09 12:59:24 2012 -0800"
      },
      "message": "Merge branch \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\n* \u0027for-3.3\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (21 commits)\n  cgroup: fix to allow mounting a hierarchy by name\n  cgroup: move assignement out of condition in cgroup_attach_proc()\n  cgroup: Remove task_lock() from cgroup_post_fork()\n  cgroup: add sparse annotation to cgroup_iter_start() and cgroup_iter_end()\n  cgroup: mark cgroup_rmdir_waitq and cgroup_attach_proc() as static\n  cgroup: only need to check oldcgrp\u003d\u003dnewgrp once\n  cgroup: remove redundant get/put of task struct\n  cgroup: remove redundant get/put of old css_set from migrate\n  cgroup: Remove unnecessary task_lock before fetching css_set on migration\n  cgroup: Drop task_lock(parent) on cgroup_fork()\n  cgroups: remove redundant get/put of css_set from css_set_check_fetched()\n  resource cgroups: remove bogus cast\n  cgroup: kill subsys-\u003ecan_attach_task(), pre_attach() and attach_task()\n  cgroup, cpuset: don\u0027t use ss-\u003epre_attach()\n  cgroup: don\u0027t use subsys-\u003ecan_attach_task() or -\u003eattach_task()\n  cgroup: introduce cgroup_taskset and use it in subsys-\u003ecan_attach(), cancel_attach() and attach()\n  cgroup: improve old cgroup handling in cgroup_attach_proc()\n  cgroup: always lock threadgroup during migration\n  threadgroup: extend threadgroup_lock() to cover exit and exec\n  threadgroup: rename signal-\u003ethreadgroup_fork_lock to -\u003egroup_rwsem\n  ...\n\nFix up conflict in kernel/cgroup.c due to commit e0197aae59e5: \"cgroups:\nfix a css_set not found bug in cgroup_attach_proc\" that already\nmentioned that the bug is fixed (differently) in Tejun\u0027s cgroup\npatchset. This one, in other words.\n"
    },
    {
      "commit": "0db49b72bce26341274b74fd968501489a361ae3",
      "tree": "cdb076827aefb38d719d4c42f8ef291c36072fa8",
      "parents": [
        "35b740e4662ef386f0c60e1b60aaf5b44db9914c",
        "1ac9bc6943edf7d181b4b1cc734981350d4f6bae"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 06 08:33:28 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 06 08:44:54 2012 -0800"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (40 commits)\n  sched/tracing: Add a new tracepoint for sleeptime\n  sched: Disable scheduler warnings during oopses\n  sched: Fix cgroup movement of waking process\n  sched: Fix cgroup movement of newly created process\n  sched: Fix cgroup movement of forking process\n  sched: Remove cfs bandwidth period check in tg_set_cfs_period()\n  sched: Fix load-balance lock-breaking\n  sched: Replace all_pinned with a generic flags field\n  sched: Only queue remote wakeups when crossing cache boundaries\n  sched: Add missing rcu_dereference() around -\u003ereal_parent usage\n  [S390] fix cputime overflow in uptime_proc_show\n  [S390] cputime: add sparse checking and cleanup\n  sched: Mark parent and real_parent as __rcu\n  sched, nohz: Fix missing RCU read lock\n  sched, nohz: Set the NOHZ_BALANCE_KICK flag for idle load balancer\n  sched, nohz: Fix the idle cpu check in nohz_idle_balance\n  sched: Use jump_labels for sched_feat\n  sched/accounting: Fix parameter passing in task_group_account_field\n  sched/accounting: Fix user/system tick double accounting\n  sched/accounting: Re-use scheduler statistics for the root cgroup\n  ...\n\nFix up conflicts in\n - arch/ia64/include/asm/cputime.h, include/asm-generic/cputime.h\n\tusecs_to_cputime64() vs the sparse cleanups\n - kernel/sched/fair.c, kernel/time/tick-sched.c\n\tscheduler changes in multiple branches\n"
    },
    {
      "commit": "8a88951b5878dc475dcd841cefc767e36397d14e",
      "tree": "c31fd8cdfa08dce4768f42e556d97929deac2343",
      "parents": [
        "50b8d257486a45cba7b65ca978986ed216bbcc10"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jan 04 17:29:20 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jan 04 15:01:59 2012 -0800"
      },
      "message": "ptrace: ensure JOBCTL_STOP_SIGMASK is not zero after detach\n\nThis is the temporary simple fix for 3.2, we need more changes in this\narea.\n\n1. do_signal_stop() assumes that the running untraced thread in the\n   stopped thread group is not possible. This was our goal but it is\n   not yet achieved: a stopped-but-resumed tracee can clone the running\n   thread which can initiate another group-stop.\n\n   Remove WARN_ON_ONCE(!current-\u003eptrace).\n\n2. A new thread always starts with -\u003ejobctl \u003d 0. If it is auto-attached\n   and this group is stopped, __ptrace_unlink() sets JOBCTL_STOP_PENDING\n   but JOBCTL_STOP_SIGMASK part is zero, this triggers WANR_ON(!signr)\n   in do_jobctl_trap() if another debugger attaches.\n\n   Change __ptrace_unlink() to set the artificial SIGSTOP for report.\n\n   Alternatively we could change ptrace_init_task() to copy signr from\n   current, but this means we can copy it for no reason and hide the\n   possible similar problems.\n\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[3.1]\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "648616343cdbe904c585a6c12e323d3b3c72e46f",
      "tree": "514bce1b52663db4ab5662b637c764cf3c2ed1eb",
      "parents": [
        "55b02d2f4445ad625213817a1736bf2884d32547"
      ],
      "author": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Thu Dec 15 14:56:09 2011 +0100"
      },
      "committer": {
        "name": "Martin Schwidefsky",
        "email": "schwidefsky@de.ibm.com",
        "time": "Thu Dec 15 14:56:19 2011 +0100"
      },
      "message": "[S390] cputime: add sparse checking and cleanup\n\nMake cputime_t and cputime64_t nocast to enable sparse checking to\ndetect incorrect use of cputime. Drop the cputime macros for simple\nscalar operations. The conversion macros are still needed.\n\nSigned-off-by: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\n"
    },
    {
      "commit": "77e4ef99d1c596a31747668e5fd837f77b6349b6",
      "tree": "b9dcc8d73f9febf6a18edc0b2efa3ecddc2a7a35",
      "parents": [
        "257058ae2b971646b96ab3a15605ac69186e562a"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Dec 12 18:12:21 2011 -0800"
      },
      "message": "threadgroup: extend threadgroup_lock() to cover exit and exec\n\nthreadgroup_lock() protected only protected against new addition to\nthe threadgroup, which was inherently somewhat incomplete and\nproblematic for its only user cgroup.  On-going migration could race\nagainst exec and exit leading to interesting problems - the symmetry\nbetween various attach methods, task exiting during method execution,\n-\u003eexit() racing against attach methods, migrating task switching basic\nproperties during exec and so on.\n\nThis patch extends threadgroup_lock() such that it protects against\nall three threadgroup altering operations - fork, exit and exec.  For\nexit, threadgroup_change_begin/end() calls are added to exit_signals\naround assertion of PF_EXITING.  For exec, threadgroup_[un]lock() are\nupdated to also grab and release cred_guard_mutex.\n\nWith this change, threadgroup_lock() guarantees that the target\nthreadgroup will remain stable - no new task will be added, no new\nPF_EXITING will be set and exec won\u0027t happen.\n\nThe next patch will update cgroup so that it can take full advantage\nof this change.\n\n-v2: beefed up comment as suggested by Frederic.\n\n-v3: narrowed scope of protection in exit path as suggested by\n     Frederic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nAcked-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Paul Menage \u003cpaul@paulmenage.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9984de1a5a8a96275fcab818f7419af5a3c86e71",
      "tree": "1935d411752707a1621c5caf64f75dfe105beb3a",
      "parents": [
        "7c77509c542927ee2a3c8812fad84957e51bf67d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon May 23 14:51:41 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "kernel: Map most files to use export.h instead of module.h\n\nThe changed files were only including linux/module.h for the\nEXPORT_SYMBOL infrastructure, and nothing else.  Revector them\nonto the isolated export header for faster compile times.\n\nNothing to see here but a whole lot of instances of:\n\n  -#include \u003clinux/module.h\u003e\n  +#include \u003clinux/export.h\u003e\n\nThis commit is only changing the kernel dir; next targets\nwill probably be mm, fs, the arch dirs, etc.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "d178bc3a708f39cbfefc3fab37032d3f2511b4ec",
      "tree": "af492e92e140f1f6abad5a377a269ef7335824de",
      "parents": [
        "edb2b255a0bebac5aeb17c7613aeb76ba4e6c63c"
      ],
      "author": {
        "name": "Serge Hallyn",
        "email": "serge.hallyn@canonical.com",
        "time": "Mon Sep 26 10:45:18 2011 -0500"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Thu Sep 29 13:13:08 2011 -0700"
      },
      "message": "user namespace: usb: make usb urbs user namespace aware (v2)\n\nAdd to the dev_state and alloc_async structures the user namespace\ncorresponding to the uid and euid.  Pass these to kill_pid_info_as_uid(),\nwhich can then implement a proper, user-namespace-aware uid check.\n\nChangelog:\nSep 20: Per Oleg\u0027s suggestion: Instead of caching and passing user namespace,\n\tuid, and euid each separately, pass a struct cred.\nSep 26: Address Alan Stern\u0027s comments: don\u0027t define a struct cred at\n\tusbdev_open(), and take and put a cred at async_completed() to\n\tensure it lasts for the duration of kill_pid_info_as_cred().\n\nSigned-off-by: Serge Hallyn \u003cserge.hallyn@canonical.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "c1095c6da518b0b64e724f629051fa67655cd8d9",
      "tree": "8c2e33ca6c8e3caa71437c3b69b36a8cf03b4f08",
      "parents": [
        "678624e401b0b7747762b5223fb23f86dcdacc93"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jul 27 12:49:44 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 27 12:53:36 2011 -0700"
      },
      "message": "signals: sys_ssetmask/sys_rt_sigsuspend should use set_current_blocked()\n\nsys_ssetmask(), sys_rt_sigsuspend() and compat_sys_rt_sigsuspend()\nchange -\u003eblocked directly.  This is not correct, see the changelog in\ne6fa16ab \"signal: sigprocmask() should do retarget_shared_pending()\"\n\nChange them to use set_current_blocked().\n\nAnother change is that now we are doing -\u003esaved_sigmask \u003d -\u003eblocked\nlockless, it doesn\u0027t make any sense to do this under -\u003esiglock.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8209f53d79444747782a28520187abaf689761f2",
      "tree": "726270ea29e037f026d77a99787b9d844531ac42",
      "parents": [
        "22a3b9771117d566def0150ea787fcc95f16e724",
        "eac1b5e57d7abc836e78fd3fbcf77dbeed01edc9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (39 commits)\n  ptrace: do_wait(traced_leader_killed_by_mt_exec) can block forever\n  ptrace: fix ptrace_signal() \u0026\u0026 STOP_DEQUEUED interaction\n  connector: add an event for monitoring process tracers\n  ptrace: dont send SIGSTOP on auto-attach if PT_SEIZED\n  ptrace: mv send-SIGSTOP from do_fork() to ptrace_init_task()\n  ptrace_init_task: initialize child-\u003ejobctl explicitly\n  has_stopped_jobs: s/task_is_stopped/SIGNAL_STOP_STOPPED/\n  ptrace: make former thread ID available via PTRACE_GETEVENTMSG after PTRACE_EVENT_EXEC stop\n  ptrace: wait_consider_task: s/same_thread_group/ptrace_reparented/\n  ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()\n  ptrace: ptrace_reparented() should check same_thread_group()\n  redefine thread_group_leader() as exit_signal \u003e\u003d 0\n  do not change dead_task-\u003eexit_signal\n  kill task_detached()\n  reparent_leader: check EXIT_DEAD instead of task_detached()\n  make do_notify_parent() __must_check, update the callers\n  __ptrace_detach: avoid task_detached(), check do_notify_parent()\n  kill tracehook_notify_death()\n  make do_notify_parent() return bool\n  ptrace: s/tracehook_tracer_task()/ptrace_parent()/\n  ...\n"
    },
    {
      "commit": "8a35241803eeb0e9fd3fe27835d6b2775c73b641",
      "tree": "09f15db936084e239279844bcb6db6608e2bb06f",
      "parents": [
        "f701e5b73a1a79ea62ffd45d9e2bed4c7d5c1fd2"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jul 21 17:06:53 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jul 21 17:06:53 2011 +0200"
      },
      "message": "ptrace: fix ptrace_signal() \u0026\u0026 STOP_DEQUEUED interaction\n\nSimple test-case,\n\n\tint main(void)\n\t{\n\t\tint pid, status;\n\n\t\tpid \u003d fork();\n\t\tif (!pid) {\n\t\t\tpause();\n\t\t\tassert(0);\n\t\t\treturn 0x23;\n\t\t}\n\n\t\tassert(ptrace(PTRACE_ATTACH, pid, 0,0) \u003d\u003d 0);\n\t\tassert(wait(\u0026status) \u003d\u003d pid);\n\t\tassert(WIFSTOPPED(status) \u0026\u0026 WSTOPSIG(status) \u003d\u003d SIGSTOP);\n\n\t\tkill(pid, SIGCONT);\t// \u003c--- also clears STOP_DEQUEUD\n\n\t\tassert(ptrace(PTRACE_CONT, pid, 0,0) \u003d\u003d 0);\n\t\tassert(wait(\u0026status) \u003d\u003d pid);\n\t\tassert(WIFSTOPPED(status) \u0026\u0026 WSTOPSIG(status) \u003d\u003d SIGCONT);\n\n\t\tassert(ptrace(PTRACE_CONT, pid, 0, SIGSTOP) \u003d\u003d 0);\n\t\tassert(wait(\u0026status) \u003d\u003d pid);\n\t\tassert(WIFSTOPPED(status) \u0026\u0026 WSTOPSIG(status) \u003d\u003d SIGSTOP);\n\n\t\tkill(pid, SIGKILL);\n\t\treturn 0;\n\t}\n\nWithout the patch it hangs. After the patch SIGSTOP \"injected\" by the\ntracer is not ignored and stops the tracee.\n\nNote also that if this test-case uses, say, SIGWINCH instead of SIGCONT,\neverything works without the patch. This can\u0027t be right, and this is\nconfusing.\n\nThe problem is that SIGSTOP (or any other sig_kernel_stop() signal) has\nno effect without JOBCTL_STOP_DEQUEUED. This means it is simply ignored\nafter PTRACE_CONT unless JOBCTL_STOP_DEQUEUED was set \"by accident\", say\nit wasn\u0027t cleared after initial SIGSTOP sent by PTRACE_ATTACH.\n\nAt first glance we could change ptrace_signal() to add STOP_DEQUEUED\nafter return from ptrace_stop(), but this is not right in case when the\ntracer does not change the reported SIGSTOP and SIGCONT comes in between.\nThis is even more wrong with PT_SEIZED, SIGCONT adds JOBCTL_TRAP_NOTIFY\nwhich will be \"lost\" during the TRAP_STOP | TRAP_NOTIFY report.\n\nSo lets add STOP_DEQUEUED _before_ we report the signal. It has no effect\nunless sig_kernel_stop() \u003d\u003d T after the tracer resumes us, and in the\nlatter case the pending STOP_DEQUEUED means no SIGCONT in between, we\nshould stop.\n\nNote also that if SIGCONT was sent, PT_SEIZED tracee will correctly\nreport PTRACE_EVENT_STOP/SIGTRAP and thus the tracer can notice the fact\nSIGSTOP was cancelled.\n\nAlso, move the current-\u003eptrace check from ptrace_signal() to its caller,\nget_signal_to_deliver(), this looks more natural.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a841796f11c90d53dbac773be56b04fbee8af272",
      "tree": "9401a53faddecc7c1644565d0e22630028f82bca",
      "parents": [
        "ec433f0c51527426989ea8a38a856d810d739414"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paul.mckenney@linaro.org",
        "time": "Tue Jul 19 03:25:36 2011 -0700"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Jul 20 11:04:54 2011 -0700"
      },
      "message": "signal: align __lock_task_sighand() irq disabling and RCU\n\nThe __lock_task_sighand() function calls rcu_read_lock() with interrupts\nand preemption enabled, but later calls rcu_read_unlock() with interrupts\ndisabled.  It is therefore possible that this RCU read-side critical\nsection will be preempted and later RCU priority boosted, which means that\nrcu_read_unlock() will call rt_mutex_unlock() in order to deboost itself, but\nwith interrupts disabled. This results in lockdep splats, so this commit\nnests the RCU read-side critical section within the interrupt-disabled\nregion of code.  This prevents the RCU read-side critical section from\nbeing preempted, and thus prevents the attempt to deboost with interrupts\ndisabled.\n\nIt is quite possible that a better long-term fix is to make rt_mutex_unlock()\ndisable irqs when acquiring the rt_mutex structure\u0027s -\u003ewait_lock.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "bb3696da89743d580f869142d0a6e6ba9b7fe89a",
      "tree": "fb961c4164198742024ed8924a8824699a3065f1",
      "parents": [
        "0347e17739095c58c0194fed6a61aced3536d258"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jun 24 17:34:23 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:10 2011 +0200"
      },
      "message": "ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()\n\nKill real_parent_is_ptracer() and update the callers to use\nptrace_reparented(), after the previous patch they do the same.\n\nRemove the unnecessary -\u003eptrace !\u003d 0 check in get_signal_to_deliver(),\nif ptrace_reparented() \u003d\u003d T then the task must be ptraced.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "d4f7c511c1c2a67eb287987cf1ce9554149030e6",
      "tree": "0756b300e8f558a923782a9ccea9a8b532e39159",
      "parents": [
        "e550f14dc6322e794d4e70825f63c9c99177ae8b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:10:11 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:10 2011 +0200"
      },
      "message": "do not change dead_task-\u003eexit_signal\n\n__ptrace_detach() and do_notify_parent() set task-\u003eexit_signal \u003d -1\nto mark the task dead. This is no longer needed, nobody checks\nexit_signal to detect the EXIT_DEAD task.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "53c8f9f199b239668e6b1a907735ee323a0d1ccd",
      "tree": "785afb9c72a2df27cd6802cf311df18711c59b76",
      "parents": [
        "06d984737bac0545fe20bb5447ee488b95adb531"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:08:18 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:08 2011 +0200"
      },
      "message": "make do_notify_parent() return bool\n\n- change do_notify_parent() to return a boolean, true if the task should\n  be reaped because its parent ignores SIGCHLD.\n\n- update the only caller which checks the returned value, exit_notify().\n\nThis temporary uglifies exit_notify() even more, will be cleanuped by\nthe next change.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a288eecce5253cc1565d400a52b9b476a157e040",
      "tree": "a933dd8c9791be83b7a67a33502c79e7b441960e",
      "parents": [
        "f3c04b934d429b1ace21866f011b66de328c0dc9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 17 16:50:37 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 19:26:28 2011 +0200"
      },
      "message": "ptrace: kill trivial tracehooks\n\nAt this point, tracehooks aren\u0027t useful to mainline kernel and mostly\njust add an extra layer of obfuscation.  Although they have comments,\nwithout actual in-kernel users, it is difficult to tell what are their\nassumptions and they\u0027re actually trying to achieve.  To mainline\nkernel, they just aren\u0027t worth keeping around.\n\nThis patch kills the following trivial tracehooks.\n\n* Ones testing whether task is ptraced.  Replace with -\u003eptrace test.\n\n\ttracehook_expect_breakpoints()\n\ttracehook_consider_ignored_signal()\n\ttracehook_consider_fatal_signal()\n\n* ptrace_event() wrappers.  Call directly.\n\n\ttracehook_report_exec()\n\ttracehook_report_exit()\n\ttracehook_report_vfork_done()\n\n* ptrace_release_task() wrapper.  Call directly.\n\n\ttracehook_finish_release_task()\n\n* noop\n\n\ttracehook_prepare_release_task()\n\ttracehook_report_death()\n\nThis doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d21142ece414ce1088cfcae760689aa60d6fee80",
      "tree": "9f97b4518cd06fe695476fc6cc4ff9ed8d5bdd58",
      "parents": [
        "544b2c91a9f14f9565af1972203438b7f49afd48"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 17 16:50:34 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 19:26:27 2011 +0200"
      },
      "message": "ptrace: kill task_ptrace()\n\ntask_ptrace(task) simply dereferences task-\u003eptrace and isn\u0027t even used\nconsistently only adding confusion.  Kill it and directly access\n-\u003eptrace instead.\n\nThis doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "544b2c91a9f14f9565af1972203438b7f49afd48",
      "tree": "38615eeed1e50580a2341b5a9d15c98793d33c2d",
      "parents": [
        "fb1d910c178ba0c5bc32d3e5a9e82e05b7aad3cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:18 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:54 2011 +0200"
      },
      "message": "ptrace: implement PTRACE_LISTEN\n\nThe previous patch implemented async notification for ptrace but it\nonly worked while trace is running.  This patch introduces\nPTRACE_LISTEN which is suggested by Oleg Nestrov.\n\nIt\u0027s allowed iff tracee is in STOP trap and puts tracee into\nquasi-running state - tracee never really runs but wait(2) and\nptrace(2) consider it to be running.  While ptracer is listening,\ntracee is allowed to re-enter STOP to notify an async event.\nListening state is cleared on the first notification.  Ptracer can\nalso clear it by issuing INTERRUPT - tracee will re-trap into STOP\nwith listening state cleared.\n\nThis allows ptracer to monitor group stop state without running tracee\n- use INTERRUPT to put tracee into STOP trap, issue LISTEN and then\nwait(2) to wait for the next group stop event.  When it happens,\nPTRACE_GETSIGINFO provides information to determine the current state.\n\nTest program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_INTERRUPT\t0x4207\n  #define PTRACE_LISTEN\t\t0x4208\n\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee, tracer;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  siginfo_t si;\n\n\t\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t\t  ptrace(PTRACE_INTERRUPT, tracee, NULL, NULL);\n\t  repeat:\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\n\t\t  ptrace(PTRACE_GETSIGINFO, tracee, NULL, \u0026si);\n\t\t  if (!si.si_code) {\n\t\t\t  printf(\"tracer: SIG %d\\n\", si.si_signo);\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t (void *)(unsigned long)si.si_signo);\n\t\t\t  goto repeat;\n\t\t  }\n\t\t  printf(\"tracer: stopped\u003d%d signo\u003d%d\\n\",\n\t\t\t si.si_signo !\u003d SIGTRAP, si.si_signo);\n\t\t  if (si.si_signo !\u003d SIGTRAP)\n\t\t\t  ptrace(PTRACE_LISTEN, tracee, NULL, NULL);\n\t\t  else\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t\t  goto repeat;\n\t  }\n\n\t  for (i \u003d 0; i \u003c 3; i++) {\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGSTOP\\n\");\n\t\t  kill(tracee, SIGSTOP);\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGCONT\\n\");\n\t\t  kill(tracee, SIGCONT);\n\t  }\n\t  nanosleep(\u0026ts1s, NULL);\n\n\t  kill(tracer, SIGKILL);\n\t  kill(tracee, SIGKILL);\n\t  return 0;\n  }\n\nThis is identical to the program to test TRAP_NOTIFY except that\ntracee is PTRACE_LISTEN\u0027d instead of PTRACE_CONT\u0027d when group stopped.\nThis allows ptracer to monitor when group stop ends without running\ntracee.\n\n  # ./test-listen\n  tracer: stopped\u003d0 signo\u003d5\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n\n-v2: Moved JOBCTL_LISTENING check in wait_task_stopped() into\n     task_stopped_code() as suggested by Oleg.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "fb1d910c178ba0c5bc32d3e5a9e82e05b7aad3cd",
      "tree": "dd889f33758a914cb538583073000bc21aeb1759",
      "parents": [
        "fca26f260c528ee51a2e451b5b200aeb528f3e09"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:17 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:53 2011 +0200"
      },
      "message": "ptrace: implement TRAP_NOTIFY and use it for group stop events\n\nCurrently there\u0027s no way for ptracer to find out whether group stop\nfinished other than polling with INTERRUPT - GETSIGINFO - CONT\nsequence.  This patch implements group stop notification for ptracer\nusing STOP traps.\n\nWhen group stop state of a seized tracee changes, JOBCTL_TRAP_NOTIFY\nis set, which schedules a STOP trap which is sticky - it isn\u0027t cleared\nby other traps and at least one STOP trap will happen eventually.\nSTOP trap is synchronization point for event notification and the\ntracer can determine the current group stop state by looking at the\nsignal number portion of exit code (si_status from waitid(2) or\nsi_code from PTRACE_GETSIGINFO).\n\nNotifications are generated both on start and end of group stops but,\nbecause group stop participation always happens before STOP trap, this\ndoesn\u0027t cause an extra trap while tracee is participating in group\nstop.  The symmetry will be useful later.\n\nNote that this notification works iff tracee is not trapped.\nCurrently there is no way to be notified of group stop state changes\nwhile tracee is trapped.  This will be addressed by a later patch.\n\nAn example program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_INTERRUPT\t0x4207\n\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee, tracer;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  siginfo_t si;\n\n\t\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t\t  ptrace(PTRACE_INTERRUPT, tracee, NULL, NULL);\n\t  repeat:\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\n\t\t  ptrace(PTRACE_GETSIGINFO, tracee, NULL, \u0026si);\n\t\t  if (!si.si_code) {\n\t\t\t  printf(\"tracer: SIG %d\\n\", si.si_signo);\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t (void *)(unsigned long)si.si_signo);\n\t\t\t  goto repeat;\n\t\t  }\n\t\t  printf(\"tracer: stopped\u003d%d signo\u003d%d\\n\",\n\t\t\t si.si_signo !\u003d SIGTRAP, si.si_signo);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t\t  goto repeat;\n\t  }\n\n\t  for (i \u003d 0; i \u003c 3; i++) {\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGSTOP\\n\");\n\t\t  kill(tracee, SIGSTOP);\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGCONT\\n\");\n\t\t  kill(tracee, SIGCONT);\n\t  }\n\t  nanosleep(\u0026ts1s, NULL);\n\n\t  kill(tracer, SIGKILL);\n\t  kill(tracee, SIGKILL);\n\t  return 0;\n  }\n\nIn the above program, tracer keeps tracee running and gets\nnotification of each group stop state changes.\n\n  # ./test-notify\n  tracer: stopped\u003d0 signo\u003d5\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3544d72a0e10d0aa1c1bd59ed77a53a59cdc12f7",
      "tree": "27eb767b5cb98f58cccb5b7053a58bccd105f9d0",
      "parents": [
        "73ddff2bee159ffb580bd24faf625cd5e628f5ec"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:15 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:53 2011 +0200"
      },
      "message": "ptrace: implement PTRACE_SEIZE\n\nPTRACE_ATTACH implicitly issues SIGSTOP on attach which has side\neffects on tracee signal and job control states.  This patch\nimplements a new ptrace request PTRACE_SEIZE which attaches a tracee\nwithout trapping it or affecting its signal and job control states.\n\nThe usage is the same with PTRACE_ATTACH but it takes PTRACE_SEIZE_*\nflags in @data.  Currently, the only defined flag is\nPTRACE_SEIZE_DEVEL which is a temporary flag to enable PTRACE_SEIZE.\nPTRACE_SEIZE will change ptrace behaviors outside of attach itself.\nThe changes will be implemented gradually and the DEVEL flag is to\nprevent programs which expect full SEIZE behavior from using it before\nall the behavior modifications are complete while allowing unit\ntesting.  The flag will be removed once SEIZE behaviors are completely\nimplemented.\n\n* PTRACE_SEIZE, unlike ATTACH, doesn\u0027t force tracee to trap.  After\n  attaching tracee continues to run unless a trap condition occurs.\n\n* PTRACE_SEIZE doesn\u0027t affect signal or group stop state.\n\n* If PTRACE_SEIZE\u0027d, group stop uses PTRACE_EVENT_STOP trap which uses\n  exit_code of (signr | PTRACE_EVENT_STOP \u003c\u003c 8) where signr is one of\n  the stopping signals if group stop is in effect or SIGTRAP\n  otherwise, and returns usual trap siginfo on PTRACE_GETSIGINFO\n  instead of NULL.\n\nSeizing sets PT_SEIZED in -\u003eptrace of the tracee.  This flag will be\nused to determine whether new SEIZE behaviors should be enabled.\n\nTest program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n  static const struct timespec ts3s \u003d { .tv_sec \u003d 3 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee;\n\n\t  tracee \u003d fork();\n\t  if (tracee \u003d\u003d 0) {\n\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  while (1) {\n\t\t\t  printf(\"tracee: alive\\n\");\n\t\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  }\n\t  }\n\n\t  if (argc \u003e 1)\n\t\t  kill(tracee, SIGSTOP);\n\n\t  nanosleep(\u0026ts100ms, NULL);\n\n\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t  if (argc \u003e 1) {\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t  }\n\t  nanosleep(\u0026ts3s, NULL);\n\t  printf(\"tracer: exiting\\n\");\n\t  return 0;\n  }\n\nWhen the above program is called w/o argument, tracee is seized while\nrunning and remains running.  When tracer exits, tracee continues to\nrun and print out messages.\n\n  # ./test-seize-simple\n  tracee: alive\n  tracee: alive\n  tracee: alive\n  tracer: exiting\n  tracee: alive\n  tracee: alive\n\nWhen called with an argument, tracee is seized from stopped state and\ncontinued, and returns to stopped state when tracer exits.\n\n  # ./test-seize\n  tracee: alive\n  tracee: alive\n  tracee: alive\n  tracer: exiting\n  # ps -el|grep test-seize\n  1 T     0  4720     1  0  80   0 -   941 signal ttyS0    00:00:00 test-seize\n\n-v2: SEIZE doesn\u0027t schedule TRAP_STOP and leaves tracee running as Jan\n     suggested.\n\n-v3: PTRACE_EVENT_STOP traps now report group stop state by signr.  If\n     group stop is in effect the stop signal number is returned as\n     part of exit_code; otherwise, SIGTRAP.  This was suggested by\n     Denys and Oleg.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Kratochvil \u003cjan.kratochvil@redhat.com\u003e\nCc: Denys Vlasenko \u003cvda.linux@googlemail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "73ddff2bee159ffb580bd24faf625cd5e628f5ec",
      "tree": "218cf5101b67c98ef99814e59706976d3ad245c2",
      "parents": [
        "dd1d6772692316fe35094085c5e4d9a370ad3462"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:14 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:52 2011 +0200"
      },
      "message": "job control: introduce JOBCTL_TRAP_STOP and use it for group stop trap\n\ndo_signal_stop() implemented both normal group stop and trap for group\nstop while ptraced.  This approach has been enough but scheduled\nchanges require trap mechanism which can be used in more generic\nmanner and using group stop trap for generic trap site simplifies both\nuserland visible interface and implementation.\n\nThis patch adds a new jobctl flag - JOBCTL_TRAP_STOP.  When set, it\ntriggers a trap site, which behaves like group stop trap, in\nget_signal_to_deliver() after checking for pending signals.  While\nptraced, do_signal_stop() doesn\u0027t stop itself.  It initiates group\nstop if requested and schedules JOBCTL_TRAP_STOP and returns.  The\ncaller - get_signal_to_deliver() - is responsible for checking whether\nTRAP_STOP is pending afterwards and handling it.\n\nptrace_attach() is updated to use JOBCTL_TRAP_STOP instead of\nJOBCTL_STOP_PENDING and __ptrace_unlink() to clear all pending trap\nbits and TRAPPING so that TRAP_STOP and future trap bits don\u0027t linger\nafter detach.\n\nWhile at it, add proper function comment to do_signal_stop() and make\nit return bool.\n\n-v2: __ptrace_unlink() updated to clear JOBCTL_TRAP_MASK and TRAPPING\n     instead of JOBCTL_PENDING_MASK.  This avoids accidentally\n     clearing JOBCTL_STOP_CONSUME.  Spotted by Oleg.\n\n-v3: do_signal_stop() updated to return %false without dropping\n     siglock while ptraced and TRAP_STOP check moved inside for(;;)\n     loop after group stop participation.  This avoids unnecessary\n     relocking and also will help avoiding unnecessary traps by\n     consuming group stop before handling pending traps.\n\n-v4: Jobctl trap handling moved into a separate function -\n     do_jobctl_trap().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "ada9c93312f7ec49514c68c211595ce2601cebae",
      "tree": "d20d678c04daf68705f3006e3bc2a00746f3eb18",
      "parents": [
        "60b8b1de0dd2bf246f0e074d287bb3f0bc42a755"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue Jun 14 15:50:11 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jun 14 19:12:17 2011 -0700"
      },
      "message": "signal.c: fix kernel-doc notation\n\nFix kernel-doc warnings in signal.c:\n\n  Warning(kernel/signal.c:2374): No description found for parameter \u0027nset\u0027\n  Warning(kernel/signal.c:2374): Excess function parameter \u0027set\u0027 description in \u0027sys_rt_sigprocmask\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dd1d6772692316fe35094085c5e4d9a370ad3462",
      "tree": "d6f2743d96b93ded07d35a0af2cafa6056bfdc74",
      "parents": [
        "62c124ff3bcdb414af635c2bf822c9e4f2a5abfa"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "signal: remove three noop tracehooks\n\nRemove the following three noop tracehooks in signals.c.\n\n* tracehook_force_sigpending()\n* tracehook_get_signal()\n* tracehook_finish_jctl()\n\nThe code area is about to be updated and these hooks don\u0027t do anything\nother than obfuscating the logic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "62c124ff3bcdb414af635c2bf822c9e4f2a5abfa",
      "tree": "5d279211e098d24245d49e394d84aa8cfdb6f277",
      "parents": [
        "7dd3db54e77d21eb95e145f19ba53f68250d0e73"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "ptrace: use bit_waitqueue for TRAPPING instead of wait_chldexit\n\nptracer-\u003esignal-\u003ewait_chldexit was used to wait for TRAPPING; however,\n-\u003ewait_chldexit was already complicated with waker-side filtering\nwithout adding TRAPPING wait on top of it.  Also, it unnecessarily\nmade TRAPPING clearing depend on the current ptrace relationship - if\nthe ptracee is detached, wakeup is lost.\n\nThere is no reason to use signal-\u003ewait_chldexit here.  We\u0027re just\nwaiting for JOBCTL_TRAPPING bit to clear and given the relatively\ninfrequent use of ptrace, bit_waitqueue can serve it perfectly.\n\nThis patch makes JOBCTL_TRAPPING wait use bit_waitqueue instead of\nsignal-\u003ewait_chldexit.\n\n-v2: Use JOBCTL_*_BIT macros instead of ilog2() as suggested by Linus.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "7dd3db54e77d21eb95e145f19ba53f68250d0e73",
      "tree": "628e44b22e6fbf2828cf2c533c41b3d24f3e3ec9",
      "parents": [
        "6dfca32984237a8a011b5bf367e53341a265b2a4"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "job control: introduce task_set_jobctl_pending()\n\ntask-\u003ejobctl currently hosts JOBCTL_STOP_PENDING and will host TRAP\npending bits too.  Setting pending conditions on a dying task may make\nthe task unkillable.  Currently, each setting site is responsible for\nchecking for the condition but with to-be-added job control traps this\nbecomes too fragile.\n\nThis patch adds task_set_jobctl_pending() which should be used when\nsetting task-\u003ejobctl bits to schedule a stop or trap.  The function\nperforms the followings to ease setting pending bits.\n\n* Sanity checks.\n\n* If fatal signal is pending or PF_EXITING is set, no bit is set.\n\n* STOP_SIGMASK is automatically cleared if new value is being set.\n\ndo_signal_stop() and ptrace_attach() are updated to use\ntask_set_jobctl_pending() instead of setting STOP_PENDING explicitly.\nThe surrounding structures around setting are changed to fit\ntask_set_jobctl_pending() better but there should be no userland\nvisible behavior difference.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "6dfca32984237a8a011b5bf367e53341a265b2a4",
      "tree": "a879c682f00921959ee28b563b9024c0ac54f861",
      "parents": [
        "3759a0d94c18764247b66511d1038f2b93aa95de"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:11 2011 +0200"
      },
      "message": "job control: make task_clear_jobctl_pending() clear TRAPPING automatically\n\nJOBCTL_TRAPPING indicates that ptracer is waiting for tracee to\n(re)transit into TRACED.  task_clear_jobctl_pending() must be called\nwhen either tracee enters TRACED or the transition is cancelled for\nsome reason.  The former is achieved by explicitly calling\ntask_clear_jobctl_pending() in ptrace_stop() and the latter by calling\nit at the end of do_signal_stop().\n\nCalling task_clear_jobctl_trapping() at the end of do_signal_stop()\nlimits the scope TRAPPING can be used and is fragile in that seemingly\nunrelated changes to tracee\u0027s control flow can lead to stuck TRAPPING.\n\nWe already have task_clear_jobctl_pending() calls on those cancelling\nevents to clear JOBCTL_STOP_PENDING.  Cancellations can be handled by\nmaking those call sites use JOBCTL_PENDING_MASK instead and updating\ntask_clear_jobctl_pending() such that task_clear_jobctl_trapping() is\ncalled automatically if no stop/trap is pending.\n\nThis patch makes the above changes and removes the fallback\ntask_clear_jobctl_trapping() call from do_signal_stop().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3759a0d94c18764247b66511d1038f2b93aa95de",
      "tree": "ec56295fc1bd252bcbe1cb8552102deeef03bbb7",
      "parents": [
        "81be24b8cdeb69e62f9d1b6b425fd9ffdd37f581"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:14:00 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:10 2011 +0200"
      },
      "message": "job control: introduce JOBCTL_PENDING_MASK and task_clear_jobctl_pending()\n\nThis patch introduces JOBCTL_PENDING_MASK and replaces\ntask_clear_jobctl_stop_pending() with task_clear_jobctl_pending()\nwhich takes an extra @mask argument.\n\nJOBCTL_PENDING_MASK is currently equal to JOBCTL_STOP_PENDING but\nfuture patches will add more bits.  recalc_sigpending_tsk() is updated\nto use JOBCTL_PENDING_MASK instead.\n\ntask_clear_jobctl_pending() takes @mask which in subset of\nJOBCTL_PENDING_MASK and clears the relevant jobctl bits.  If\nJOBCTL_STOP_PENDING is set, other STOP bits are cleared together.  All\ntask_clear_jobctl_stop_pending() users are updated to call\ntask_clear_jobctl_pending() with JOBCTL_STOP_PENDING which is\nfunctionally identical to task_clear_jobctl_stop_pending().\n\nThis patch doesn\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "81be24b8cdeb69e62f9d1b6b425fd9ffdd37f581",
      "tree": "63afd141fdb380c7b00a01a2080ace6bcc232386",
      "parents": [
        "755e276b3326f300585435d2f3876e66e248c476"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:13:59 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:10 2011 +0200"
      },
      "message": "ptrace: relocate set_current_state(TASK_TRACED) in ptrace_stop()\n\nIn ptrace_stop(), after arch hook is done, the task state and jobctl\nbits are updated while holding siglock.  The ordering requirement\nthere is that TASK_TRACED is set before JOBCTL_TRAPPING is cleared to\nprevent ptracer waiting on TRAPPING doesn\u0027t end up waking up TRACED is\nactually set and sees TASK_RUNNING in wait(2).\n\nMove set_current_state(TASK_TRACED) to the top of the block and\nreorganize comments.  This makes the ordering more obvious\n(TASK_TRACED before other updates) and helps future updates to group\nstop participation.\n\nThis patch doesn\u0027t cause any functional change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "a8f072c1d624a627b67f2ace2f0c25d856ef4e54",
      "tree": "9ba3e96aa874b08c7156a3584f27187bcdbdd9cd",
      "parents": [
        "0b1007c3578569469a6fab6ae5cca918ccdc3ee1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jun 02 11:13:59 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Jun 04 18:17:09 2011 +0200"
      },
      "message": "job control: rename signal-\u003egroup_stop and flags to jobctl and update them\n\nsignal-\u003egroup_stop currently hosts mostly group stop related flags;\nhowever, it\u0027s gonna be used for wider purposes and the GROUP_STOP_\nflag prefix becomes confusing.  Rename signal-\u003egroup_stop to\nsignal-\u003ejobctl and rename all GROUP_STOP_* flags to JOBCTL_*.\n\nBit position macros JOBCTL_*_BIT are defined and JOBCTL_* flags are\ndefined in terms of them to allow using bitops later.\n\nWhile at it, reassign JOBCTL_TRAPPING to bit 22 to better accomodate\nfuture additions.\n\nThis doesn\u0027t cause any functional change.\n\n-v2: JOBCTL_*_BIT macros added as suggested by Linus.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d92fcf0552a15891b25c343cee340d295e24109c",
      "tree": "ad43a9c62d926f223d699544bcef4695af4f3e9d",
      "parents": [
        "0666fb51b1483f27506e212cc7f7b2645b5c7acc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 25 19:22:27 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 25 19:22:27 2011 +0200"
      },
      "message": "signal: sys_pause() should check signal_pending()\n\nERESTART* is always wrong without TIF_SIGPENDING. Teach sys_pause()\nto handle the spurious wakeup correctly.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "3ed4c0583daa34dedb568b26ff99e5a7b58db612",
      "tree": "a531d4cc94acaa58fe0600cf83da9fb8b77f6e50",
      "parents": [
        "ad9471752ebae25daa133b4e5d9299809c35e155",
        "bd715d9a4f13f87bad5526c2cd41370949473b16"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 13:33:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 13:33:21 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (41 commits)\n  signal: trivial, fix the \"timespec declared inside parameter list\" warning\n  job control: reorganize wait_task_stopped()\n  ptrace: fix signal-\u003ewait_chldexit usage in task_clear_group_stop_trapping()\n  signal: sys_sigprocmask() needs retarget_shared_pending()\n  signal: cleanup sys_sigprocmask()\n  signal: rename signandsets() to sigandnsets()\n  signal: do_sigtimedwait() needs retarget_shared_pending()\n  signal: introduce do_sigtimedwait() to factor out compat/native code\n  signal: sys_rt_sigtimedwait: simplify the timeout logic\n  signal: cleanup sys_rt_sigprocmask()\n  x86: signal: sys_rt_sigreturn() should use set_current_blocked()\n  x86: signal: handle_signal() should use set_current_blocked()\n  signal: sigprocmask() should do retarget_shared_pending()\n  signal: sigprocmask: narrow the scope of -\u003esiglock\n  signal: retarget_shared_pending: optimize while_each_thread() loop\n  signal: retarget_shared_pending: consider shared/unblocked signals only\n  signal: introduce retarget_shared_pending()\n  ptrace: ptrace_check_attach() should not do s/STOPPED/TRACED/\n  signal: Turn SIGNAL_STOP_DEQUEUED into GROUP_STOP_DEQUEUED\n  signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending()\n  ...\n"
    },
    {
      "commit": "40ae717d1e78d982bd469b2013a4cbf4ec1ca434",
      "tree": "4063fe2d86828c6b6c10b6f8c29b67ab27167b3b",
      "parents": [
        "2e4f7c7769a0b8b6b3e88b0436c6c634f146a4ef"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri May 06 11:52:22 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon May 09 14:19:54 2011 +0200"
      },
      "message": "ptrace: fix signal-\u003ewait_chldexit usage in task_clear_group_stop_trapping()\n\nGROUP_STOP_TRAPPING waiting mechanism piggybacks on\nsignal-\u003ewait_chldexit which is primarily used to implement waiting for\nwait(2) and friends.  When do_wait() waits on signal-\u003ewait_chldexit,\nit uses a custom wake up callback, child_wait_callback(), which\nexpects the child task which is waking up the parent to be passed in\nas @key to filter out spurious wakeups.\n\ntask_clear_group_stop_trapping() used __wake_up_sync() which uses NULL\n@key causing the following oops if the parent was doing do_wait().\n\n  BUG: unable to handle kernel NULL pointer dereference at 00000000000002d8\n  IP: [\u003cffffffff810499f9\u003e] child_wait_callback+0x29/0x80\n  PGD 1d899067 PUD 1e418067 PMD 0\n  Oops: 0000 [#1] PREEMPT SMP\n  last sysfs file: /sys/devices/pci0000:00/0000:00:03.0/local_cpus\n  CPU 2\n  Modules linked in:\n\n  Pid: 4498, comm: test-continued Not tainted 2.6.39-rc6-work+ #32 Bochs Bochs\n  RIP: 0010:[\u003cffffffff810499f9\u003e]  [\u003cffffffff810499f9\u003e] child_wait_callback+0x29/0x80\n  RSP: 0000:ffff88001b889bf8  EFLAGS: 00010046\n  RAX: 0000000000000000 RBX: ffff88001fab3af8 RCX: 0000000000000000\n  RDX: 0000000000000001 RSI: 0000000000000002 RDI: ffff88001d91df20\n  RBP: ffff88001b889c08 R08: 0000000000000000 R09: 0000000000000000\n  R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000\n  R13: ffff88001fb70550 R14: 0000000000000000 R15: 0000000000000001\n  FS:  00007f26ccae4700(0000) GS:ffff88001fd00000(0000) knlGS:0000000000000000\n  CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\n  CR2: 00000000000002d8 CR3: 000000001b8ac000 CR4: 00000000000006e0\n  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n  DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n  Process test-continued (pid: 4498, threadinfo ffff88001b888000, task ffff88001fb88000)\n  Stack:\n   ffff88001b889c18 ffff88001fb70538 ffff88001b889c58 ffffffff810312f9\n   0000000000000001 0000000200000001 ffff88001b889c58 ffff88001fb70518\n   0000000000000002 0000000000000082 0000000000000001 0000000000000000\n  Call Trace:\n   [\u003cffffffff810312f9\u003e] __wake_up_common+0x59/0x90\n   [\u003cffffffff81035263\u003e] __wake_up_sync_key+0x53/0x80\n   [\u003cffffffff810352a0\u003e] __wake_up_sync+0x10/0x20\n   [\u003cffffffff8105a984\u003e] task_clear_jobctl_trapping+0x44/0x50\n   [\u003cffffffff8105bcbc\u003e] ptrace_stop+0x7c/0x290\n   [\u003cffffffff8105c20a\u003e] do_signal_stop+0x28a/0x2d0\n   [\u003cffffffff8105d27f\u003e] get_signal_to_deliver+0x14f/0x5a0\n   [\u003cffffffff81002175\u003e] do_signal+0x75/0x7b0\n   [\u003cffffffff8100292d\u003e] do_notify_resume+0x5d/0x70\n   [\u003cffffffff8182e36a\u003e] retint_signal+0x46/0x8c\n  Code: 00 00 55 48 89 e5 53 48 83 ec 08 0f 1f 44 00 00 8b 47 d8 83 f8 03 74 3a 85 c0 49 89 c8 75 23 89 c0 48 8b 5f e0 4c 8d 0c 40 31 c0 \u003c4b\u003e 39 9c c8 d8 02 00 00 74 1d 48 83 c4 08 5b c9 c3 66 0f 1f 44\n\nFix it by using __wake_up_sync_key() and passing in the child as @key.\n\nI still think it\u0027s a mistake to piggyback on wait_chldexit for this.\nGiven the relative low frequency of ptrace use, we would be much\nbetter off leaving already complex wait_chldexit alone and using bit\nwaitqueue.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "2e4f7c7769a0b8b6b3e88b0436c6c634f146a4ef",
      "tree": "1e8a46790b0c0834006cd07c321aa4b7556a3d05",
      "parents": [
        "b013c399245a88a73aaa031279f0c4d7cea7fe68"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon May 09 13:48:56 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon May 09 13:48:56 2011 +0200"
      },
      "message": "signal: sys_sigprocmask() needs retarget_shared_pending()\n\nsys_sigprocmask() changes current-\u003eblocked by hand. Convert this code\nto use set_current_blocked().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "b013c399245a88a73aaa031279f0c4d7cea7fe68",
      "tree": "a008708eee3d659e4f416fdf56894d572ae798b8",
      "parents": [
        "702a5073fdb71eb29cd4912575289fb5044c1894"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 11:36:20 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:40 2011 +0200"
      },
      "message": "signal: cleanup sys_sigprocmask()\n\nCleanup. Remove the unneeded goto\u0027s, we can simply read blocked.sig[0]\nunconditionally and then copy-to-user it if oset !\u003d NULL.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "702a5073fdb71eb29cd4912575289fb5044c1894",
      "tree": "d650a10178427b59df2068b4d211f12f8993230f",
      "parents": [
        "b182801ab35f7a0afb3cdf8ba5df464d04206b46"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 22:01:27 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:39 2011 +0200"
      },
      "message": "signal: rename signandsets() to sigandnsets()\n\nAs Tejun and Linus pointed out, \"nand\" is the wrong name for \"x \u0026 ~y\",\nit should be \"andn\". Rename signandsets() as suggested.\n\nSuggested-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "b182801ab35f7a0afb3cdf8ba5df464d04206b46",
      "tree": "dcdda5843c6453b60fe4adcf004283ac5f8e315b",
      "parents": [
        "943df1485a8ff0e600729e082e568ece04d4de9e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:56:14 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:39 2011 +0200"
      },
      "message": "signal: do_sigtimedwait() needs retarget_shared_pending()\n\ndo_sigtimedwait() changes current-\u003eblocked and thus it needs\nset_current_blocked()-\u003eretarget_shared_pending().\n\nWe could use set_current_blocked() directly. It is fine to change\n-\u003ereal_blocked from all-zeroes to -\u003eblocked and vice versa lockless,\nbut this is not immediately clear, looks racy, and needs a huge\ncomment to explain why this is correct.\n\nTo keep the things simple this patch adds the new static helper,\n__set_task_blocked() which should be called with -\u003esiglock held. This\nway we can change both -\u003ereal_blocked and -\u003eblocked atomically under\n-\u003esiglock as the current code does. This is more understandable.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "943df1485a8ff0e600729e082e568ece04d4de9e",
      "tree": "d2d4b7b41f163e011cb7a373376c9ae87e5941be",
      "parents": [
        "fe0faa005d43bc44c357631d51c273806086caa4"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:44:14 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:38 2011 +0200"
      },
      "message": "signal: introduce do_sigtimedwait() to factor out compat/native code\n\nFactor out the common code in sys_rt_sigtimedwait/compat_sys_rt_sigtimedwait\nto the new helper, do_sigtimedwait().\n\nAdd the comment to document the extra tick we add to timespec_to_jiffies(ts),\nthanks to Linus who explained this to me.\n\nPerhaps it would be better to move compat_sys_rt_sigtimedwait() into\nsignal.c under CONFIG_COMPAT, then we can make do_sigtimedwait() static.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "fe0faa005d43bc44c357631d51c273806086caa4",
      "tree": "7977c5ec7c452ed3a0036747b8d8861b742c30b3",
      "parents": [
        "bb7efee2ca63b08795ffb3cda96fc89d2e641b79"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:24:19 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:38 2011 +0200"
      },
      "message": "signal: sys_rt_sigtimedwait: simplify the timeout logic\n\nNo functional changes, cleanup compat_sys_rt_sigtimedwait() and\nsys_rt_sigtimedwait().\n\nCalculate the timeout before we take -\u003esiglock, this simplifies and\nlessens the code. Use timespec_valid() to check the timespec.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\n"
    },
    {
      "commit": "bb7efee2ca63b08795ffb3cda96fc89d2e641b79",
      "tree": "05e05d78f815d9fb8f8963860d2287189a17d7b1",
      "parents": [
        "e9bd3f0faa90084f188830d77723bafe422e486b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 21:18:10 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:38 2011 +0200"
      },
      "message": "signal: cleanup sys_rt_sigprocmask()\n\nsys_rt_sigprocmask() looks unnecessarily complicated, simplify it.\nWe can just read current-\u003eblocked lockless unconditionally before\nanything else and then copy-to-user it if needed.  At worst we\ncopy 4 words on mips.\n\nWe could copy-to-user the old mask first and simplify the code even\nmore, but the patch tries to keep the current behaviour: we change\ncurrent-\u003eblock even if copy_to_user(oset) fails.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e6fa16ab9c1e9b344428e6fea4d29e3cc4b28fb0",
      "tree": "c1bdacc0537213cba8ba75a63ac286e21c0a7250",
      "parents": [
        "73ef4aeb61b53fce464a7e24ef03a26f98b2f617"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 20:59:41 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:37 2011 +0200"
      },
      "message": "signal: sigprocmask() should do retarget_shared_pending()\n\nIn short, almost every changing of current-\u003eblocked is wrong, or at least\ncan lead to the unexpected results.\n\nFor example. Two threads T1 and T2, T1 sleeps in sigtimedwait/pause/etc.\nkill(tgid, SIG) can pick T2 for TIF_SIGPENDING. If T2 calls sigprocmask()\nand blocks SIG before it notices the pending signal, nobody else can handle\nthis pending shared signal.\n\nI am not sure this is bug, but at least this looks strange imho. T1 should\nnot sleep forever, there is a signal which should wake it up.\n\nThis patch moves the code which actually changes -\u003eblocked into the new\nhelper, set_current_blocked() and changes this code to call\nretarget_shared_pending() as exit_signals() does. We should only care about\nthe signals we just blocked, we use \"newset \u0026 ~current-\u003eblocked\" as a mask.\n\nWe do not check !sigisemptyset(newblocked), retarget_shared_pending() is\ncheap unless mask \u0026 shared_pending.\n\nNote: for this particular case we could simply change sigprocmask() to\nreturn -EINTR if signal_pending(), but then we should change other callers\nand, more importantly, if we need this fix then set_current_blocked() will\nhave more callers and some of them can\u0027t restart. See the next patch as a\nrandom example.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "73ef4aeb61b53fce464a7e24ef03a26f98b2f617",
      "tree": "15acc5d7ded643ccd1da1d502033822a2452497c",
      "parents": [
        "fec9993db093acfc3999a364e31f8adae41fcb28"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:54:20 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:36 2011 +0200"
      },
      "message": "signal: sigprocmask: narrow the scope of -\u003esiglock\n\nNo functional changes, preparation to simplify the review of the next change.\n\n1. We can read current-\u003eblock lockless, nobody else can ever change this mask.\n\n2. Calculate the resulting sigset_t outside of -\u003esiglock into the temporary\n   variable, then take -\u003esiglock and change -\u003eblocked.\n\nAlso, kill the stale comment about BKL.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "fec9993db093acfc3999a364e31f8adae41fcb28",
      "tree": "6398e6f0d811128cb46c04ec631f3dcc6075728a",
      "parents": [
        "f646e227b88a164a841d6b6dd969d8a45272dd83"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:50:21 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:35 2011 +0200"
      },
      "message": "signal: retarget_shared_pending: optimize while_each_thread() loop\n\nretarget_shared_pending() blindly does recalc_sigpending_and_wake() for\nevery sub-thread, this is suboptimal. We can check t-\u003eblocked and stop\nlooping once every bit in shared_pending has the new target.\n\nNote: we do not take task_is_stopped_or_traced(t) into account, we are\nnot trying to speed up the signal delivery or to avoid the unnecessary\n(but harmless) signal_wake_up(0) in this unlikely case.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f646e227b88a164a841d6b6dd969d8a45272dd83",
      "tree": "bd11235d720e384efc20e01f116bbf904ca58b4f",
      "parents": [
        "0edceb7bcd82802f721f3c94eed9b3e2869d3740"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:18:39 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:35 2011 +0200"
      },
      "message": "signal: retarget_shared_pending: consider shared/unblocked signals only\n\nexit_signals() checks signal_pending() before retarget_shared_pending() but\nthis is suboptimal. We can avoid the while_each_thread() loop in case when\nthere are no shared signals visible to us.\n\nAdd the \"shared_pending.signal \u0026 ~blocked\" check. We don\u0027t use tsk-\u003eblocked\ndirectly but pass ~blocked as an argument, this is needed for the next patch.\n\nNote: we can optimize this more. while_each_thread(t) can check t-\u003eblocked\ninto account and stop after every pending signal has the new target, see the\nnext patch.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0edceb7bcd82802f721f3c94eed9b3e2869d3740",
      "tree": "ef24801563d721a2823d6c863d3d68f20ce39857",
      "parents": [
        "e46bc9b6fd65bc9f406a4211fbf95683cc9c2937"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Apr 27 19:17:37 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 28 13:01:35 2011 +0200"
      },
      "message": "signal: introduce retarget_shared_pending()\n\nNo functional changes. Move the notify-other-threads code from exit_signals()\nto the new helper, retarget_shared_pending().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Matt Fleming \u003cmatt.fleming@linux.intel.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "f9fa0bc1fabe1d861e46d80ecbe7e85da359195c",
      "tree": "7d90bcd4b78f22a72ea4d3102b8e2714b78d1e43",
      "parents": [
        "bb3c90f0de7b34995b5e35cf5dc97a3d428b3761"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Fri Apr 08 10:53:46 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 08 11:05:24 2011 -0700"
      },
      "message": "signal.c: fix erroneous syscall kernel-doc\n\nFix erroneous syscall kernel-doc comments in kernel/signal.c.\n\nReported-by: Matt Fleming \u003cmatt@console-pimps.org\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e46bc9b6fd65bc9f406a4211fbf95683cc9c2937",
      "tree": "57046f6b2f4674a0c9048ab1ad1ff50fae7e373a",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "321fb561971ba0f10ce18c0f8a4b9fbfc7cef4b9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 07 20:44:11 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 07 20:44:11 2011 +0200"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into ptrace\n"
    },
    {
      "commit": "42933bac11e811f02200c944d8562a15f8ec4ff0",
      "tree": "fcdd9afe56eb0e746565ddd1f92f22d36678b843",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "25985edcedea6396277003854657b5f3cb31a628"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6\n\n* \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6:\n  Fix common misspellings\n"
    },
    {
      "commit": "41c57892a2895865afc89ff1a21f91a0f1506f66",
      "tree": "ca637f0e7f4ec93b9c6f58c5868c27305a58da43",
      "parents": [
        "5aba085ededa6c5a1ff465e2aebc3e8eb00a7567"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Mon Apr 04 15:00:26 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 04 17:51:46 2011 -0700"
      },
      "message": "kernel/signal.c: add kernel-doc notation to syscalls\n\nAdd kernel-doc to syscalls in signal.c.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5aba085ededa6c5a1ff465e2aebc3e8eb00a7567",
      "tree": "61037c7906bc6334823bc75d1fa0b990aeadcea3",
      "parents": [
        "21b86bd5a838ee882d36d354185e29650b0757dd"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Mon Apr 04 14:59:31 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 04 17:51:46 2011 -0700"
      },
      "message": "kernel/signal.c: fix typos and coding style\n\nGeneral coding style and comment fixes; no code changes:\n\n - Use multi-line-comment coding style.\n - Put some function signatures completely on one line.\n - Hyphenate some words.\n - Spell Posix as POSIX.\n - Correct typos \u0026 spellos in some comments.\n - Drop trailing whitespace.\n - End sentences with periods.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee77f075921730b2b465880f9fd4367003bdab39",
      "tree": "dfae10b9718b79650477f912de148c903bc1bbd0",
      "parents": [
        "780006eac2fe7f4d2582da16a096e5a44c4767ff"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 01 20:12:38 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 04 02:11:05 2011 +0200"
      },
      "message": "signal: Turn SIGNAL_STOP_DEQUEUED into GROUP_STOP_DEQUEUED\n\nThis patch moves SIGNAL_STOP_DEQUEUED from signal_struct-\u003eflags to\ntask_struct-\u003egroup_stop, and thus makes it per-thread.\n\nLike SIGNAL_STOP_DEQUEUED, GROUP_STOP_DEQUEUED can be false-positive\nafter return from get_signal_to_deliver(), this is fine. The only\npurpose of this bit is: we can drop -\u003esiglock after __dequeue_signal()\nreturns the sig_kernel_stop() signal and before we call\ndo_signal_stop(), in this case we must not miss SIGCONT if it comes in\nbetween.\n\nBut, unlike SIGNAL_STOP_DEQUEUED, GROUP_STOP_DEQUEUED can not be\nfalse-positive in do_signal_stop() if multiple threads dequeue the\nsig_kernel_stop() signal at the same time.\n\nConsider two threads T1 and T2, SIGTTIN has a hanlder.\n\n\t- T1 dequeues SIGTSTP and sets SIGNAL_STOP_DEQUEUED, then\n\t  it drops -\u003esiglock\n\n\t- SIGCONT comes and clears SIGNAL_STOP_DEQUEUED, SIGTSTP\n\t  should be cancelled.\n\n\t- T2 dequeues SIGTTIN and sets SIGNAL_STOP_DEQUEUED again.\n\t  Since we have a handler we should not stop, T2 returns\n\t  to usermode to run the handler.\n\n\t- T1 continues, calls do_signal_stop() and wrongly starts\n\t  the group stop because SIGNAL_STOP_DEQUEUED was restored\n\t  in between.\n\nWith or without this change:\n\n\t- we need to do something with ptrace_signal() which can\n\t  return SIGSTOP, but this needs another discussion\n\n\t- SIGSTOP can be lost if it races with the mt exec, will\n\t  be fixed later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "780006eac2fe7f4d2582da16a096e5a44c4767ff",
      "tree": "13d315029abead58b8b88071c7177271824b211a",
      "parents": [
        "1deac632fc3dcff33a6df3e82ef10c738ac13fe6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 01 20:12:16 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 04 02:11:04 2011 +0200"
      },
      "message": "signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending()\n\nPF_EXITING or TASK_STOPPED has already called task_participate_group_stop()\nand cleared its -\u003egroup_stop. No need to do task_clear_group_stop_pending()\nwhen we start the new group stop.\n\nAdd a small comment to explain the !task_is_stopped() check. Note that this\ncheck is not exactly right and it can lead to unnecessary stop later if the\nthread is TASK_PTRACED. What we need is task_participated_in_group_stop(),\nthis will be solved later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1deac632fc3dcff33a6df3e82ef10c738ac13fe6",
      "tree": "137481584f4692911e2725b31776de3d2dd72068",
      "parents": [
        "244056f9dbbc6dc4126a301c745fa3dd67d8af3c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Apr 01 20:11:50 2011 +0200"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Apr 04 02:11:04 2011 +0200"
      },
      "message": "signal: prepare_signal(SIGCONT) shouldn\u0027t play with TIF_SIGPENDING\n\nprepare_signal(SIGCONT) should never set TIF_SIGPENDING or wake up\nthe TASK_INTERRUPTIBLE threads. We are going to call complete_signal()\nwhich should pick the right thread correctly. All we need is to wake\nup the TASK_STOPPED threads.\n\nIf the task was stopped, it can\u0027t return to usermode without taking\n-\u003esiglock. Otherwise we don\u0027t care, and the spurious TIF_SIGPENDING\ncan\u0027t be useful.\n\nThe comment says:\n\n\t* If there is a handler for SIGCONT, we must make\n\t* sure that no thread returns to user mode before\n\t* we post the signal\n\nIt is not clear what this means. Probably, \"when there\u0027s only a single\nthread\" and this continues to be true. Otherwise, even if this SIGCONT\nis not private, with or without this change only one thread can dequeue\nSIGCONT, other threads can happily return to user mode before before\nthat thread handles this signal.\n\nNote also that wake_up_state(t, __TASK_STOPPED) can\u0027t race with the task\nwhich changes its state, TASK_STOPPED state is protected by -\u003esiglock as\nwell.\n\nIn short: when it comes to signal delivery, SIGCONT is the normal signal\nand does not need any special support.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "243b422af9ea9af4ead07a8ad54c90d4f9b6081a",
      "tree": "bdcd77b51cce8bd2ed5fcc41c6b430a8d6a9d74f",
      "parents": [
        "5847098cd896c92819800e17e983bf6530035209"
      ],
      "author": {
        "name": "Roland Dreier",
        "email": "roland@purestorage.com",
        "time": "Mon Mar 28 14:13:35 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 28 15:45:44 2011 -0700"
      },
      "message": "Relax si_code check in rt_sigqueueinfo and rt_tgsigqueueinfo\n\nCommit da48524eb206 (\"Prevent rt_sigqueueinfo and rt_tgsigqueueinfo\nfrom spoofing the signal code\") made the check on si_code too strict.\nThere are several legitimate places where glibc wants to queue a\nnegative si_code different from SI_QUEUE:\n\n - This was first noticed with glibc\u0027s aio implementation, which wants\n   to queue a signal with si_code SI_ASYNCIO; the current kernel\n   causes glibc\u0027s tst-aio4 test to fail because rt_sigqueueinfo()\n   fails with EPERM.\n\n - Further examination of the glibc source shows that getaddrinfo_a()\n   wants to use SI_ASYNCNL (which the kernel does not even define).\n   The timer_create() fallback code wants to queue signals with SI_TIMER.\n\nAs suggested by Oleg Nesterov \u003coleg@redhat.com\u003e, loosen the check to\nforbid only the problematic SI_TKILL case.\n\nReported-by: Klaus Dittrich \u003ckladit@arcor.de\u003e\nAcked-by: Julien Tinnes \u003cjln@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Roland Dreier \u003croland@purestorage.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "39fd33933b0209e4b6254743f2cede07c5ad4c52",
      "tree": "394f09178324fd1e31847a6c71d81f01e6236b02",
      "parents": [
        "bb96a6f50be27390dc959ff67d9ea0ea0cfbe177"
      ],
      "author": {
        "name": "Serge E. Hallyn",
        "email": "serge@hallyn.com",
        "time": "Wed Mar 23 16:43:19 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 23 19:47:04 2011 -0700"
      },
      "message": "userns: allow killing tasks in your own or child userns\n\nChangelog:\n\tDec  8: Fixed bug in my check_kill_permission pointed out by\n\t        Eric Biederman.\n\tDec 13: Apply Eric\u0027s suggestion to pass target task into kill_ok_by_cred()\n\t        for clarity\n\tDec 31: address comment by Eric Biederman:\n\t\tdon\u0027t need cred/tcred in check_kill_permission.\n\tJan  1: use const cred struct.\n\tJan 11: Per Bastian Blank\u0027s advice, clean up kill_ok_by_cred().\n\tFeb 16: kill_ok_by_cred: fix bad parentheses\n\tFeb 23: per akpm, let compiler inline kill_ok_by_cred\n\nSigned-off-by: Serge E. Hallyn \u003cserge.hallyn@canonical.com\u003e\nAcked-by: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nAcked-by: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "244056f9dbbc6dc4126a301c745fa3dd67d8af3c",
      "tree": "dced7105f53b5d5ed34e170d77f5c6ab0172542a",
      "parents": [
        "ceb6bd67f9b9db765e1c29405f26e8460391badd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Don\u0027t send duplicate job control stop notification while ptraced\n\nJust as group_exit_code shouldn\u0027t be generated when a PTRACE_CONT\u0027d\ntask re-enters job control stop, notifiction for the event should be\nsuppressed too.  The logic is the same as the group_exit_code\ngeneration suppression in do_signal_stop(), if SIGNAL_STOP_STOPPED is\nalready set, the task is re-entering job control stop without\nintervening SIGCONT and the notifications should be suppressed.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003csignal.h\u003e\n  #include \u003ctime.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  static const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n  static pid_t tracee, tracer;\n\n  static const char *pid_who(pid_t pid)\n  {\n\t  return pid \u003d\u003d tracee ? \"tracee\" : (pid \u003d\u003d tracer ? \"tracer\" : \"mommy \");\n  }\n\n  static void sigchld_sigaction(int signo, siginfo_t *si, void *ucxt)\n  {\n\t  printf(\"%s: SIG status\u003d%02d code\u003d%02d (%s)\\n\",\n\t\t pid_who(getpid()), si-\u003esi_status, si-\u003esi_code,\n\t\t pid_who(si-\u003esi_pid));\n  }\n\n  int main(void)\n  {\n\t  const struct sigaction chld_sa \u003d { .sa_sigaction \u003d sigchld_sigaction,\n\t\t\t\t\t     .sa_flags \u003d SA_SIGINFO|SA_RESTART };\n\t  siginfo_t si;\n\n\t  sigaction(SIGCHLD, \u0026chld_sa, NULL);\n\n\t  tracee \u003d fork();\n\t  if (!tracee) {\n\t\t  tracee \u003d getpid();\n\t\t  while (1)\n\t\t\t  pause();\n\t  }\n\n\t  kill(tracee, SIGSTOP);\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  tracer \u003d getpid();\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  printf(\"tracer: detaching\\n\");\n\t\t  ptrace(PTRACE_DETACH, tracee, NULL, NULL);\n\t\t  return 0;\n\t  }\n\n\t  while (1)\n\t\t  pause();\n\t  return 0;\n  }\n\nBefore the patch, the parent gets the second notification for the\ntracee after the tracer detaches.  si_status is zero because\ngroup_exit_code is not set by the group stop completion which\ntriggered this notification.\n\n  mommy : SIG status\u003d19 code\u003d05 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: SIG status\u003d19 code\u003d04 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: detaching\n  mommy : SIG status\u003d00 code\u003d05 (tracee)\n  mommy : SIG status\u003d00 code\u003d01 (tracer)\n  ^C\n\nAfter the patch, the duplicate notification is gone.\n\n  mommy : SIG status\u003d19 code\u003d05 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: SIG status\u003d19 code\u003d04 (tracee)\n  tracer: SIG status\u003d00 code\u003d05 (tracee)\n  tracer: detaching\n  mommy : SIG status\u003d00 code\u003d01 (tracer)\n  ^C\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "ceb6bd67f9b9db765e1c29405f26e8460391badd",
      "tree": "d4db6cfe58bf2d84bf6af8f1079619050f6c8adc",
      "parents": [
        "62bcf9d992ecc19ea4f37ff57ee0b3333e3e843e"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Notify the real parent of job control events regardless of ptrace\n\nWith recent changes, job control and ptrace stopped states are\nproperly separated and accessible to the real parent and the ptracer\nrespectively; however, notifications of job control stopped/continued\nevents to the real parent while ptraced are still missing.\n\nA ptracee participates in group stop in ptrace_stop() but the\ncompletion isn\u0027t notified.  If participation results in completion of\ngroup stop, notify the real parent of the event.  The ptrace and group\nstops are separate and can be handled as such.\n\nHowever, when the real parent and the ptracer are in the same thread\ngroup, only the ptrace stop event is visible through wait(2) and the\nduplicate notifications are different from the current behavior and\nare confusing.  Suppress group stop notification in such cases.\n\nThe continued state is shared between the real parent and the ptracer\nbut is only meaningful to the real parent.  Always notify the real\nparent and notify the ptracer too for backward compatibility.  Similar\nto stop notification, if the real parent is the ptracer, suppress a\nduplicate notification.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003ctime.h\u003e\n  #include \u003cerrno.h\u003e\n  #include \u003csys/types.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  int main(void)\n  {\n\t  const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n\t  pid_t tracee, tracer;\n\t  siginfo_t si;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (tracee \u003d\u003d 0) {\n\t\t  while (1) {\n\t\t\t  printf(\"tracee: SIGSTOP\\n\");\n\t\t\t  raise(SIGSTOP);\n\t\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t\t  printf(\"tracee: SIGCONT\\n\");\n\t\t\t  raise(SIGCONT);\n\t\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  }\n\t  }\n\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WNOHANG | WNOWAIT);\n\n\t  tracer \u003d fork();\n\t  if (tracer \u003d\u003d 0) {\n\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\n\t\t  for (i \u003d 0; i \u003c 11; i++) {\n\t\t\t  si.si_pid \u003d 0;\n\t\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t\t  if (si.si_pid \u0026\u0026 si.si_code \u003d\u003d CLD_TRAPPED)\n\t\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t\t (void *)(long)si.si_status);\n\t\t  }\n\t\t  printf(\"tracer: EXITING\\n\");\n\t\t  return 0;\n\t  }\n\n\t  while (1) {\n\t\t  si.si_pid \u003d 0;\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WCONTINUED | WEXITED);\n\t\t  if (si.si_pid)\n\t\t\t  printf(\"mommy : WAIT status\u003d%02d code\u003d%02d\\n\",\n\t\t\t\t si.si_status, si.si_code);\n\t  }\n\t  return 0;\n  }\n\nBefore this patch, while ptraced, the real parent doesn\u0027t get\nnotifications for job control events, so although it can access those\nevents, the later waitid(2) call never wakes up.\n\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracer: EXITING\n  mommy : WAIT status\u003d19 code\u003d05\n  ^C\n\nAfter this patch, it works as expected.\n\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  tracer: EXITING\n  mommy : WAIT status\u003d19 code\u003d05\n  ^C\n\n-v2: Oleg pointed out that\n\n     * Group stop notification to the real parent should also happen\n       when ptracer detach races with ptrace_stop().\n\n     * real_parent_is_ptracer() should be testing thread group\n       equality not the task itself as wait(2) and stop/cont\n       notifications are normally thread-group wide.\n\n     Both issues are fixed accordingly.\n\n-v3: real_parent_is_ptracer() updated to test child-\u003ereal_parent\n     instead of child-\u003egroup_leader-\u003ereal_parent per Oleg\u0027s\n     suggestion.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "62bcf9d992ecc19ea4f37ff57ee0b3333e3e843e",
      "tree": "a02286c9afffcda9361e0422370b78fe953df7de",
      "parents": [
        "75b95953a56969a990e6ce154b260be83818fe71"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Job control stop notifications should always go to the real parent\n\nThe stopped notifications in do_signal_stop() and exit_signals() are\nalways for the completion of job control.  The one in do_signal_stop()\nmay be delivered to the ptracer if PTRACE_ATTACH races with\nnotification and the one in exit_signals() if task exits while\nptraced.\n\nIn both cases, the notifications are meaningless and confusing to the\nptracer as it never accesses the group stop state while the real\nparent would miss notifications for the events it is watching.\n\nMake sure these notifications always go to the real parent by calling\ndo_notify_parent_cld_stop() with %false @for_ptrace.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "75b95953a56969a990e6ce154b260be83818fe71",
      "tree": "a6a78c433a1ace907511f71be289cdd16ec1137f",
      "parents": [
        "45cb24a1da53beb70f09efccc0373f6a47a9efe0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Add @for_ptrace to do_notify_parent_cldstop()\n\nCurrently, do_notify_parent_cldstop() determines whether the\nnotification is for the real parent or ptracer.  Move the decision to\nthe caller by adding @for_ptrace parameter to\ndo_notify_parent_cldstop().  All the callers are updated to pass\ntask_ptrace(target_task), so this patch doesn\u0027t cause any behavior\ndifference.\n\nWhile at it, add function comment to do_notify_parent_cldstop().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "408a37de6c95832a4880a88a742f89f0cc554d06",
      "tree": "14e89583cd01a91a75e93b262e162e623847d2ef",
      "parents": [
        "0e9f0a4abfd80f8adca624538d479d95159b16d8"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Don\u0027t set group_stop exit_code if re-entering job control stop\n\nWhile ptraced, a task may be resumed while the containing process is\nstill job control stopped.  If the task receives another stop signal\nin this state, it will still initiate group stop, which generates\ngroup_exit_code, which the real parent would be able to see once the\nptracer detaches.\n\nIn this scenario, the real parent may see two consecutive CLD_STOPPED\nevents from two stop signals without intervening SIGCONT, which\nnormally is impossible.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  int main(void)\n  {\n\t  pid_t tracee;\n\t  siginfo_t si;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  kill(tracee, SIGSTOP);\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\n\t  if (!fork()) {\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_CONT, tracee, NULL, (void *)(long)si.si_status);\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t  ptrace(PTRACE_DETACH, tracee, NULL, NULL);\n\t\t  return 0;\n\t  }\n\n\t  while (1) {\n\t\t  si.si_pid \u003d 0;\n\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WNOHANG);\n\t\t  if (si.si_pid)\n\t\t\t  printf(\"st\u003d%02d c\u003d%02d\\n\", si.si_status, si.si_code);\n\t  }\n\t  return 0;\n  }\n\nBefore the patch, the latter waitid() in polling mode reports the\nsecond stopped event generated by the implied SIGSTOP of\nPTRACE_ATTACH.\n\n  st\u003d19 c\u003d05\n  ^C\n\nAfter the patch, the second event is not reported.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d79fdd6d96f46fabb779d86332e3677c6f5c2a4f",
      "tree": "2797e34888c687b47997b7c7ea3150468bcbb737",
      "parents": [
        "5224fa3660ad3881d2f2ad726d22614117963f10"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Clean transitions between TASK_STOPPED and TRACED\n\nCurrently, if the task is STOPPED on ptrace attach, it\u0027s left alone\nand the state is silently changed to TRACED on the next ptrace call.\nThe behavior breaks the assumption that arch_ptrace_stop() is called\nbefore any task is poked by ptrace and is ugly in that a task\nmanipulates the state of another task directly.\n\nWith GROUP_STOP_PENDING, the transitions between TASK_STOPPED and\nTRACED can be made clean.  The tracer can use the flag to tell the\ntracee to retry stop on attach and detach.  On retry, the tracee will\nenter the desired state in the correct way.  The lower 16bits of\ntask-\u003egroup_stop is used to remember the signal number which caused\nthe last group stop.  This is used while retrying for ptrace attach as\nthe original group_exit_code could have been consumed with wait(2) by\nthen.\n\nAs the real parent may wait(2) and consume the group_exit_code\nanytime, the group_exit_code needs to be saved separately so that it\ncan be used when switching from regular sleep to ptrace_stop().  This\nis recorded in the lower 16bits of task-\u003egroup_stop.\n\nIf a task is already stopped and there\u0027s no intervening SIGCONT, a\nptrace request immediately following a successful PTRACE_ATTACH should\nalways succeed even if the tracer doesn\u0027t wait(2) for attach\ncompletion; however, with this change, the tracee might still be\nTASK_RUNNING trying to enter TASK_TRACED which would cause the\nfollowing request to fail with -ESRCH.\n\nThis intermediate state is hidden from the ptracer by setting\nGROUP_STOP_TRAPPING on attach and making ptrace_check_attach() wait\nfor it to clear on its signal-\u003ewait_chldexit.  Completing the\ntransition or getting killed clears TRAPPING and wakes up the tracer.\n\nNote that the STOPPED -\u003e RUNNING -\u003e TRACED transition is still visible\nto other threads which are in the same group as the ptracer and the\nreverse transition is visible to all.  Please read the comments for\ndetails.\n\nOleg:\n\n* Spotted a race condition where a task may retry group stop without\n  proper bookkeeping.  Fixed by redoing bookkeeping on retry.\n\n* Spotted that the transition is visible to userland in several\n  different ways.  Most are fixed with GROUP_STOP_TRAPPING.  Unhandled\n  corner case is documented.\n\n* Pointed out not setting GROUP_STOP_SIGMASK on an already stopped\n  task would result in more consistent behavior.\n\n* Pointed out that calling ptrace_stop() from do_signal_stop() in\n  TASK_STOPPED can race with group stop start logic and then confuse\n  the TRAPPING wait in ptrace_check_attach().  ptrace_stop() is now\n  called with TASK_RUNNING.\n\n* Suggested using signal-\u003ewait_chldexit instead of bit wait.\n\n* Spotted a race condition between TRACED transition and clearing of\n  TRAPPING.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Jan Kratochvil \u003cjan.kratochvil@redhat.com\u003e\n"
    },
    {
      "commit": "5224fa3660ad3881d2f2ad726d22614117963f10",
      "tree": "1e8806eda6058bf019f06c8500ec293a757f9331",
      "parents": [
        "0ae8ce1c8c5b9007ce6bfc83ec2aa0dfce5bbed3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Make do_signal_stop() use ptrace_stop() if the task is being ptraced\n\nA ptraced task would still stop at do_signal_stop() when it\u0027s stopping\nfor stop signals and do_signal_stop() behaves the same whether the\ntask is ptraced or not.  However, in addition to stopping,\nptrace_stop() also does ptrace specific stuff like calling\narchitecture specific callbacks, so this behavior makes the code more\nfragile and difficult to understand.\n\nThis patch makes do_signal_stop() test whether the task is ptraced and\nuse ptrace_stop() if so.  This renders tracehook_notify_jctl() rather\npointless as the ptrace notification is now handled by ptrace_stop()\nregardless of the return value from the tracehook.  It probably is a\ngood idea to update it.\n\nThis doesn\u0027t solve the whole problem as tasks already in stopped state\nwould stay in the regular stop when ptrace attached.  That part will\nbe handled by the next patch.\n\nOleg pointed out that this makes a userland-visible change.  Before,\nSIGCONT would be able to wake up a task in group stop even if the task\nis ptraced if the tracer hasn\u0027t issued another ptrace command\nafterwards (as the next ptrace commands transitions the state into\nTASK_TRACED which ignores SIGCONT wakeups).  With this and the next\npatch, SIGCONT may race with the transition into TASK_TRACED and is\nignored if the tracee already entered TASK_TRACED.\n\nAnother userland visible change of this and the next patch is that the\nptracee\u0027s state would now be TASK_TRACED where it used to be\nTASK_STOPPED, which is visible via fs/proc.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Jan Kratochvil \u003cjan.kratochvil@redhat.com\u003e\n"
    },
    {
      "commit": "0ae8ce1c8c5b9007ce6bfc83ec2aa0dfce5bbed3",
      "tree": "f92abf6b41e9524966849972427fadcb7a7ef3f7",
      "parents": [
        "39efa3ef3a376a4e53de2f82fc91182459d34200"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Participate in group stop from ptrace_stop() iff the task is trapping for group stop\n\nCurrently, ptrace_stop() unconditionally participates in group stop\nbookkeeping.  This is unnecessary and inaccurate.  Make it only\nparticipate if the task is trapping for group stop - ie. if @why is\nCLD_STOPPED.  As ptrace_stop() currently is not used when trapping for\ngroup stop, this equals to disabling group stop participation from\nptrace_stop().\n\nA visible behavior change is increased likelihood of delayed group\nstop completion if the thread group contains one or more ptraced\ntasks.\n\nThis is to preapre for further cleanup of the interaction between\ngroup stop and ptrace.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "39efa3ef3a376a4e53de2f82fc91182459d34200",
      "tree": "f75a44fa77396edcf74e41686912554f96681340",
      "parents": [
        "e5c1902e9260a0075ea52cb5ef627a8d9aaede89"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "signal: Use GROUP_STOP_PENDING to stop once for a single group stop\n\nCurrently task-\u003esignal-\u003egroup_stop_count is used to decide whether to\nstop for group stop.  However, if there is a task in the group which\nis taking a long time to stop, other tasks which are continued by\nptrace would repeatedly stop for the same group stop until the group\nstop is complete.\n\nConversely, if a ptraced task is in TASK_TRACED state, the debugger\nwon\u0027t get notified of group stops which is inconsistent compared to\nthe ptraced task in any other state.\n\nThis patch introduces GROUP_STOP_PENDING which tracks whether a task\nis yet to stop for the group stop in progress.  The flag is set when a\ngroup stop starts and cleared when the task stops the first time for\nthe group stop, and consulted whenever whether the task should\nparticipate in a group stop needs to be determined.  Note that now\ntasks in TASK_TRACED also participate in group stop.\n\nThis results in the following behavior changes.\n\n* For a single group stop, a ptracer would see at most one stop\n  reported.\n\n* A ptracee in TASK_TRACED now also participates in group stop and the\n  tracer would get the notification.  However, as a ptraced task could\n  be in TASK_STOPPED state or any ptrace trap could consume group\n  stop, the notification may still be missing.  These will be\n  addressed with further patches.\n\n* A ptracee may start a group stop while one is still in progress if\n  the tracer let it continue with stop signal delivery.  Group stop\n  code handles this correctly.\n\nOleg:\n\n* Spotted that a task might skip signal check even when its\n  GROUP_STOP_PENDING is set.  Fixed by updating\n  recalc_sigpending_tsk() to check GROUP_STOP_PENDING instead of\n  group_stop_count.\n\n* Pointed out that task-\u003egroup_stop should be cleared whenever\n  task-\u003esignal-\u003egroup_stop_count is cleared.  Fixed accordingly.\n\n* Pointed out the behavior inconsistency between TASK_TRACED and\n  RUNNING and the last behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "e5c1902e9260a0075ea52cb5ef627a8d9aaede89",
      "tree": "0fc5ec2460fecfe564323d89227bec9293238c2a",
      "parents": [
        "fe1bc6a0954611b806f9e158eb0817cf8ba21660"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "signal: Fix premature completion of group stop when interfered by ptrace\n\ntask-\u003esignal-\u003egroup_stop_count is used to track the progress of group\nstop.  It\u0027s initialized to the number of tasks which need to stop for\ngroup stop to finish and each stopping or trapping task decrements.\nHowever, each task doesn\u0027t keep track of whether it decremented the\ncounter or not and if woken up before the group stop is complete and\nstops again, it can decrement the counter multiple times.\n\nPlease consider the following example code.\n\n static void *worker(void *arg)\n {\n\t while (1) ;\n\t return NULL;\n }\n\n int main(void)\n {\n\t pthread_t thread;\n\t pid_t pid;\n\t int i;\n\n\t pid \u003d fork();\n\t if (!pid) {\n\t\t for (i \u003d 0; i \u003c 5; i++)\n\t\t\t pthread_create(\u0026thread, NULL, worker, NULL);\n\t\t while (1) ;\n\t\t return 0;\n\t }\n\n\t ptrace(PTRACE_ATTACH, pid, NULL, NULL);\n\t while (1) {\n\t\t waitid(P_PID, pid, NULL, WSTOPPED);\n\t\t ptrace(PTRACE_SINGLESTEP, pid, NULL, (void *)(long)SIGSTOP);\n\t }\n\t return 0;\n }\n\nThe child creates five threads and the parent continuously traps the\nfirst thread and whenever the child gets a signal, SIGSTOP is\ndelivered.  If an external process sends SIGSTOP to the child, all\nother threads in the process should reliably stop.  However, due to\nthe above bug, the first thread will often end up consuming\ngroup_stop_count multiple times and SIGSTOP often ends up stopping\nnone or part of the other four threads.\n\nThis patch adds a new field task-\u003egroup_stop which is protected by\nsiglock and uses GROUP_STOP_CONSUME flag to track which task is still\nto consume group_stop_count to fix this bug.\n\ntask_clear_group_stop_pending() and task_participate_group_stop() are\nadded to help manipulating group stop states.  As ptrace_stop() now\nalso uses task_participate_group_stop(), it will set\nSIGNAL_STOP_STOPPED if it completes a group stop.\n\nThere still are many issues regarding the interaction between group\nstop and ptrace.  Patches to address them will follow.\n\n- Oleg spotted duplicate GROUP_STOP_CONSUME.  Dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "fe1bc6a0954611b806f9e158eb0817cf8ba21660",
      "tree": "356b804f797a53b95976f1c4b75a4671277208c1",
      "parents": [
        "edf2ed153bcae52de70db00a98b0e81a5668e563"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Add @why to ptrace_stop()\n\nTo prepare for cleanup of the interaction between group stop and\nptrace, add @why to ptrace_stop().  Existing users are updated such\nthat there is no behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "edf2ed153bcae52de70db00a98b0e81a5668e563",
      "tree": "78aa0207d78321778d6a504c8138d5bc9ef4b4b4",
      "parents": [
        "71db5eb99c960e9c30e4b3ed04103c513b6251b5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "ptrace: Kill tracehook_notify_jctl()\n\ntracehook_notify_jctl() aids in determining whether and what to report\nto the parent when a task is stopped or continued.  The function also\nadds an extra requirement that siglock may be released across it,\nwhich is currently unused and quite difficult to satisfy in\nwell-defined manner.\n\nAs job control and the notifications are about to receive major\noverhaul, remove the tracehook and open code it.  If ever necessary,\nlet\u0027s factor it out after the overhaul.\n\n* Oleg spotted incorrect CLD_CONTINUED/STOPPED selection when ptraced.\n  Fixed.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "71db5eb99c960e9c30e4b3ed04103c513b6251b5",
      "tree": "89732a4c7bef3c0740ebe0212fc2b432de2d8609",
      "parents": [
        "9f2bf6513a6cca0b00cbbf67ba6197017cfba548"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:00 2011 +0100"
      },
      "message": "signal: Remove superflous try_to_freeze() loop in do_signal_stop()\n\ndo_signal_stop() is used only by get_signal_to_deliver() and after a\nsuccessful signal stop, it always calls try_to_freeze(), so the\ntry_to_freeze() loop around schedule() in do_signal_stop() is\nsuperflous and confusing.  Remove it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "c672af35d54992b88d3c48133bd62cc3386fb2f9",
      "tree": "32232508b7f736d066a4b4e2acfbb9812f9b383f",
      "parents": [
        "6447f55da90b77faec1697d499ed7986bb4f6de6"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:36:59 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:36:59 2011 +0100"
      },
      "message": "signal: Fix SIGCONT notification code\n\nAfter a task receives SIGCONT, its parent is notified via SIGCHLD with\nits siginfo describing what the notified event is.  If SIGCONT is\nreceived while the child process is stopped, the code should be\nCLD_CONTINUED.  If SIGCONT is recieved while the child process is in\nthe process of being stopped, it should be CLD_STOPPED.  Which code to\nuse is determined in prepare_signal() and recorded in signal-\u003eflags\nusing SIGNAL_CLD_CONTINUED|STOP flags.\n\nget_signal_deliver() should test these flags and then notify\naccoringly; however, it incorrectly tested SIGNAL_STOP_CONTINUED\ninstead of SIGNAL_CLD_CONTINUED, thus incorrectly notifying\nCLD_CONTINUED if the signal is delivered before the task is wait(2)ed\nand CLD_STOPPED if the state was fetched already.\n\nFix it by testing SIGNAL_CLD_CONTINUED.  While at it, uncompress the\n?: test into if/else clause for better readability.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\n"
    },
    {
      "commit": "da48524eb20662618854bb3df2db01fc65f3070c",
      "tree": "0e9a9aa0c091e96f110a6ef121f0b31f99491325",
      "parents": [
        "b52307ca144881bf9ef1c2610b3f1911472eb467"
      ],
      "author": {
        "name": "Julien Tinnes",
        "email": "jln@google.com",
        "time": "Fri Mar 18 15:05:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 21 14:23:43 2011 -0700"
      },
      "message": "Prevent rt_sigqueueinfo and rt_tgsigqueueinfo from spoofing the signal code\n\nUserland should be able to trust the pid and uid of the sender of a\nsignal if the si_code is SI_TKILL.\n\nUnfortunately, the kernel has historically allowed sigqueueinfo() to\nsend any si_code at all (as long as it was negative - to distinguish it\nfrom kernel-generated signals like SIGILL etc), so it could spoof a\nSI_TKILL with incorrect siginfo values.\n\nHappily, it looks like glibc has always set si_code to the appropriate\nSI_QUEUE, so there are probably no actual user code that ever uses\nanything but the appropriate SI_QUEUE flag.\n\nSo just tighten the check for si_code (we used to allow any negative\nvalue), and add a (one-time) warning in case there are binaries out\nthere that might depend on using other si_code values.\n\nSigned-off-by: Julien Tinnes \u003cjln@google.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b84011508360d6885a9d95a235ec77d56f133377",
      "tree": "471f4aecda99cb5f82b0fa957887c10d5d176960",
      "parents": [
        "b8ed374e202e23caaf9bd77dcadc9de6447faaa8"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Oct 27 15:34:07 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:12 2010 -0700"
      },
      "message": "signals: annotate lock context change on ptrace_stop()\n\nptrace_stop() releases and regrabs current-\u003esighand-\u003esiglock but was\nmissing proper annotation.  Add it.\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b8ed374e202e23caaf9bd77dcadc9de6447faaa8",
      "tree": "ea97fe186c7e0c0ee8cd61e0fc94dc42f635fd3b",
      "parents": [
        "5ef45079dd9c8f2e9c7aa788dc3121835ae52863"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Oct 27 15:34:06 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:12 2010 -0700"
      },
      "message": "signals: annotate lock_task_sighand()\n\nlock_task_sighand() grabs sighand-\u003esiglock in case of returning non-NULL\nbut unlock_task_sighand() releases it unconditionally.  This leads sparse\nto complain about the lock context imbalance.  Rename and wrap\nlock_task_sighand() using __cond_lock() macro to make sparse happy.\n\nSuggested-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a337fdac7a5622d1e6547f4b476c14dfe5a2c892",
      "tree": "2c4072b1188235f348f4ee58e18a027ec61ea4dc",
      "parents": [
        "67159813127309c1a65d86e40fa0368241fa668c"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Mon Sep 27 20:32:19 2010 +0200"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Thu Oct 07 09:41:25 2010 +0200"
      },
      "message": "HWPOISON: Copy si_addr_lsb to user\n\nThe original hwpoison code added a new siginfo field si_addr_lsb to\npass the granuality of the fault address to user space. Unfortunately\nthis field was never copied to user space. Fix this here.\n\nI added explicit checks for the MCEERR codes to avoid having\nto patch all potential callers to initialize the field.\n\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "694f690d27dadccc8cb9d90532e76593b61fe098",
      "tree": "ea641e53ae530d0d3708fbfcab8109cc5e840d21",
      "parents": [
        "e75aa85892b2ee78c79edac720868cbef16e62eb"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Aug 04 16:59:14 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 04 11:17:10 2010 -0700"
      },
      "message": "CRED: Fix RCU warning due to previous patch fixing __task_cred()\u0027s checks\n\nCommit 8f92054e7ca1 (\"CRED: Fix __task_cred()\u0027s lockdep check and banner\ncomment\") fixed the lockdep checks on __task_cred().  This has shown up\na place in the signalling code where a lock should be held - namely that\ncheck_kill_permission() requires its callers to hold the RCU lock.\n\nFix group_send_sig_info() to get the RCU read lock around its call to\ncheck_kill_permission().\n\nWithout this patch, the following warning can occur:\n\n  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n  [ INFO: suspicious rcu_dereference_check() usage. ]\n  ---------------------------------------------------\n  kernel/signal.c:660 invoked rcu_dereference_check() without protection!\n  ...\n\nReported-by: Tetsuo Handa \u003cpenguin-kernel@i-love.sakura.ne.jp\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "09faef11df8c559a23e2405d123cb2683733a79a",
      "tree": "db8e4c94677be8afebde938c2e6b7ba07b6b6db0",
      "parents": [
        "9c3391684415c9dca239130d9e433a60a4edf04b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "exit: change zap_other_threads() to count sub-threads\n\nChange zap_other_threads() to return the number of other sub-threads found\non -\u003ethread_group list.\n\nOther changes are cosmetic:\n\n\t- change the code to use while_each_thread() helper\n\n\t- remove the obsolete comment about SIGKILL/SIGSTOP\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "065add3941bdca54fe04ed3471a96bce9af88793"
}
