)]}'
{
  "commit": "7edc8b0ac16cbaed7cb4ea4c6b95ce98d2997e84",
  "tree": "e333f72f3dc2c91385b8392bc31a44f5423d7f5c",
  "parents": [
    "841e31e5cc6219d62054788faa289b6ed682d068"
  ],
  "author": {
    "name": "Siddhesh Poyarekar",
    "email": "siddhesh.poyarekar@gmail.com",
    "time": "Tue May 29 15:06:22 2012 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Tue May 29 16:22:19 2012 -0700"
  },
  "message": "mm/fork: fix overflow in vma length when copying mmap on clone\n\nThe vma length in dup_mmap is calculated and stored in a unsigned int,\nwhich is insufficient and hence overflows for very large maps (beyond\n16TB). The following program demonstrates this:\n\n#include \u003cstdio.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/mman.h\u003e\n\n#define GIG 1024 * 1024 * 1024L\n#define EXTENT 16393\n\nint main(void)\n{\n        int i, r;\n        void *m;\n        char buf[1024];\n\n        for (i \u003d 0; i \u003c EXTENT; i++) {\n                m \u003d mmap(NULL, (size_t) 1 * 1024 * 1024 * 1024L,\n                         PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);\n\n                if (m \u003d\u003d (void *)-1)\n                        printf(\"MMAP Failed: %d\\n\", m);\n                else\n                        printf(\"%d : MMAP returned %p\\n\", i, m);\n\n                r \u003d fork();\n\n                if (r \u003d\u003d 0) {\n                        printf(\"%d: successed\\n\", i);\n                        return 0;\n                } else if (r \u003c 0)\n                        printf(\"FORK Failed: %d\\n\", r);\n                else if (r \u003e 0)\n                        wait(NULL);\n        }\n        return 0;\n}\n\nIncrease the storage size of the result to unsigned long, which is\nsufficient for storing the difference between addresses.\n\nSigned-off-by: Siddhesh Poyarekar \u003csiddhesh.poyarekar@gmail.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5b13eea2e75721c5cfae3a0818bb806e40e73a54",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "017fb23d5983dc8eca06220ae9d81e9e37e0a4b9",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    }
  ]
}
