)]}'
{
  "commit": "f5509cc18daa7f82bcc553be70df2117c8eedc16",
  "tree": "648605cc96e4ac412a9f5201468795574997d9bb",
  "parents": [
    "0f60a8efe4005ab5e65ce000724b04d4ca04a199"
  ],
  "author": {
    "name": "Kees Cook",
    "email": "keescook@chromium.org",
    "time": "Tue Jun 07 11:05:33 2016 -0700"
  },
  "committer": {
    "name": "Kees Cook",
    "email": "keescook@chromium.org",
    "time": "Tue Jul 26 14:41:47 2016 -0700"
  },
  "message": "mm: Hardened usercopy\n\nThis is the start of porting PAX_USERCOPY into the mainline kernel. This\nis the first set of features, controlled by CONFIG_HARDENED_USERCOPY. The\nwork is based on code by PaX Team and Brad Spengler, and an earlier port\nfrom Casey Schaufler. Additional non-slab page tests are from Rik van Riel.\n\nThis patch contains the logic for validating several conditions when\nperforming copy_to_user() and copy_from_user() on the kernel object\nbeing copied to/from:\n- address range doesn\u0027t wrap around\n- address range isn\u0027t NULL or zero-allocated (with a non-zero copy size)\n- if on the slab allocator:\n  - object size must be less than or equal to copy size (when check is\n    implemented in the allocator, which appear in subsequent patches)\n- otherwise, object must not span page allocations (excepting Reserved\n  and CMA ranges)\n- if on the stack\n  - object must not extend before/after the current process stack\n  - object must be contained by a valid stack frame (when there is\n    arch/build support for identifying stack frames)\n- object must not overlap with kernel text\n\nSigned-off-by: Kees Cook \u003ckeescook@chromium.org\u003e\nTested-by: Valdis Kletnieks \u003cvaldis.kletnieks@vt.edu\u003e\nTested-by: Michael Ellerman \u003cmpe@ellerman.id.au\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "aeb3e6d00a66be64ef522bfa63b6d2dd1c03df68",
      "old_mode": 33188,
      "old_path": "include/linux/slab.h",
      "new_id": "96a16a3fb7cbcfe9664343fa23c8104351977c60",
      "new_mode": 33188,
      "new_path": "include/linux/slab.h"
    },
    {
      "type": "modify",
      "old_id": "3d5c80b4391db075ea0a0c5463f8e334d3fa80c0",
      "old_mode": 33188,
      "old_path": "include/linux/thread_info.h",
      "new_id": "f24b99eac9696616de150c7c018a772812fb2ad3",
      "new_mode": 33188,
      "new_path": "include/linux/thread_info.h"
    },
    {
      "type": "modify",
      "old_id": "78c6f7dedb83a1126ac1288083d404dab3e91752",
      "old_mode": 33188,
      "old_path": "mm/Makefile",
      "new_id": "32d37247c7e577f615841cfd06e5208c62b0f806",
      "new_mode": 33188,
      "new_path": "mm/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8ebae91a6b5519cebf28c623527f6429904820b1",
      "new_mode": 33188,
      "new_path": "mm/usercopy.c"
    },
    {
      "type": "modify",
      "old_id": "176758cdfa577f4c25e3d4afdea4f6292a0be0c3",
      "old_mode": 33188,
      "old_path": "security/Kconfig",
      "new_id": "df28f2b6f3e1b47ab9a290c02f74b2da5f703196",
      "new_mode": 33188,
      "new_path": "security/Kconfig"
    }
  ]
}
