)]}'
{
  "commit": "dae51f56204d33444f61d9e7af3ee70aef55daa4",
  "tree": "586c209c5b46da902dff912fa96e797840198030",
  "parents": [
    "9778385db35a799d410039be123044a0d3e917a2"
  ],
  "author": {
    "name": "Oleg Nesterov",
    "email": "oleg@tv-sign.ru",
    "time": "Thu Nov 15 20:57:40 2007 +0100"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Thu Nov 15 20:57:40 2007 +0100"
  },
  "message": "sched: fix SCHED_FIFO tasks \u0026 FAIR_GROUP_SCHED\n\nSuppose that the SCHED_FIFO task does\n\n\tswitch_uid(new_user);\n\nNow, p-\u003ese.cfs_rq and p-\u003ese.parent both point into the old\nuser_struct-\u003etg because sched_move_task() doesn\u0027t call set_task_cfs_rq()\nfor !fair_sched_class case.\n\nSuppose that old user_struct/task_group is freed/reused, and the task\ndoes\n\n\tsched_setscheduler(SCHED_NORMAL);\n\n__setscheduler() sets fair_sched_class, but doesn\u0027t update\n-\u003ese.cfs_rq/parent which point to the freed memory.\n\nThis means that check_preempt_wakeup() doing\n\n\t\twhile (!is_same_group(se, pse)) {\n\t\t\tse \u003d parent_entity(se);\n\t\t\tpse \u003d parent_entity(pse);\n\t\t}\n\nmay OOPS in a similar way if rq-\u003ecurr or p did something like above.\n\nPerhaps we need something like the patch below, note that\n__setscheduler() can\u0027t do set_task_cfs_rq().\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "908335e1781af5f3435665a377f88fd025cdc4f8",
      "old_mode": 33188,
      "old_path": "kernel/sched.c",
      "new_id": "d62b759753f35c7ee76fc9b73f841e59a57b60c2",
      "new_mode": 33188,
      "new_path": "kernel/sched.c"
    }
  ]
}
