)]}'
{
  "commit": "7035b5df3c071ccaf2f1694b96bd8958b0eb37ca",
  "tree": "146e916bce5b11232afac2319c012b1fccba54d0",
  "parents": [
    "0c614e2d3e6ee6ff13c6181f380787cea1d82d1d"
  ],
  "author": {
    "name": "Dmitry Monakhov",
    "email": "dmonakhov@openvz.org",
    "time": "Wed Nov 16 09:21:49 2011 +0100"
  },
  "committer": {
    "name": "Jens Axboe",
    "email": "axboe@kernel.dk",
    "time": "Wed Nov 16 09:21:49 2011 +0100"
  },
  "message": "loop: cleanup set_status interface\n\n1) Anyone who has read access to loopdev has permission to call set_status\n   and may change important parameters such as lo_offset, lo_sizelimit and\n   so on, which contradicts to read access pattern and definitely equals\n   to write access pattern.\n2) Add lo_offset over i_size check to prevent blkdev_size overflow.\n   ##Testcase_bagin\n   #dd if\u003d/dev/zero of\u003d./file bs\u003d1k count\u003d1\n   #losetup /dev/loop0 ./file\n   /* userspace_application */\n   struct loop_info64 loinf;\n   fd \u003d open(\"/dev/loop0\", O_RDONLY);\n   ioctl(fd, LOOP_GET_STATUS64, \u0026loinf);\n   /* Set offset to any value which is bigger than i_size, and sizelimit\n    * to nonzero value*/\n   loinf.lo_offset \u003d 4096*1024;\n   loinf.lo_sizelimit \u003d 1024;\n   ioctl(fd, LOOP_SET_STATUS64, \u0026loinf);\n   /* After this loop device will have size similar to 0x7fffffffffxxxx */\n   #blockdev --getsz /dev/loop0\n   ##OUTPUT: 36028797018955968\n   ##Testcase_end\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003caxboe@kernel.dk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0d567397c254e98d04ed0e251d67f3cc59ebd547",
      "old_mode": 33188,
      "old_path": "drivers/block/loop.c",
      "new_id": "68b205a9338f631adbd98df74836b98aa95d27ac",
      "new_mode": 33188,
      "new_path": "drivers/block/loop.c"
    }
  ]
}
