)]}'
{
  "commit": "4ceb5db9757aaeadcf8fbbf97d76bd42aa4df0d6",
  "tree": "6a3108ceea457c21130838d49736f5e9de3badc3",
  "parents": [
    "8d894c47975f7222c5537e450e71310b395488c7"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Mon Aug 01 11:14:49 2005 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Mon Aug 01 11:14:49 2005 -0700"
  },
  "message": "Fix get_user_pages() race for write access\n\nThere\u0027s no real guarantee that handle_mm_fault() will always be able to\nbreak a COW situation - if an update from another thread ends up\nmodifying the page table some way, handle_mm_fault() may end up\nrequiring us to re-try the operation.\n\nThat\u0027s normally fine, but get_user_pages() ended up re-trying it as a\nread, and thus a write access could in theory end up losing the dirty\nbit or be done on a page that had not been properly COW\u0027ed.\n\nThis makes get_user_pages() always retry write accesses as write\naccesses by making \"follow_page()\" require that a writable follow has\nthe dirty bit set.  That simplifies the code and solves the race: if the\nCOW break fails for some reason, we\u0027ll just loop around and try again.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6fe77acbc1cd7c3ae02fe8c732fca66c49e0f1d1",
      "old_mode": 33188,
      "old_path": "mm/memory.c",
      "new_id": "4e1c673784dbbe67a19ea9b95c998ca6cd019893",
      "new_mode": 33188,
      "new_path": "mm/memory.c"
    }
  ]
}
