)]}'
{
  "commit": "7c9f8861e6c9c839f913e49b98c3854daca18f27",
  "tree": "220b23dff1aa11a83546fbc73a319575ca489188",
  "parents": [
    "b40a4392a3c262e0d1b5379b4e142a8eefa63439"
  ],
  "author": {
    "name": "Eric Sandeen",
    "email": "sandeen@sandeen.net",
    "time": "Tue Apr 22 16:38:23 2008 -0500"
  },
  "committer": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Mon May 26 16:15:33 2008 +0200"
  },
  "message": "stackprotector: use canary at end of stack to indicate overruns at oops time\n\n(Updated with a common max-stack-used checker that knows about\nthe canary, as suggested by Joe Perches)\n\nUse a canary at the end of the stack to clearly indicate\nat oops time whether the stack has ever overflowed.\n\nThis is a very simple implementation with a couple of\ndrawbacks:\n\n1) a thread may legitimately use exactly up to the last\n   word on the stack\n\n -- but the chances of doing this and then oopsing later seem slim\n\n2) it\u0027s possible that the stack usage isn\u0027t dense enough\n   that the canary location could get skipped over\n\n -- but the worst that happens is that we don\u0027t flag the overrun\n -- though this happens fairly often in my testing :(\n\nWith the code in place, an intentionally-bloated stack oops might\ndo:\n\nBUG: unable to handle kernel paging request at ffff8103f84cc680\nIP: [\u003cffffffff810253df\u003e] update_curr+0x9a/0xa8\nPGD 8063 PUD 0\nThread overran stack or stack corrupted\nOops: 0000 [1] SMP\nCPU 0\n...\n\n... unless the stack overrun is so bad that it corrupts some other\nthread.\n\nSigned-off-by: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fd7e1798c75a20049a97046db333868eb4bbd6c5",
      "old_mode": 33188,
      "old_path": "arch/x86/mm/fault.c",
      "new_id": "1f524df68b96185c81aeaf52022b1fe1e68d6710",
      "new_mode": 33188,
      "new_path": "arch/x86/mm/fault.c"
    },
    {
      "type": "modify",
      "old_id": "1fa0c2ce4dec09456f5cb6c2480f6be5e5eb908a",
      "old_mode": 33188,
      "old_path": "include/linux/magic.h",
      "new_id": "74e68e201166c364095c85529eb5faa9ffe7ed07",
      "new_mode": 33188,
      "new_path": "include/linux/magic.h"
    },
    {
      "type": "modify",
      "old_id": "d6a515158783e721392872c6598313b64b5c9f8c",
      "old_mode": 33188,
      "old_path": "include/linux/sched.h",
      "new_id": "c5181e77f3052bfdd557168dc303b87f76e229cd",
      "new_mode": 33188,
      "new_path": "include/linux/sched.h"
    },
    {
      "type": "modify",
      "old_id": "8f6185e69b691265746f81a1ca4ce9de9fd8a640",
      "old_mode": 33188,
      "old_path": "kernel/exit.c",
      "new_id": "fb8de6cbf2c78dd6435239213594f1cdc9a4e28b",
      "new_mode": 33188,
      "new_path": "kernel/exit.c"
    },
    {
      "type": "modify",
      "old_id": "19908b26cf80494a0db8f3410384521081293a32",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "d428336e7aa13018814bd0106e1508e3d0c8dcc4",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    },
    {
      "type": "modify",
      "old_id": "cfa222a91539e193a54d20d422fa92b43a19334b",
      "old_mode": 33188,
      "old_path": "kernel/sched.c",
      "new_id": "a964ed9450947de981fa1d20417cb6f144dffe47",
      "new_mode": 33188,
      "new_path": "kernel/sched.c"
    }
  ]
}
