)]}'
{
  "commit": "10b1fbdb0a0ca91847a534ad26d0bc250c25b74f",
  "tree": "67a3e6d7069e9281b0f5819f4acf91d7150a5d74",
  "parents": [
    "45c18b0bb579b5c1b89f8c99f1b6ffa4c586ba08"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Sat Nov 04 13:03:00 2006 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Sat Nov 04 13:03:00 2006 -0800"
  },
  "message": "Make sure \"user-\u003esigpending\" count is in sync\n\nThe previous commit (45c18b0bb579b5c1b89f8c99f1b6ffa4c586ba08, aka \"Fix\nunlikely (but possible) race condition on task-\u003euser access\") fixed a\npotential oops due to __sigqueue_alloc() getting its \"user\" pointer out\nof sync with switch_user(), and accessing a user pointer that had been\nde-allocated on another CPU.\n\nIt still left another (much less serious) problem, where a concurrent\n__sigqueue_alloc and swich_user could cause sigqueue_alloc to do signal\npending reference counting for a _different_ user than the one it then\nactually ended up using.  No oops, but we\u0027d end up with the wrong signal\naccounting.\n\nAnother case of Oleg\u0027s eagle-eyes picking up the problem.\n\nThis is trivially fixed by just making sure we load whichever \"user\"\nstructure we decide to use (it doesn\u0027t matter _which_ one we pick, we\njust need to pick one) just once.\n\nAcked-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Andrew Morton \u003cakpm@osdl.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7ed8d5304bec2d2c9e51099f5c66ff304d40946a",
      "old_mode": 33188,
      "old_path": "kernel/signal.c",
      "new_id": "df18c167a2a72d67d76cabc1768b741c12ed5e7e",
      "new_mode": 33188,
      "new_path": "kernel/signal.c"
    }
  ]
}
