)]}'
{
  "commit": "6ae08069939f17422835448acae76bda8d96b16a",
  "tree": "284390441dc289c394630aca998ed85b36442242",
  "parents": [
    "e9bb1f9b12e33fc0b2169b3937dc50c44ad87dd5"
  ],
  "author": {
    "name": "Eric Biggers",
    "email": "ebiggers3@gmail.com",
    "time": "Sat Oct 17 16:26:09 2015 -0500"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Wed Nov 11 02:18:26 2015 -0500"
  },
  "message": "fs/pipe.c: return error code rather than 0 in pipe_write()\n\npipe_write() would return 0 if it failed to merge the beginning of the\ndata to write with the last, partially filled pipe buffer.  It should\nreturn an error code instead.  Userspace programs could be confused by\nwrite() returning 0 when called with a nonzero \u0027count\u0027.\n\nThe EFAULT error case was a regression from f0d1bec9d5 (\"new helper:\ncopy_page_from_iter()\"), while the ops-\u003econfirm() error case was a much\nolder bug.\n\nTest program:\n\n\t#include \u003cassert.h\u003e\n\t#include \u003cerrno.h\u003e\n\t#include \u003cunistd.h\u003e\n\n\tint main(void)\n\t{\n\t\tint fd[2];\n\t\tchar data[1] \u003d {0};\n\n\t\tassert(0 \u003d\u003d pipe(fd));\n\t\tassert(1 \u003d\u003d write(fd[1], data, 1));\n\n\t\t/* prior to this patch, write() returned 0 here  */\n\t\tassert(-1 \u003d\u003d write(fd[1], NULL, 1));\n\t\tassert(errno \u003d\u003d EFAULT);\n\t}\n\nCc: stable@vger.kernel.org # at least v3.15+\nSigned-off-by: Eric Biggers \u003cebiggers3@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "997de34644795e34094d6f1f08d060f845a84db1",
      "old_mode": 33188,
      "old_path": "fs/pipe.c",
      "new_id": "42cf8ddf0e5599da6621fcdf741d6a61fd2f2d7a",
      "new_mode": 33188,
      "new_path": "fs/pipe.c"
    }
  ]
}
