)]}'
{
  "commit": "83bd771ca25844f6f00c7b60e554f6566a7a3222",
  "tree": "40954db9be41a27c7ee36c2e20fa37fc3316ec2e",
  "parents": [
    "91f635ea668d4ad70ad75e147abace56deead8b3"
  ],
  "author": {
    "name": "Dominik Laskowski",
    "email": "domlaskowski@google.com",
    "time": "Fri Jan 07 14:30:53 2022 -0800"
  },
  "committer": {
    "name": "Dominik Laskowski",
    "email": "domlaskowski@google.com",
    "time": "Sat Jan 08 18:55:29 2022 -0800"
  },
  "message": "SF: Fix UAF due to outliving idle timer\n\nOn Scheduler destruction, stop the timer and clear the callbacks, since\nthe RefreshRateConfigs may outlive the Scheduler.\n\nOn RefreshRateConfigs destruction, ensure the timer is destroyed before\nthe mutex/callbacks. Invoke the callback under lock.\n\nRemove TestableSurfaceFlinger\u0027s subtle precondition that setupScheduler\nmust be called prior to FakeDisplayDeviceInjector for them to share\nRefreshRateConfigs, which was not the case in DisplayModeSwitchingTest.\n\nTestableScheduler is deleted through a Scheduler pointer, so ~Scheduler\nshould be virtual. Although ~TestableScheduler is trivial, this invoked\nundefined behavior.\n\nBug: 213688734\nTest: libsurfaceflinger_unittest --gtest_repeat\u003d1000\nChange-Id: Id23fafaf3d7071a5e28e275de386dd731a726006\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "71d563130e3aa4fe2c3a49f21a094cfca2475d42",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp",
      "new_id": "a94952f415616d453a9884fb977911cb5c0df978",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp"
    },
    {
      "type": "modify",
      "old_id": "4bbdab6bbe417631ee4e5c1a42ef485f32b96020",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/Scheduler/RefreshRateConfigs.h",
      "new_id": "fc45d2b909d4744874c3703073373d47bf2c5599",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/Scheduler/RefreshRateConfigs.h"
    },
    {
      "type": "modify",
      "old_id": "cbe4552b0b0d0447f51c42a5d9928112fa753c22",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/Scheduler/Scheduler.cpp",
      "new_id": "4173088d99cfc9c10f436d4c94a562b641a89579",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/Scheduler/Scheduler.cpp"
    },
    {
      "type": "modify",
      "old_id": "818f1edb419d6df5df082d474eb7588fff536d7f",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/Scheduler/Scheduler.h",
      "new_id": "548c34b5d2f5a124611f8d77b946f117e82e4039",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/Scheduler/Scheduler.h"
    },
    {
      "type": "modify",
      "old_id": "f1e9b314d8999821c6f6dab5e6b80e76d79ac2cb",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/CompositionTest.cpp",
      "new_id": "2fc7c59d00a483be2271015a0e2daf743bb7ef06",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/CompositionTest.cpp"
    },
    {
      "type": "modify",
      "old_id": "5a0033ea7eda42410029bf99adafbbff86c21426",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/DisplayDevice_InitiateModeChange.cpp",
      "new_id": "40a9b1aad06c706925363aa379af7b22eba853fd",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/DisplayDevice_InitiateModeChange.cpp"
    },
    {
      "type": "modify",
      "old_id": "c318e28ffe7e7bcbd1f03fe572d07cf4cf548a56",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp",
      "new_id": "2425862383a751efd5c21fab61407103ee8e785e",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp"
    },
    {
      "type": "modify",
      "old_id": "69ac26e99734479b5cc94bc472f0c640299f1e24",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/DisplayTransactionTestHelpers.h",
      "new_id": "45eceff96d40b434bccf1d517de1c0a78bfe1ebb",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/DisplayTransactionTestHelpers.h"
    },
    {
      "type": "modify",
      "old_id": "fe5f9e071764653b79e19fe756a55621b8cd3688",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp",
      "new_id": "2b69f13126b54e067ea4a753f9ae63585d81c53d",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp"
    },
    {
      "type": "modify",
      "old_id": "56a050648d25e9c8daeade96c568539bb86b252d",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/SurfaceFlinger_DisplayModeSwitching.cpp",
      "new_id": "3205952f5a33dec5a711ef6cc51b0d168b925cb3",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/SurfaceFlinger_DisplayModeSwitching.cpp"
    },
    {
      "type": "modify",
      "old_id": "b57feffe83bb003c40b1c47f673e4606dca3b977",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/SurfaceFlinger_SetPowerModeInternalTest.cpp",
      "new_id": "7948e60e14524b47c7a9f59e71390cabe21996c0",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/SurfaceFlinger_SetPowerModeInternalTest.cpp"
    },
    {
      "type": "modify",
      "old_id": "361d629f1ebd9f2389ba602b0187c26d55006e04",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h",
      "new_id": "d292e0879da5411e1d05f1462827357ad6fa6b1c",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h"
    },
    {
      "type": "modify",
      "old_id": "849e3083c43c3969953b1e381b7d193a6b5aab4c",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/mock/MockSchedulerCallback.h",
      "new_id": "c90b8ed6c759c0aea30ee71d78c57721419beecf",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/mock/MockSchedulerCallback.h"
    }
  ]
}
