)]}'
{
  "log": [
    {
      "commit": "dcb3d156119d12f067474f4dc12e026c7fbd4ae3",
      "tree": "734644436987f695e562151e95849d938a9e2dd6",
      "parents": [
        "537e4af23512389438b86f31ee81eb522111f944"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 07 16:02:28 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 12 12:57:22 2019 -0700"
      },
      "message": "ueventd: allow using external firmware handlers\n\nUserspace may want to load a different firmware than the one that the\nkernel requests in some cases, therefore this change adds the ability\nto ueventd to run an external handler that will determine the name of\nthe file that should actually be loaded.\n\nBug: 138352500\nTest: unit tests\nChange-Id: Ic5da37268fd78109f83ae52d1b903bf7322a5ee5\n"
    },
    {
      "commit": "4e46a33c70c50940b19e37af7b99924f559b8542",
      "tree": "78ed479609281bf3e45c2a2ee2731fa127f9a71b",
      "parents": [
        "483c2f90598aedfcdedd120fcce26ab7c39989a4",
        "1ab3dfcab469198114c4bb4a3914c6b64b891f72"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 10 17:04:57 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 10 17:04:57 2019 +0000"
      },
      "message": "Merge \"Reland^2: \"init: run property service in a thread\"\""
    },
    {
      "commit": "e351e5ed06a675b27fb797bfd8df95d5815c6ccf",
      "tree": "1d1f8631d049e92692f6dd9c01444c962f18eaf7",
      "parents": [
        "9bcec87086e13e2f32b2157cefcb700d8e398a01",
        "4233ec7f66d54d30109c838d09b358f21e214011"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 10 14:52:31 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 10 14:52:31 2019 +0000"
      },
      "message": "Merge \"ueventd: make parallel restorecon functionality optional\""
    },
    {
      "commit": "16fb3f9e425bc511ec5f8952d3130c633dee8ddc",
      "tree": "c1684bdc95e9ffb95580ca645f643d9a256c1b93",
      "parents": [
        "983f76b3c632b29ca6ff858d986378a9028493c2"
      ],
      "author": {
        "name": "Jon Spivack",
        "email": "spivack@google.com",
        "time": "Fri Jul 26 13:14:42 2019 -0700"
      },
      "committer": {
        "name": "Jon Spivack",
        "email": "spivack@google.com",
        "time": "Mon Sep 09 15:24:42 2019 -0700"
      },
      "message": "Allow AIDL interfaces in service parsing\n\nBug: 138756857\nTest: Manual (using mediaextractor as a test service)\nChange-Id: Ice2c695fca7062d6a115df13a6ac1d6fe82a3a98\n"
    },
    {
      "commit": "4233ec7f66d54d30109c838d09b358f21e214011",
      "tree": "c72d0322a78fdc005a600bb3ead293067f8b356d",
      "parents": [
        "50e408db2d1bd015f87996f98b0bc21a39402ab0"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 06 10:52:31 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Sep 09 09:02:48 2019 -0700"
      },
      "message": "ueventd: make parallel restorecon functionality optional\n\n5aa6197d5f387579ff04c330001840d6988e825f added the ability to\nparallelize restorecon to speed up boot for devices that have not\ncompletely moved to genfscon.  This parallel restorecon happens after\nthe parallel ueventd handling.\n\nThis causes a performance regression for devices that have moved to\ngenfscon, since previously, the restorecon() was done in the main\nueventd thread in parallel with the uevent handlers.\n\nI also tried to run the fully parallelized restorecon in parallel with\nthe uevent handlers, but that did not make any change to the cold boot\ntime, likely due to the additional overhead of parallelizing the work.\n\nBug: 140458170\nTest: blueline coldboot time returns to pre-regression time.\nChange-Id: I3cd6a869cc9b62792466813d94ad6c69834e854e\n"
    },
    {
      "commit": "983f76b3c632b29ca6ff858d986378a9028493c2",
      "tree": "29a7412bfaf1ccb7581826784d99ec1a24c21ddb",
      "parents": [
        "c8eadff1de468456fa321117788ed3fdba60fad0",
        "1136f1592a50c90b3b59fbc3293e4c1e155972e0"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Sat Sep 07 23:46:00 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Sep 07 23:46:00 2019 +0000"
      },
      "message": "Merge \"Init: Run boringssl self test via separate binaries.\""
    },
    {
      "commit": "d5dff2604942e0756cb24cf575305714cb07a087",
      "tree": "b9b815c4e305ca218b3b66f4c5077854b28cbec3",
      "parents": [
        "4118221c66786eaeb1cb7bc6508f3c0ae8027d7c",
        "5f181bc503c27164bfa3fcf52fd26b0b68c3a580"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Fri Sep 06 22:59:07 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 06 22:59:07 2019 +0000"
      },
      "message": "Merge \"init: boot into thermal shutdown target on supported devices\""
    },
    {
      "commit": "5f181bc503c27164bfa3fcf52fd26b0b68c3a580",
      "tree": "9e0a7c1899272af75c6ca2e134d60c916c9c645f",
      "parents": [
        "8c8ce02e2eb2dc0671518423f2e6b0661013a514"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Tue Aug 27 16:35:35 2019 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Fri Sep 06 11:26:43 2019 -0700"
      },
      "message": "init: boot into thermal shutdown target on supported devices\n\nBug: 137982557\nTest: thermal shutdown\nChange-Id: I4c7c4647e340be6be7a37a3dde6324b4d7903007\n(cherry picked from commit 271014e8325f17ac1fcf83dede7ce987c293fb2c)\n"
    },
    {
      "commit": "7b968315ee30218748b1b5daf896fd195f770158",
      "tree": "99d1fa68f1d6eb744188023f178d95f0e5024230",
      "parents": [
        "0b18c6735fec7d8874625b839ed6567b098f7e88",
        "7a5f6c5912233833c6e445c7aca1ba6b74d138d0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Sep 06 17:34:05 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 06 17:34:05 2019 +0000"
      },
      "message": "Merge \"init/fscrypt_init_extensions: remove redundant log message\""
    },
    {
      "commit": "1ab3dfcab469198114c4bb4a3914c6b64b891f72",
      "tree": "7e8fb97277f79767cb4f473b22f1173011c3d149",
      "parents": [
        "50e408db2d1bd015f87996f98b0bc21a39402ab0"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Apr 22 17:46:37 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 05 14:42:58 2019 -0700"
      },
      "message": "Reland^2: \"init: run property service in a thread\"\n\nIt\u0027s been a long standing issue that init cannot respond to property\nset messages when it is running a builtin command.  This is\nparticularly problematic when the commands involve IPC to vold or\nother daemons, as it prevents them from being able to set properties.\n\nThis change has init run property service in a thread, which\neliminates the above issue.\n\nThis change may also serve as a starting block to running property\nservice in an entirely different process to better isolate init from\nhandling property requests.\n\nReland: during reboot, init stops processing property_changed messages\nfrom property service, since it will not act on these anyway.  This\nhad an unexpected effect of causing future property_set calls to block\nindefinitely, since the buffer between init and property_service was\nfilling up and the send() call from property_service would then\nblock.  This change has init tell property_service to stop sending it\nproperty_changed messages once reboot begins.\n\nTest: CF boots, walleye boots, properties are set appropriately\nChange-Id: I26902708e8be788caa6dbcf4b6d2968d90962785\n"
    },
    {
      "commit": "7a5f6c5912233833c6e445c7aca1ba6b74d138d0",
      "tree": "a010db32498ddf21d37d44365e64640eae942215",
      "parents": [
        "48eb2ee17644dc7b497c0422c18745b1e063ff3f"
      ],
      "author": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Thu Sep 05 13:01:13 2019 -0700"
      },
      "committer": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Thu Sep 05 13:20:25 2019 -0700"
      },
      "message": "init/fscrypt_init_extensions: remove redundant log message\n\nOn every boot, there is a \"duplicate\" message logged at INFO level for\nevery system device-encrypted directory, e.g.:\n\n    1     1 I init    : Setting policy on /data/app-private\n    1     1 I init    : Encryption policy of /data/app-private set to 3a19970b1aa3abed modes 127/4\n\nOr:\n\n    1     1 I init    : Setting policy on /data/app-private\n    1     1 I init    : Verified that /data/app-private has the encryption policy 3a19970b1aa3abed modes 127/4\n\n(Before I51ee70706bc9ccb216ccefd7bdfbbfc57faae14d the second messages\nwere slightly different, but were similar and still at INFO level.)\n\nThe issue is that set_system_de_policy_on() prints its own log message,\nthen calls fscrypt_policy_ensure() which prints a message too; and the\nsecond message is essentially a superset of the first.\n\nClean this up by removing the message from set_system_de_policy_on().\n\nTest: Booted and checked the log.\nChange-Id: I2786ba7e2dbb355f159ac9d8fe5ad1f0a4cdbfea\n"
    },
    {
      "commit": "1136f1592a50c90b3b59fbc3293e4c1e155972e0",
      "tree": "1a2e18452d2a0167ca52d7f86ddf7bc728fe59bd",
      "parents": [
        "7896e7adccbd272533ee2250f4a9c65cd4ca66d0"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Aug 23 14:05:29 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Thu Sep 05 01:41:08 2019 +0100"
      },
      "message": "Init: Run boringssl self test via separate binaries.\n\nInstead of init.cpp knowning about the boringssl self\ntest, use init.rc to exec dedicated self test executables.\n\nAdvantages:\n - The self test is run not only both the copy of libcrypto\n   in /system but also /apex/com.android.conscrypt.\n - The self test is run not only for the primary (e.g. 64bit)\n   ABI but also for a secondarry (e.g. 32bit) ABI.\n - The dependency on libcrypto is kept to the self test binary.\n - The self test binary abstracts the exact native API for\n   running the self test (this will change soon because the\n   self test will be run when the library is loaded).\n\nBug: 137267623\nTest: Check that logcat shows both binaries being started as root,\n      and finishing with exit code 0.\n\nChange-Id: I1e716749ee2133993f0f7b2836483391fd1a62f0\n"
    },
    {
      "commit": "7896e7adccbd272533ee2250f4a9c65cd4ca66d0",
      "tree": "83a7b6e1c74b5e49d4a34a5ee7661b07dc80eff6",
      "parents": [
        "a9ffef27e137458f8b12b10df2eeca58b99074ed"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 04 15:26:52 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 04 16:23:15 2019 -0700"
      },
      "message": "init: add exec_reboot_on_failure builtin\n\nAdd exec_reboot_on_failure builtin and refactor the VDC commands that\nhad similar functionality.  These will now also reboot in the case\nthat the program cannot be found or run for any reason.\n\nTest: boots normally, reboots if command is not found or if command\n      returns status \u00271\u0027\n\nChange-Id: I1c99498c2b741512a50188e1a325c25e9ec8fba0\n"
    },
    {
      "commit": "0589aa4265415d5264cea7f6d030254d4d4f54d0",
      "tree": "217e35a0367eb776e80af9b7d9ffac286312e544",
      "parents": [
        "0c100685dcbb24790615b228330f1b44642e6bf0",
        "905a5df83d1cdfd133ad53b3b6af999ddb485f94"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 03 16:35:27 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 03 16:35:27 2019 +0000"
      },
      "message": "Merge \"init: Always reap processes before handling properties\""
    },
    {
      "commit": "0c100685dcbb24790615b228330f1b44642e6bf0",
      "tree": "838032723680954b58faea7345d9e876043d0f18",
      "parents": [
        "dec467f271124f2e3286a0f5c945c2140881a95c",
        "391332d2766f16226a3dc9dacdbd301deb8cf94e"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Mon Sep 02 10:28:30 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 02 10:28:30 2019 +0000"
      },
      "message": "Merge changes from topic \"art-without-bionic\"\n\n* changes:\n  Include com.android.runtime in the \"runtime\" linker namespace.\n  Update logic for detecting pre-apexd services to check that the ART APEX is mounted.\n  Update paths and names for the new ART APEX.\n"
    },
    {
      "commit": "dec467f271124f2e3286a0f5c945c2140881a95c",
      "tree": "30b6889353d1e069dbf518fafa50ecf7c1533d37",
      "parents": [
        "c9cddde0181d2eb2aef775e955bad02333dbf77d",
        "b2c2d6907fba8528a650959a74362bfb6e662c5a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Aug 31 13:39:37 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Aug 31 13:39:37 2019 +0000"
      },
      "message": "Merge \"Fix typo\""
    },
    {
      "commit": "905a5df83d1cdfd133ad53b3b6af999ddb485f94",
      "tree": "58fe73c80a7dce4a9fb7110a1e11f8abfeb22717",
      "parents": [
        "2b73b60c66d7c43515ed3c0db89735b9485f8ce6"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 30 14:12:56 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 30 14:20:05 2019 -0700"
      },
      "message": "init: Always reap processes before handling properties\n\nThere is a race that manifests like this:\n\n1) A service dies (not processed by init yet).\n2) service_manager processes death notification.\n3) service_manager gets checkService and calls init to start service.\n4) init gets the ctl.start / ctl.interface_start for the service\n   but the service already appears started, so it does nothing.\n5) init gets sigchld, but doesn\u0027t do anything else to restart the\n   service\n\nWe can avoid all of this if we already reap pending processes before\nhandling properties in the main loop of init.  Since reaping the\nservices calls waitid(), there\u0027s no race even if the signalfd for\nsigchld hasn\u0027t triggered yet.  It also won\u0027t cost us much efficiency,\nsince it\u0027s only a single system call.\n\nTest: CF boots, init unit tests pass\nChange-Id: Ie24ef406055b283797b41b1821c8ebcccead4db4\n"
    },
    {
      "commit": "b2c2d6907fba8528a650959a74362bfb6e662c5a",
      "tree": "abc19ab0a5dada8cfea788bfc2ec0d430b50272d",
      "parents": [
        "3bd09415a3f859467fae2b1516ffa3e95431bfa0"
      ],
      "author": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Fri Aug 30 11:11:44 2019 -0700"
      },
      "committer": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Fri Aug 30 11:15:58 2019 -0700"
      },
      "message": "Fix typo\n\nTest: builds\nChange-Id: I4b48e8b3d457382579216482249e734f74768c71\n"
    },
    {
      "commit": "cacf04351fcb6cbb73740ca078dcf93635a7f098",
      "tree": "9587b3a9d5e82671cda1bbfacd5208ae64a946a3",
      "parents": [
        "df96e1f25cad196385dc2ff6bcf1c8ec4619ab7c"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Wed Aug 21 18:34:31 2019 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Aug 30 17:47:31 2019 +0100"
      },
      "message": "Update logic for detecting pre-apexd services to check that the ART APEX is\nmounted.\n\nNecessary to make e.g. bootanimation work, which depends on (at least)\nlibandroidicu.so in the ART APEX.\n\nTest: Build \u0026 boot\nBug: 135753770\nExempt-From-Owner-Approval: Approved internally\nChange-Id: Ibab4f5f7a243d0815b9c70a537bae8d77dee2fbb\nMerged-In: Ibab4f5f7a243d0815b9c70a537bae8d77dee2fbb\n"
    },
    {
      "commit": "df96e1f25cad196385dc2ff6bcf1c8ec4619ab7c",
      "tree": "dfe977e2822bdb7575ccb63d2230d2079ac0e4fe",
      "parents": [
        "cc746b51933624ea658a0656a51e0c9bf38b0f11"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Wed Jul 17 22:17:58 2019 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Aug 30 17:47:31 2019 +0100"
      },
      "message": "Update paths and names for the new ART APEX.\n\nTest: Build \u0026 boot\nTest: atest CtsJniTestCases\nBug: 135753770\nExempt-From-Owner-Approval: Approved internally\nChange-Id: Ic59b7bc8aae7ce521cf3ec9df4ab72aa611d0b75\nMerged-In: Ic59b7bc8aae7ce521cf3ec9df4ab72aa611d0b75\n"
    },
    {
      "commit": "9800ad839a6c8f851cc0fdfba488ed604ed371c1",
      "tree": "dace8a22655c9ff97a52197005d41fea5546f7b9",
      "parents": [
        "956c204f1e0fa1bcb246ec776f5551f12e23d971"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Aug 28 18:34:24 2019 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Aug 29 16:08:36 2019 +0000"
      },
      "message": "init: -1 log for control message error paths.\n\nFixes: 140136969\nTest: check logs\nChange-Id: Id80f59927b44d1026c6e3389c80ca96baf0733c4\n"
    },
    {
      "commit": "4adbd2905a102c32775e83a1a90b04ccd293bd87",
      "tree": "4f83d46b3031492c3e2b05b5e0e1ef31bf599105",
      "parents": [
        "88bba9598937f18086fcf2bfbd5fafc785734aad",
        "3da2ba6d4aa16e5d087f98c1e8aa3e2e0820deef"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 28 17:50:00 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 28 17:50:00 2019 +0000"
      },
      "message": "Merge \"Revert \"Reland: \"init: run property service in a thread\"\"\""
    },
    {
      "commit": "3da2ba6d4aa16e5d087f98c1e8aa3e2e0820deef",
      "tree": "ce8954219e3664034069ec15747a401eb4952bf5",
      "parents": [
        "8efca4bbb378ff5bd3af06d8511ea75a7ed49f99"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 28 17:47:49 2019 +0000"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 28 17:47:49 2019 +0000"
      },
      "message": "Revert \"Reland: \"init: run property service in a thread\"\"\n\nThis reverts commit 8efca4bbb378ff5bd3af06d8511ea75a7ed49f99.\n\nReason for revert: Still broken\n\nChange-Id: I3b37b1b00ff4b19f2eec2d8bd72042463d47cee3\n"
    },
    {
      "commit": "88bba9598937f18086fcf2bfbd5fafc785734aad",
      "tree": "d2a922a342caf30ca25d82b993c056d91483659b",
      "parents": [
        "34f25373933d7c092cf713bc60b48a381fdfe0bc",
        "33783fc29c4235822516e90277632b9bbef1c982"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 28 17:44:55 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 28 17:44:55 2019 +0000"
      },
      "message": "Merge \"init: set SetKptrRestrict before early-init\""
    },
    {
      "commit": "34f25373933d7c092cf713bc60b48a381fdfe0bc",
      "tree": "8fb3cf3d17911d78286d50cc2f9294887016f36b",
      "parents": [
        "15c87604035f0fbefb1f0f634ad8c9dd1ee93263",
        "8efca4bbb378ff5bd3af06d8511ea75a7ed49f99"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 28 15:01:34 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 28 15:01:34 2019 +0000"
      },
      "message": "Merge \"Reland: \"init: run property service in a thread\"\""
    },
    {
      "commit": "15c87604035f0fbefb1f0f634ad8c9dd1ee93263",
      "tree": "ea5f8707bc63cdc6a1253b537460b7aa1b933b3d",
      "parents": [
        "fc71730834137bb2e34ad16cc9e74f3dd64746b6",
        "5aa6197d5f387579ff04c330001840d6988e825f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 28 14:58:12 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 28 14:58:12 2019 +0000"
      },
      "message": "Merge \"ueventd: parallelize restorecon /sys\""
    },
    {
      "commit": "33783fc29c4235822516e90277632b9bbef1c982",
      "tree": "f97da0e115f7858df3f6bf0a084a5fc36ae911b8",
      "parents": [
        "3bd09415a3f859467fae2b1516ffa3e95431bfa0"
      ],
      "author": {
        "name": "Ravi Kumar Siddojigari",
        "email": "rsiddoji@codeaurora.org",
        "time": "Tue Jul 30 16:41:20 2019 +0530"
      },
      "committer": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Wed Aug 28 14:28:08 2019 +0200"
      },
      "message": "init: set SetKptrRestrict before early-init\n\nAs part of debugging long run issue we are enabling\nmodule info as part of debug build under the config key\nDEBUG_MODULE_LOAD_INFO , But doing so can lead to info leak\nas modules/dlkm are loaded in early-init and setting the\nkptr_restriction is done after early-init.\n\nSo moving setting of kptr_restrict much before early-init.\n\nBug: 138641073\n\nChange-Id: Ic3c0ca57a94c8b20136a15331dd646bd8825b625\n"
    },
    {
      "commit": "b245609059ebdba0e52227f94168b85c93623a96",
      "tree": "26672dbfae132187f1492846f31e0ede64e914e2",
      "parents": [
        "8381e72a84ef801581d4941c0d0db2ffd2132e5d",
        "6cad139bccfdd82418a87ac5b71e5667b0e48dfa"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 28 02:40:03 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 28 02:40:03 2019 +0000"
      },
      "message": "Merge \"Mark some tests as requiring root.\""
    },
    {
      "commit": "5aa6197d5f387579ff04c330001840d6988e825f",
      "tree": "8f77f533b476a21e549a8c2ce1864c11621ea496",
      "parents": [
        "536dd4292ea687908f6e5ca61a00e6046d5bfe27"
      ],
      "author": {
        "name": "Bongkyu Kim",
        "email": "bongkyu.kim@lge.com",
        "time": "Wed Jan 30 19:59:53 2019 +0900"
      },
      "committer": {
        "name": "Bongkyu Kim",
        "email": "bongkyu.kim@lge.com",
        "time": "Wed Aug 28 09:55:09 2019 +0900"
      },
      "message": "ueventd: parallelize restorecon /sys\n\ngenerate subdir for /sys and /sys/devices, handle restorecon in parallel.\n\nThis reduces coldboot time on our target about 300ms.\n\nChange-Id: I9c3d0e97aacff0ca127880d936dfd5fcc2aee125\n"
    },
    {
      "commit": "a5c2aed35fbff0520973058e73ce7d01415ca64f",
      "tree": "e1b35773b1804fb9a94f724ca2ea724eea9baf43",
      "parents": [
        "30cda267c0215c8023dfbdff606d9bb87ace751b",
        "8180b48c4c22c4bbd8d156a8654e5fe5cceac7c4"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Aug 27 23:23:00 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 27 23:23:00 2019 +0000"
      },
      "message": "Merge \"init: send property_set failures to the audit netlink socket\""
    },
    {
      "commit": "6cad139bccfdd82418a87ac5b71e5667b0e48dfa",
      "tree": "47526f64243b20bb1a17f3981c6622e0ac4335dd",
      "parents": [
        "30cda267c0215c8023dfbdff606d9bb87ace751b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 27 16:02:38 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 27 16:09:32 2019 -0700"
      },
      "message": "Mark some tests as requiring root.\n\nBug: http://b/140123924\nTest: mma\nChange-Id: I3ad277179018631c50d9295cdb173dd9dfa7ac59\n"
    },
    {
      "commit": "309d6dde312fc279da11c3b77d93d3e8177e830f",
      "tree": "cb873e3924181bff7c3ab3d8117f9a47632aa2fa",
      "parents": [
        "8d168c3321a81f11f8fc0d52e6cfbb760238b69c",
        "1b4e7328ad8ddb6b67c637c14b36fe581c047c98"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Aug 27 02:26:25 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 27 02:26:25 2019 +0000"
      },
      "message": "Merge changes I1c1445ba,Ic0c8b163\n\n* changes:\n  Straighten out do_mkdir\n  Convert fscrypt_set_directory_policy to C++\n"
    },
    {
      "commit": "8d168c3321a81f11f8fc0d52e6cfbb760238b69c",
      "tree": "530d330d5641faa9ac687dd9dfffb665d8f3a9ee",
      "parents": [
        "ee9b49d7296229f828795b34028f664f41f76ab0",
        "c8edf84d45ca45df6bece19c3aa7eef5338f07c7"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Aug 27 01:56:41 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 27 01:56:41 2019 +0000"
      },
      "message": "Merge \"init: Add first-stage init support for snapshot-based partitions.\""
    },
    {
      "commit": "8efca4bbb378ff5bd3af06d8511ea75a7ed49f99",
      "tree": "6581b531b039c688547511960bb886a6306c3bad",
      "parents": [
        "a033693a9e5e39725be039140851756d88e7cc1b"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Apr 22 17:46:37 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 26 17:08:41 2019 -0700"
      },
      "message": "Reland: \"init: run property service in a thread\"\n\nIt\u0027s been a long standing issue that init cannot respond to property\nset messages when it is running a builtin command.  This is\nparticularly problematic when the commands involve IPC to vold or\nother daemons, as it prevents them from being able to set properties.\n\nThis change has init run property service in a thread, which\neliminates the above issue.\n\nThis change may also serve as a starting block to running property\nservice in an entirely different process to better isolate init from\nhandling property requests.\n\nTest: CF boots, walleye boots, properties are set appropriately\nChange-Id: I13b8bf240c9fcb1d2d5890a8be2f0ef74efd4adf\n"
    },
    {
      "commit": "e3cd3badbd4de06a9931ef94a315d704720b5fec",
      "tree": "ac033d58c47ba5dfe4d444aeb9573225c895e597",
      "parents": [
        "7a0948f6c4fb98dc26d0d34043c0ab19a6d3f0b1",
        "052f31c678bd4ec27d3eb4cc89b0e0f1d2fa97e6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Aug 26 23:24:54 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 26 23:24:54 2019 +0000"
      },
      "message": "Merge \"Move fscrypt_init_extensions into system/core\""
    },
    {
      "commit": "8180b48c4c22c4bbd8d156a8654e5fe5cceac7c4",
      "tree": "0b3d672749efe28540e7b048217b79facb06cf65",
      "parents": [
        "a033693a9e5e39725be039140851756d88e7cc1b"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 26 13:57:51 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 26 14:53:18 2019 -0700"
      },
      "message": "init: send property_set failures to the audit netlink socket\n\nBug: 139816248\nTest: see audit messages for failed property set during property file\n      reading\n\nChange-Id: I2b6a0448aa4cb494e924070928b0fd0eb5d5c998\n"
    },
    {
      "commit": "eb94026231c10fd3b47ea469fe36abf175566c34",
      "tree": "5358ba928707efe11ce6190f7a277d5ce2b6d30b",
      "parents": [
        "e0b2b759fa8015eb44f714ee9b336e4ba9406c40",
        "f451426205b9f2919c998d7dff87fda300944178"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 26 19:47:02 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 26 19:47:02 2019 +0000"
      },
      "message": "Merge \"Revert \"init: run property service in a thread\"\""
    },
    {
      "commit": "1b4e7328ad8ddb6b67c637c14b36fe581c047c98",
      "tree": "236a16ba4ece62cbda8054a313d28dee4bc5c116",
      "parents": [
        "285e5d6d0830ef9de79de8ee487fec9e4a3863b0"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Sun Aug 25 12:18:43 2019 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Mon Aug 26 12:06:59 2019 -0700"
      },
      "message": "Straighten out do_mkdir\n\nUse lstat(), and then make only the system calls needed to fix the\ndirectory up.\n\nBug: 140027478\nTest: boots twice, no worrying log messages.\nChange-Id: I1c1445baae3ec1c1ce17626ede388aa04d5f7781\n"
    },
    {
      "commit": "285e5d6d0830ef9de79de8ee487fec9e4a3863b0",
      "tree": "98aad582a90c584d572bdc0757358e8bb62a7eca",
      "parents": [
        "052f31c678bd4ec27d3eb4cc89b0e0f1d2fa97e6"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Sun Aug 25 11:54:40 2019 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Mon Aug 26 11:55:36 2019 -0700"
      },
      "message": "Convert fscrypt_set_directory_policy to C++\n\nBug: 140027478\nTest: compiles, boots\nChange-Id: Ic0c8b163fe37b11787cab49cc2eea38a1de377e9\n"
    },
    {
      "commit": "052f31c678bd4ec27d3eb4cc89b0e0f1d2fa97e6",
      "tree": "f38ac3b0746e4d5dfbae05360a825841c3748167",
      "parents": [
        "8184d7c2a5b5ef42fdb6405a2ccf051310efbc42"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Mon Aug 26 10:33:17 2019 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Mon Aug 26 10:33:17 2019 -0700"
      },
      "message": "Move fscrypt_init_extensions into system/core\n\nBug: 140027478\nTest: treehugger\nChange-Id: I9f8b76a501be0b261b6fdd1da98447601e0fd32b\n"
    },
    {
      "commit": "f451426205b9f2919c998d7dff87fda300944178",
      "tree": "3f98ab68d1f96d9311ecdc45df8b9a02608c85ab",
      "parents": [
        "26f5e7da3a8d99813d1db00bfb04e4ccd49e3221"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 26 16:33:40 2019 +0000"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 26 16:33:40 2019 +0000"
      },
      "message": "Revert \"init: run property service in a thread\"\n\nThis reverts commit 26f5e7da3a8d99813d1db00bfb04e4ccd49e3221.\n\nReason for revert: bluecross boot stability issue\n\nBug: 140009641\nChange-Id: I7ddb9509dfb2c6f644037129aa9d3fb9ff1740aa\n"
    },
    {
      "commit": "88eedafbe1672c9b5cd5d0792137364f8ea4c542",
      "tree": "87e602bba9777d9c09b42b0789c1542ff30e4e63",
      "parents": [
        "c3847f599c0b22d9ec18f07275bb68da8b678590",
        "17b2be05a21294a9a31c623a4714f18f4e5babcf"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 22 22:53:56 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 22 22:53:56 2019 +0000"
      },
      "message": "Merge \"Add init_tests to CTS\""
    },
    {
      "commit": "c5b3c88f8afd283467fd05fcd5d3056aabe21768",
      "tree": "8a4c2120938e8114636f96be6809c052daeab8a6",
      "parents": [
        "afe45ab5f253dc069d2d595207f56ce6022569a6",
        "251ec05f017fb81628dd1995fb587913063702e4"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Aug 22 19:12:40 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 22 19:12:40 2019 +0000"
      },
      "message": "Merge \"liblp: Support sdcards in PartitionOpener.\""
    },
    {
      "commit": "afe45ab5f253dc069d2d595207f56ce6022569a6",
      "tree": "e6d6be3fe0cff5c6cf2464d2314f8cbee520f132",
      "parents": [
        "6b20b7cff809667624771bc7e8ee57ecdfb80de9",
        "26f5e7da3a8d99813d1db00bfb04e4ccd49e3221"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 22 17:24:18 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 22 17:24:18 2019 +0000"
      },
      "message": "Merge changes Id9534a59,I3ee81536\n\n* changes:\n  init: run property service in a thread\n  Revert \"init: Handle properties in the background of calling fs_mgr\"\n"
    },
    {
      "commit": "17b2be05a21294a9a31c623a4714f18f4e5babcf",
      "tree": "153b73b3861aad0dfd4bc0a4fd6b841b72c5250a",
      "parents": [
        "61bffa5fc0f433163efb2efdedf26e4e1eed751f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Aug 20 10:43:48 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 22 08:37:55 2019 -0700"
      },
      "message": "Add init_tests to CTS\n\nTest: atest CtsInitTestCases\nTest: Cts in presubmit still passes\nChange-Id: Ic16dafbaacfbace904947bd3ce2b8586f981348f\n"
    },
    {
      "commit": "c8edf84d45ca45df6bece19c3aa7eef5338f07c7",
      "tree": "7963af53787b832449211b147644b22c312f49c2",
      "parents": [
        "251ec05f017fb81628dd1995fb587913063702e4"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Aug 20 17:24:18 2019 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Aug 21 12:27:56 2019 -0700"
      },
      "message": "init: Add first-stage init support for snapshot-based partitions.\n\nNote that /metadata must now be mounted before CreateLogicalPartitions()\nis called. This is because SnapshotManager overrides the default\npartitioning scheme, and the only way to tell if a SnapshotManager is\nneeded is via the metadata partition.\n\nBug: 139204329\nTest: manual test\nChange-Id: I812df6c4c0d4d8753b1516f63dc70c5bc3e1c09c\n"
    },
    {
      "commit": "251ec05f017fb81628dd1995fb587913063702e4",
      "tree": "5f00674cc5ca6e4cc4c0752b61580c3ba96b1f3b",
      "parents": [
        "370226e6622cec88c3cdcb18d3fd3ac663340ec8"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Aug 20 16:31:46 2019 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Aug 21 12:27:56 2019 -0700"
      },
      "message": "liblp: Support sdcards in PartitionOpener.\n\nBefore ImageManager was introduced, gsid avoided using PartitionOpener\nwhen writing to external media. PartitionOpener couldn\u0027t interact with\nnon-boot devices, because it prepends /dev/block/by-name. We hacked\naround this in both gsid and in first-stage init, which manually detects\nthe problem and prepends /dev/block instead.\n\nAfter the ImageManager refactoring, sdcard support broke in gsid,\nbecause it started relying on PartitionOpener. Let\u0027s fix this by allowing\n/dev/block for mmcblk* names in PartitionOpener.\n\nBug: 139204329\nTest: fiemap_image_test gtest\nChange-Id: Ic1cbdbe0a18fc09522ee38cc62b35fd8193ce250\n"
    },
    {
      "commit": "26f5e7da3a8d99813d1db00bfb04e4ccd49e3221",
      "tree": "cd49180a9683bf3bc6ec0843d5427d7b40d88841",
      "parents": [
        "3707d328a148e1886dcf8e6dc5dd88407bc6c40c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Apr 22 17:46:37 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 21 08:26:09 2019 -0700"
      },
      "message": "init: run property service in a thread\n\nIt\u0027s been a long standing issue that init cannot respond to property\nset messages when it is running a builtin command.  This is\nparticularly problematic when the commands involve IPC to vold or\nother daemons, as it prevents them from being able to set properties.\n\nThis change has init run property service in a thread, which\neliminates the above issue.\n\nThis change may also serve as a starting block to running property\nservice in an entirely different process to better isolate init from\nhandling property requests.\n\nTest: CF boots, walleye boots, properties are set appropriately\nChange-Id: Id9534a5916abb2f7d2a49cda54e33c1b69c50c2f\n"
    },
    {
      "commit": "0f6537c437481f4dcbbd8b2f673dcab67ec68e02",
      "tree": "0600f43544fc0aacbbf9a7aa543aa52dd1df75fc",
      "parents": [
        "70a368119d9fd8f105da410a36e6b6adb2d248d2"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sun Aug 18 17:57:35 2019 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sun Aug 18 17:57:35 2019 -0700"
      },
      "message": "Fix ODR violation\n\nhost_init_verifier statically links libprocessgroup, which has shared\ndependency on libjsoncpp. Right now it also has shared dependency on\nlibjsoncpp, resulting in ODR violation:\n\n ERROR: AddressSanitizer: odr-violation (0x7fce895f3220):\n [1] size\u003d8 \u0027Json::kNullRef\u0027 external/jsoncpp/src/lib_json/json_value.cpp:37:22\n [2] size\u003d8 \u0027Json::kNullRef\u0027 external/jsoncpp/src/lib_json/json_value.cpp:37:22\n These globals were registered at these points:\n [1]:\n #0 0x56276926ef0d (/usr/local/google/buildbot/src/android/master/out/host/linux-x86/bin/host_init_verifier+0xd1f0d)\n #1 0x7fce894ac1d9 (/lib64/ld-linux-x86-64.so.2+0x101d9)\n\n [2]:\n #0 0x56276926ef0d (/usr/local/google/buildbot/src/android/master/out/host/linux-x86/bin/host_init_verifier+0xd1f0d)\n #1 0x7fce894ac1d9 (/lib64/ld-linux-x86-64.so.2+0x101d9)\n\nMove host_init_verifier to libjsoncpp_headers to fix the ODR violation.\n\nBug: 139546461\nBug: 131328001\nTest: Run ASAN host_init_verifier\nChange-Id: I54a51138d61fff37f092ffaa0758817600a0af9d\n"
    },
    {
      "commit": "3707d328a148e1886dcf8e6dc5dd88407bc6c40c",
      "tree": "3f98ab68d1f96d9311ecdc45df8b9a02608c85ab",
      "parents": [
        "61bffa5fc0f433163efb2efdedf26e4e1eed751f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 15 13:07:24 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 15 13:07:24 2019 -0700"
      },
      "message": "Revert \"init: Handle properties in the background of calling fs_mgr\"\n\nThis reverts commit 71bdf2820ee0fbf698840f84fdd1255dbf8d3aee.\nTest: boot\n"
    },
    {
      "commit": "53620ca1b16f531dce7580212784f2e0935046b1",
      "tree": "ce44f9536636d1bb5617b40f3e43e5997b538255",
      "parents": [
        "b85c72caede762d7fbc8f542fd3447d37e768abf",
        "aefb141c67ad891b249f55f19c7d255febac8ff3"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Aug 13 14:48:04 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 13 14:48:04 2019 +0000"
      },
      "message": "Merge \"Actually add README contents for ueventd\""
    },
    {
      "commit": "b85c72caede762d7fbc8f542fd3447d37e768abf",
      "tree": "5a2cc10a0764fde50bcc1cf22ef70cca31b99757",
      "parents": [
        "6c62ae7adb89bd7104430d478cde033404182e28",
        "beb6abedcc23b848323ff2b54d05054ae5126a61"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 13 12:48:40 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 13 12:48:40 2019 +0000"
      },
      "message": "Merge \"init: first stage init tie stdout and stderr to /dev/kmsg\""
    },
    {
      "commit": "aefb141c67ad891b249f55f19c7d255febac8ff3",
      "tree": "483c57054af65c993b46e5d4417850d3f652fe35",
      "parents": [
        "4b8e6b673f904c197743aad8f773d43cc6b69883"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 09 13:15:08 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 12 13:13:57 2019 -0700"
      },
      "message": "Actually add README contents for ueventd\n\nA long time coming\n\nTest: n/a\nChange-Id: I6050e74d7497d5a7760f615fe2ad7d5c78a66ab9\n"
    },
    {
      "commit": "6fd8d3bb1b9e29da5d4840bdb94fdf262fad1f3a",
      "tree": "10e74cd5e40f6d3c1430301b0703c292275a4aed",
      "parents": [
        "4b8e6b673f904c197743aad8f773d43cc6b69883"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 12 09:26:20 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 12 09:31:42 2019 -0700"
      },
      "message": "init: Allow matching empty property values\n\nWhen we have a property match along with an event trigger, we\ncurrently don\u0027t allow matching empty property values, in other words,\nproperties that are unset.  For example, the below trigger would never\nbe run:\n\non zygote-start \u0026\u0026 property:persist.sys.fuse\u003d\"\"\n\nThat doesn\u0027t make sense though, it should be possible to match an\nempty property value, so this change allows that trigger to match when\npersist.sys.fuse is either empty or not set.\n\nThis continues to not match a \u0027*\u0027 to an empty property, so\n\non zygote-start \u0026\u0026 property:persist.sys.fuse\u003d*\n\nwill not run if persist.sys.fuse is empty or unset.\n\nTest: the above triggers run appropriately\nChange-Id: Ia57de7b96ad352590d0c82ff4ae95060b7361976\n"
    },
    {
      "commit": "0d061b258a4851741a3ec18b580f93300e4a7c26",
      "tree": "b698509d1bb78e70f8b8720ef1d5970b99ef857a",
      "parents": [
        "f9d5327287dbcb89a8aaaab5ba5964702edf00f1",
        "d2533c3395499a205e6dcddc729014a0ae715813"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Tue Aug 06 23:21:29 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 06 23:21:29 2019 +0000"
      },
      "message": "Merge \"Adds check_interface_{restart,start,stop} check_builtins.\""
    },
    {
      "commit": "d2533c3395499a205e6dcddc729014a0ae715813",
      "tree": "b99062408b6c5deeaa4a722faf031ff4bd4291d9",
      "parents": [
        "23a87716b57114e9b4f607042e3ec1af90d68c0a"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Aug 02 15:13:50 2019 -0700"
      },
      "committer": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Tue Aug 06 11:10:42 2019 -0700"
      },
      "message": "Adds check_interface_{restart,start,stop} check_builtins.\n\nIncludes refactoring out interface inheritance hierarchy logic to a new\ninterface_utils file.\n\nBug: 137397100\nTest: \u0027m\u0027 with an init_rc that misspells an interface in an\ninterface_start, interface_restart, or interface_stop line.\nChange-Id: I9f650289d64ae2b13435a81e1693c7ab5e6e9ecf\n"
    },
    {
      "commit": "980cbef0c5a5da15c5e1dc432ca33d4d4ec6182f",
      "tree": "f561420e4015306e96da3008ccf36aebdcbf984d",
      "parents": [
        "e269a721dc47a3c6ac9f57e22dfd4556efbc5605",
        "6737a6bf3f81105f4153bed6e447cc2f26fb3999"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Aug 06 15:20:11 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 06 15:20:11 2019 +0000"
      },
      "message": "Merge \"init: Check onrestart commands\""
    },
    {
      "commit": "e269a721dc47a3c6ac9f57e22dfd4556efbc5605",
      "tree": "ec9ccf16fd876d5de02b09956309aa78b881230c",
      "parents": [
        "e5fa9b80ac761dbaf7fbb389204b6b95a6938c86",
        "d17c37952de1df556726ed1ebb9fe8e3ee3b3bf7"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Aug 06 15:19:48 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 06 15:19:48 2019 +0000"
      },
      "message": "Merge \"init: ignore ENOENT from fewer builtins\""
    },
    {
      "commit": "6737a6bf3f81105f4153bed6e447cc2f26fb3999",
      "tree": "5ad2bd4cd38317b5b99d27700f216e8b2ecd8b20",
      "parents": [
        "23a87716b57114e9b4f607042e3ec1af90d68c0a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 05 15:03:58 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 05 15:03:58 2019 -0700"
      },
      "message": "init: Check onrestart commands\n\nTest: have bad users/groups in onrestart chown commands fail the build\nChange-Id: Ic7fea6395c1f6e09f06800ba373d402a81cb774c\n"
    },
    {
      "commit": "a022e47a0b2d5f335a7e9ec96cfc01328633c805",
      "tree": "ef6a1ce90c2b3b9374f02e3281fdbef43a597532",
      "parents": [
        "fb54b74fa02b60b02d4397914a3c53e3f9c5e836",
        "e6586c4c8edec05d8499c49a26b2673d63145f0a"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Aug 02 23:00:27 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 02 23:00:27 2019 +0000"
      },
      "message": "Merge \"Fixes incorrect flag info for the inheritance hierarchy file.\""
    },
    {
      "commit": "e6586c4c8edec05d8499c49a26b2673d63145f0a",
      "tree": "ae81f14ed339dc3c3f6f3d89a1968a6efde99b84",
      "parents": [
        "d7546f1d5784cb6e1939f365c7fc295c183ba8af"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Aug 02 10:59:54 2019 -0700"
      },
      "committer": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Aug 02 15:22:13 2019 -0700"
      },
      "message": "Fixes incorrect flag info for the inheritance hierarchy file.\n\nTest: n/a\nChange-Id: I65d6437f4192d969932e01019826827c98a2669c\n"
    },
    {
      "commit": "fb54b74fa02b60b02d4397914a3c53e3f9c5e836",
      "tree": "0cda7a86155d405d76515e586796c553f819a506",
      "parents": [
        "41a5c022b45667a9a389f5e81ca95049ef098217",
        "c788771da77dcec8ad23f04641058d7a05b65dfb"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Aug 02 21:51:17 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 02 21:51:17 2019 +0000"
      },
      "message": "Merge changes from topic \"services_serve_interfaces_test\"\n\n* changes:\n  Adds new property for service name -\u003e PID.\n  Adds a library to parse service info from init_rc files for use in tests.\n  Adds a visibility rule for init defaults.\n"
    },
    {
      "commit": "549ea4801bca1be21cd4fe8e845e535e4f916130",
      "tree": "2217423420de009982eab86e6e00d03739b07248",
      "parents": [
        "1553cf829ab8599bbc72f7d77c0fbb6ab1ece45d",
        "4772f1da47bfdad8e0b3e3cdbf1bdc6bda0443b1"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 01 22:04:30 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 01 22:04:30 2019 +0000"
      },
      "message": "Merge changes Ied888249,Id8857c45\n\n* changes:\n  init: check the arguments of builtins during the build\n  init: don\u0027t log in expand_props directly\n"
    },
    {
      "commit": "4772f1da47bfdad8e0b3e3cdbf1bdc6bda0443b1",
      "tree": "3f40d0bee7fa7394dc09ed9d73f2cd1d9f3d6932",
      "parents": [
        "c5cf85db23ac8c8a0206e911d73ef1c42ad66ed6"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 30 09:34:41 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 01 10:54:47 2019 -0700"
      },
      "message": "init: check the arguments of builtins during the build\n\nHost init verifier already checks that the names and number of\narguments for builtins are correct, but it can check more.  This\nchange ensures that property expansions are well formed, and that\narguments that can be parsed on the host are correct.  For example it\nchecks that UIDs and GIDs exist, that numerical values can be parsed,\nand that rlimit strings are correct.\n\nTest: build\n\nChange-Id: Ied8882498a88a9f8324db6b8d1020aeeccc8177b\n"
    },
    {
      "commit": "c5cf85db23ac8c8a0206e911d73ef1c42ad66ed6",
      "tree": "5e940c776939c3d175bf50cbbd1ea92d5840d39a",
      "parents": [
        "244d9b8fb968b9f0289ac69d723a4f760d1c1b91"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 31 13:59:15 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 01 10:34:58 2019 -0700"
      },
      "message": "init: don\u0027t log in expand_props directly\n\nIt\u0027s better to pass the error message to the caller to determine how\nbest to print the error.\n\nTest: build\nChange-Id: Id8857c459df2f26c031650166609608d20e4d051\n"
    },
    {
      "commit": "f7c2bfee083e9c9477255feb62d9307f97199f85",
      "tree": "f88a98695678ff64ed6fcbaf6ec1ca78cc41f85b",
      "parents": [
        "ae898442d1e612be4c5991ab5c75bc3efcf28bab"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Jul 31 11:35:18 2019 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Wed Jul 31 11:53:18 2019 -0700"
      },
      "message": "init: add timing log for oneshot and exec_background services\n\nBug: 136523746\nBug: 138732985\nTest: boot\nChange-Id: I713edd2ba8a391d5afbea796c6d58ffac9477436\n"
    },
    {
      "commit": "c788771da77dcec8ad23f04641058d7a05b65dfb",
      "tree": "2f1769ea3c20d8d9ef88a6d0d86ef95527dce2a1",
      "parents": [
        "d19c5a5076e111cdbf8197489b2dc0e2fee010bd"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Jul 19 11:04:01 2019 -0700"
      },
      "committer": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Wed Jul 31 11:35:32 2019 -0700"
      },
      "message": "Adds new property for service name -\u003e PID.\n\nBug: 138114550\nTest: used in vts_ibase_test\nChange-Id: Id21b81aa09b8597d17ad0a132ddd7749fe1182e9\n"
    },
    {
      "commit": "d19c5a5076e111cdbf8197489b2dc0e2fee010bd",
      "tree": "6a851d32bb8bf6b9777658ec391903142c9166ab",
      "parents": [
        "8082ba2f77372d3076779f108263ce8a677841a6"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Jul 19 15:18:22 2019 -0700"
      },
      "committer": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Wed Jul 31 11:33:47 2019 -0700"
      },
      "message": "Adds a library to parse service info from init_rc files for use in tests.\n\nBug: 138114550\nTest: used in vts_ibase_test\nChange-Id: Ibadc2a76d6112b5778d3a282a1e05ffc74511623\n"
    },
    {
      "commit": "8082ba2f77372d3076779f108263ce8a677841a6",
      "tree": "65d3a060c0bf3179f3ad06472111541388128cff",
      "parents": [
        "3d85fc695413de2ff6ca78f2ddf1f07acad57961"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Tue Jul 23 10:26:15 2019 -0700"
      },
      "committer": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Wed Jul 31 11:33:35 2019 -0700"
      },
      "message": "Adds a visibility rule for init defaults.\n\nAlso ran bpfmt on the file.\n\nTest: n/a\nChange-Id: I33f6233a031462debe295ab5576dd75c948ae081\n"
    },
    {
      "commit": "d17c37952de1df556726ed1ebb9fe8e3ee3b3bf7",
      "tree": "b035fefa6e6350ccf666f2b0829a8bc7124cad31",
      "parents": [
        "244d9b8fb968b9f0289ac69d723a4f760d1c1b91"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 30 10:51:59 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 30 12:44:35 2019 -0700"
      },
      "message": "init: ignore ENOENT from fewer builtins\n\nPreviously we were ignoring ENOENT from all builtins as\nrootdir/init.rc has many legacy commands that we need to keep for\nbackwards compatibility, but are otherwise no longer relevant.\n\nHowever, this wasn\u0027t catching actual issues, for example chown failing\ndue to not finding the user or group name.  This change therefore\nreduces the scope of ignoring ENOENT to the only the extraneous errors\nin builtins.\n\nTest: boot CF and walleye without seeing errors from init.rc\nTest: see errors from invalid users/groups in chown\nChange-Id: Ia8e14fa2591e083cb1736c313a3e55515bc5d15e\n"
    },
    {
      "commit": "beb6abedcc23b848323ff2b54d05054ae5126a61",
      "tree": "a2c6512c0f4791cc8c2ef8bff877f878d605935f",
      "parents": [
        "244d9b8fb968b9f0289ac69d723a4f760d1c1b91"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jul 29 09:35:18 2019 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jul 29 11:56:51 2019 -0700"
      },
      "message": "init: first stage init tie stdout and stderr to /dev/kmsg\n\nIt is exceedingly difficult to debug I/O and filesystem corruption\nissues during first and selinux initialization stage init.  By\nredirecting stderr, and for good measure stdout, to /dev/kmsg in\nfirst stage init before it exec\u0027s \"/system/bin/init\" we can see\nthe filesystem corruption errors more clearly.\n\nBefore this we would see:\n\ninit: Skipped setting INIT_AVB_VERSION (not in recovery mode)\nKernel panic - not syncing: Attempted to kill init! exitcode\u003d0x...\n\nand then wonder why?\n\nAfter this change we can see:\n\ninit: Skipped setting INIT_AVB_VERSION (not in recovery mode)\nlibc: Fatal signal 5 (SIGTRAP), code 128 (SI_KERNEL), fault addr...\nKernel panic - not syncing: Attempted to kill init! exitcode\u003d0x...\n\n-or-\n\ninit: Skipped setting INIT_AVB_VERSION (not in recovery mode)\nlinker: CANNOT LINK EXECUTABLE \"/system/bin/init\": cannot locate symbol...\nKernel panic - not syncing: Attempted to kill init! exitcode\u003d0x...\n\n(NB: with stutter removed because of stdout and stderr)\n\nSilence from these sources otherwise on successful execution.\n\nTest: boot\nBug: 138459777\nChange-Id: I4200b24baeaa6e408a5e0a2c890561bda1e2f1f4\n"
    },
    {
      "commit": "d52a5b3c10ad341e38f61466e81b7a963e6eb92e",
      "tree": "4a39211c457d181b091a854d8faeedb1be7170c5",
      "parents": [
        "b3fc1b7441b8cc4d11384cf8867682308daffb15"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jul 22 16:05:36 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 23 14:39:38 2019 -0700"
      },
      "message": "init: simplify keyword_map\n\nI\u0027ve heard that keyword_map is too complex, in particular the tuple\nand the pair in BuiltinFunctionMap, so this change removes a lot of\nthat complexity and, more importantly, better documents how all of\nthis works.\n\nTest: boot, init unit tests\n\nChange-Id: I74e5f9de7f2ec524cb6127bb9da2956b5f307f56\n"
    },
    {
      "commit": "cccb573f93bd1e5b6f330af2f2431bedb0d3dc34",
      "tree": "65dd83dab9a5badb0f1ab858d0230bd4bbd14333",
      "parents": [
        "89bb586d524978b858e94cbac3e43a5465d43052",
        "5e98b633a748695f1c838a79fc0bbf9c4859990d"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Sat Jul 20 05:03:41 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jul 20 05:03:41 2019 +0000"
      },
      "message": "Merge \"init: Write the reason in BCB on \"reboot recovery\"\""
    },
    {
      "commit": "5e98b633a748695f1c838a79fc0bbf9c4859990d",
      "tree": "32ad9d3bac151ff9c2d1a339f3c97769a1db7851",
      "parents": [
        "137943d31b10ab2ec821b34bba7fc7a43961aa1b"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jul 18 12:48:28 2019 -0700"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Fri Jul 19 13:02:59 2019 -0700"
      },
      "message": "init: Write the reason in BCB on \"reboot recovery\"\n\nWithout this change \"adb reboot recovery\" leads to normal boot.\n\nBug: 137523800\nTest: peform factory reset, adb reboot recovery\nChange-Id: Ie791c8107d3434bf4ae6f5785b24e7d97921a7a9\n"
    },
    {
      "commit": "85bbbe569580f7c1c5c339ebcf536dffe7258ecf",
      "tree": "600a2f3749a9af929f02928d6137c56f2de5a0e5",
      "parents": [
        "18545d3852f1ddcebaca5d160d3f63d30bd4d0a4",
        "137943d31b10ab2ec821b34bba7fc7a43961aa1b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 19 05:34:43 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 19 05:34:43 2019 +0000"
      },
      "message": "Merge \"Revert \"init: Write the reason in BCB on \"reboot recovery\"\"\""
    },
    {
      "commit": "137943d31b10ab2ec821b34bba7fc7a43961aa1b",
      "tree": "45476a83ffd6b55fcaa14222149c5197a862cfea",
      "parents": [
        "97c06703f6cd899d62b83ba8c7d2b226ad12da95"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jul 18 18:00:33 2019 +0000"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Thu Jul 18 11:42:14 2019 -0700"
      },
      "message": "Revert \"init: Write the reason in BCB on \"reboot recovery\"\"\n\nThis reverts commit 4d35f2e59c7c599c4e9935714f3b18d58ef47b4f.\n\nReason for revert: b/137523800 This breaks factory reset on all devices (and potentially rescue party and non-ab updates). Because the init code unconditionally clear the arguments like \"--wipe_data\" written by framework; as a result, device boots into recovery without doing wipe. \n\nI guess one fix is to check the content of BCB, and skip the overwrite if it already boots into recovery. Revert the cl first to unblock p1, will submit the fix separately.\n\nChange-Id: Iccaf3dce6999005c2199490a138844d5a5d99e7f\n"
    },
    {
      "commit": "728586f5b23d830b1d14c61abcf85cd72dc95412",
      "tree": "7e7c9e0d735758687eff02deaa73546217fdf746",
      "parents": [
        "8987f061c4e0cd9d024e39e56f3cabd2fdfb13df"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Jul 16 13:15:48 2019 +0200"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Wed Jul 17 08:49:44 2019 +0200"
      },
      "message": "Ignore class_{reset|start}_post_data on non-updatable APEX.\n\nFor devices that use FDE and don\u0027t support updatable APEXes, don\u0027t\nstop and restart all processes - there is no need and it only increases\nboot time for these devices.\n\nAdditionally, some daemons have never been restarted in the past, and\nrestarting them exposes certain issues.\n\nBug: 137251597\nBug: 136777273\nBug: 135627804\nTest: verified manually w/ ro.updatable.apex\u003dfalse\nChange-Id: I9590f2c2cdfab0a49f39846896460305d44221ee\n"
    },
    {
      "commit": "a19f51eccc428a55ba1bc2009ca70042e9c26d0b",
      "tree": "ad20106c0f28228843e7d4fe67211a153d1d096d",
      "parents": [
        "100e8ffbcdfc6aa23ef18fbc2c7635ef805dac92",
        "ceb36d08f4afc06e8f71cc84975350fe9ef591e0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 16 02:35:29 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 16 02:35:29 2019 +0000"
      },
      "message": "Merge \"Reserve \u0027init\u0027.\""
    },
    {
      "commit": "100e8ffbcdfc6aa23ef18fbc2c7635ef805dac92",
      "tree": "3005cfe884b2def308571671161548a2eaae6328",
      "parents": [
        "2f174171d71ee9d74d72982a56b908287200eb6f",
        "4c79df91a98085783bd788f5ddaba99cce26a239"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 16 02:02:40 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 16 02:02:40 2019 +0000"
      },
      "message": "Merge \"Remove obsolete subdirs entry.\""
    },
    {
      "commit": "c8620ddafe12076ffd878f8b01584485c8d949b7",
      "tree": "c70cf60ec950d5c91e5a916bfdfa7ba0190f822e",
      "parents": [
        "2a0a0810a1e585aa32a24499fbc3c557940ef030",
        "2e4c85f157bd52d4daaf0b4e67280aa72f98da07"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jul 15 23:20:13 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 15 23:20:13 2019 +0000"
      },
      "message": "Merge \"init: clean up file / socket descriptor creation\""
    },
    {
      "commit": "4c79df91a98085783bd788f5ddaba99cce26a239",
      "tree": "daf17b745ad296b33f70a58e3bbb08916476fab2",
      "parents": [
        "e0b729d2141e213d20d88908bacae20b7272b9d6"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jul 15 15:14:18 2019 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jul 15 15:14:34 2019 -0700"
      },
      "message": "Remove obsolete subdirs entry.\n\nChange-Id: I3327df74179d2ba1ffd66da59e5196f34dfe3974\nBugs: me\nTest: N/A\n"
    },
    {
      "commit": "ceb36d08f4afc06e8f71cc84975350fe9ef591e0",
      "tree": "d06d5a6030dce64384113334a17965fa7e8a29c3",
      "parents": [
        "e0b729d2141e213d20d88908bacae20b7272b9d6"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jul 15 15:12:56 2019 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jul 15 15:12:56 2019 -0700"
      },
      "message": "Reserve \u0027init\u0027.\n\nThis makes `pathmod init` and `gomod init` work, and it also reserves\nthe \u0027init\u0027 for potential future usage.\n\nChange-Id: I6990bf421211b93d58d978d84d46474ff243e808\nBugs: me\nTest: pathmod init; gomod init\n"
    },
    {
      "commit": "2e4c85f157bd52d4daaf0b4e67280aa72f98da07",
      "tree": "bb553134c66c156072cc747c99d93812acc5bc5f",
      "parents": [
        "8a779ee959996b413a8539d2a571e34803be0bf5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 09 13:33:36 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jul 15 12:17:30 2019 -0700"
      },
      "message": "init: clean up file / socket descriptor creation\n\nclang-tidy hinted that some of this code wasn\u0027t right.  Looking\ndeeper, there is really not much related to file and socket\ndescriptors, except that they\u0027re published in similar ways to the\nenvironment.  All of the abstraction into a \u0027Descriptor\u0027 class takes\nus further away from specifying what we really mean.\n\nThis removes that abstraction, adds stricter checks and better errors\nfor parsing init scripts, reports sockets and files that are unable to\nbe acquired before exec, and updates the README.md for the passcred\noption.\n\nTest: build, logd (uses files and sockets) works\nChange-Id: I59e611e95c85bdbefa779ef69b32b9dd4ee203e2\n"
    },
    {
      "commit": "c9b797ac25dbcf982e8af8b383921e89ee6e5829",
      "tree": "30235c655699fbf298671ab0b19c67007758e158",
      "parents": [
        "e0b729d2141e213d20d88908bacae20b7272b9d6",
        "924858cd18589de74e7f4347d27c77ca6a33716d"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Fri Jul 12 23:03:41 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 12 23:03:41 2019 +0000"
      },
      "message": "Merge \"libdm: Improve the reliability of dm device paths.\""
    },
    {
      "commit": "8a779ee959996b413a8539d2a571e34803be0bf5",
      "tree": "55e4aaf32b2241ae443823326a4cf3202a6209d5",
      "parents": [
        "bde9fc17877dd3cdfba7e7792baa026cde18a100",
        "7c1d87e490886ba80f741f89cc6cd82a55eec247"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 12 18:49:49 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 12 18:49:49 2019 +0000"
      },
      "message": "Merge \"init: fix clang-tidy performance issues\""
    },
    {
      "commit": "4b505fe3a84b1748d3f0844ee1d260e9aec9d0e2",
      "tree": "c95387067e4584184e322b532bb173bf18a0fc46",
      "parents": [
        "e7a010de01bfd94c16381215f82422e03003f549",
        "3f42a767cd478de9cac764d91a2318d86f0671c2"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Fri Jul 12 18:01:46 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 12 18:01:46 2019 +0000"
      },
      "message": "Merge \"Checks the interface inheritance hierarchy in init_rc files.\""
    },
    {
      "commit": "e7a010de01bfd94c16381215f82422e03003f549",
      "tree": "580c821d7a9f5481dfae5c1962c6956b30833399",
      "parents": [
        "5c296a0003d0d5079ab242aac2db7687d257e728",
        "4d35f2e59c7c599c4e9935714f3b18d58ef47b4f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 12 17:39:32 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 12 17:39:32 2019 +0000"
      },
      "message": "Merge \"init: Write the reason in BCB on \"reboot recovery\"\""
    },
    {
      "commit": "5c296a0003d0d5079ab242aac2db7687d257e728",
      "tree": "a85e4c8a78a78873f2bff4911bba3014218b332d",
      "parents": [
        "67a0dd4e273ccd05c8decfd8f5572b1914600c84",
        "d7931f114953124e37705ecf7b18f5cdd0cb447a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 12 17:37:25 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 12 17:37:25 2019 +0000"
      },
      "message": "Merge \"init: powerctl support and propagate longer canonical reboot reasons.\""
    },
    {
      "commit": "924858cd18589de74e7f4347d27c77ca6a33716d",
      "tree": "a87b5b0c26f7c5ed3f5bcff9e58e9df182a7e631",
      "parents": [
        "4280165ae03280acd22765ef13042b2e166c6a19"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Jun 26 17:00:00 2019 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Jul 11 15:39:52 2019 -0700"
      },
      "message": "libdm: Improve the reliability of dm device paths.\n\nThis fixes a race condition where WaitForFile() after\nGetDmDevicePathByName appears to succeed, but a subsequent operation on\nthe path fails. This can happen when CreateDevice() is called\nimmediately after a call to DeleteDevice (from any process), and the\npath is re-used, enqueuing udev events to remove and re-add the block\ndevice.\n\nThe fix for this is to introduce a new variant of CreateDevice() that\nhas a timeout parameter. When the timeout is positive, CreateDevice()\nwill wait for a /dev/block/mapper/by-uuid symlink to be created, which\nsignals that ueventd has finished processing the operation.\n\nueventd will now create these by-uuid symlinks for device-mapper nodes.\nUnfortunately, the uuid is only available during \"change\" events, so we\nhave to special case device-mapper symlink creation. And since the uuid\nis not available during \"remove\" events, we simply find matching links\nto remove them.\n\nThis ensures that callers of CreateDevice() can use the device path\nknowing that no asynchronous removals are pending. Code that uses the\nold CreateDevice+WaitForFile pattern will be transitioned to the new\nmethod.\n\nNote that it is safe to ignore the timeout, or to use the \"unsafe\"\nCreateDevice, if the caller ensures the path by other means. For example\nfirst-stage init has no device removal, and regenerates uevents until\nit has acquired all the paths it needs.\n\nFinally, since libdm now inspects sysfs unconditionally, libdm consumers\nneed r_dir_file perms for sysfs_dm in their sepolicy. Additionally\nlinking to libdm now requires linking to libext2_uuid.\n\nBug: 135771280\nTest: libdm_test\n      device flashes, boots\nChange-Id: If5a7383ea38f32a7fbbcf24842dce6a668050a70\n"
    },
    {
      "commit": "3f42a767cd478de9cac764d91a2318d86f0671c2",
      "tree": "e7b14913c9fc395def6e5c0f70a3df888aae716a",
      "parents": [
        "6da50e319c159e276c6186b319c71b80a5d6998e"
      ],
      "author": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Tue Jul 09 11:00:53 2019 -0700"
      },
      "committer": {
        "name": "Daniel Norman",
        "email": "danielnorman@google.com",
        "time": "Thu Jul 11 14:43:11 2019 -0700"
      },
      "message": "Checks the interface inheritance hierarchy in init_rc files.\n\nBug: 118016875\nTest: Added \u0027interface\u0027 lines to an init_rc file and observed errors\nwhen misspelled or missing entire inheritance hierarchy.\nChange-Id: I681420f15539742d8415808b2a0dcbf0bf6faaf1\n"
    },
    {
      "commit": "4280165ae03280acd22765ef13042b2e166c6a19",
      "tree": "852b4ad19687b2e1f1f61916879d568b83e880a0",
      "parents": [
        "6da50e319c159e276c6186b319c71b80a5d6998e",
        "4ee27039e0ee4d7c1b5314642d51f01096bfa79e"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 11 20:56:12 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 11 20:56:12 2019 +0000"
      },
      "message": "Merge \"Remove binder dependency in init.\""
    },
    {
      "commit": "4d35f2e59c7c599c4e9935714f3b18d58ef47b4f",
      "tree": "a8918b720826b837891c4dd1aa46838cb689b0ba",
      "parents": [
        "6da50e319c159e276c6186b319c71b80a5d6998e"
      ],
      "author": {
        "name": "Sam Protsenko",
        "email": "semen.protsenko@linaro.org",
        "time": "Wed Jul 10 19:02:25 2019 +0300"
      },
      "committer": {
        "name": "Sam Protsenko",
        "email": "semen.protsenko@linaro.org",
        "time": "Thu Jul 11 11:25:28 2019 +0000"
      },
      "message": "init: Write the reason in BCB on \"reboot recovery\"\n\nWithout this change \"adb reboot recovery\" leads to normal boot.\n\nChange-Id: I361d0a1f6f6f2c57f3dc80102c21970b462c9b9c\nSigned-off-by: Sam Protsenko \u003csemen.protsenko@linaro.org\u003e\n"
    },
    {
      "commit": "d7931f114953124e37705ecf7b18f5cdd0cb447a",
      "tree": "eac69c8c9fc9cfdc70a1faa888d4e3c7ad0e709f",
      "parents": [
        "d543c8ca11d79f487a5c0e496faa57c961acf18c"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Jul 10 10:33:09 2019 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Jul 10 13:06:57 2019 -0700"
      },
      "message": "init: powerctl support and propagate longer canonical reboot reasons.\n\ninit: Received sys.powerctl\u003d\u0027reboot,userrequested,recovery,ui\u0027 ... (/system/bin/recovery)\ninit: powerctl: unrecognized command \u0027reboot,userrequested,recovery,ui\u0027\n\nTest: manual \u0026 boot_reason_test.sh\nBug: 63736262\nBug: 135078366\nBug: 133326470\nChange-Id: I931daf8dc4b74db5ee114c59ee215b1ba54bc31d\n"
    },
    {
      "commit": "7c1d87e490886ba80f741f89cc6cd82a55eec247",
      "tree": "74785eedb9e8164bc5c4dfdf8ed985e99ad8576c",
      "parents": [
        "d543c8ca11d79f487a5c0e496faa57c961acf18c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 10 11:18:24 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 10 12:59:02 2019 -0700"
      },
      "message": "init: fix clang-tidy performance issues\n\nTest: boot, init unit tests\nChange-Id: Iccf34d2fedfa543dd9f29e010cbb6d8fe9cf5983\n"
    },
    {
      "commit": "4ee27039e0ee4d7c1b5314642d51f01096bfa79e",
      "tree": "cf786f28c3699d703d4676823b3d5f2ca2d76d0f",
      "parents": [
        "99087decb9c9bb63ea20e18f6fa5ccbcefe8cf2b"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jun 24 12:55:25 2019 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Jul 10 17:01:31 2019 +0000"
      },
      "message": "Remove binder dependency in init.\n\n- unused\n- using binder requires twoway calls (since getting a service from\n    servicemanager requires two calls)\n\nBug: 135768100\nTest: N/A\nChange-Id: Idc41f487bad2d8343e99ded98812f3a84e2b8e37\n"
    },
    {
      "commit": "7eaf9b58ecbaae486e2ecf98fa803c30f10fc3dc",
      "tree": "6160aa2b78e00dba7f4b39ce4cc4f0367ade845f",
      "parents": [
        "3f407fcc37b401c91784700c0a691ba8b1f7ef15"
      ],
      "author": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Fri Jun 28 14:28:00 2019 +0900"
      },
      "committer": {
        "name": "Justin Yun",
        "email": "justinyun@google.com",
        "time": "Tue Jul 09 23:34:17 2019 +0000"
      },
      "message": "Rename product_services to system_ext\n\nUpdate ld.config.txt and init.\n\nBug: 134359158\nTest: make \u0026\u0026 check boot and ld.config.txt file\nChange-Id: Ie1dce42e690414fb45b26759506ea7f64d06740d\n"
    },
    {
      "commit": "247ffbf3140a454fb2facf0e66ca1547e0833797",
      "tree": "4ab9a5713994334ae650f64730f939de1950e53b",
      "parents": [
        "0e04ce98ef9ffdba486c33589b6c0f4922c4152c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jul 08 15:09:36 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 09 16:17:36 2019 +0000"
      },
      "message": "Fix a few clang-tidy issues and add NOLINT for others\n\nandroid-base:\n* Add NOLINT for expanding namespace std for std::string* ostream\n  overload\n\nlibdm:\n* Fix missing parentesis around macro parameters\n\ninit:\n* Fix missing CLOEXEC usage and add NOLINT for the intended\n  usages.\n* Fix missing parentesis around macro parameters\n* Fix erase() / remove_if() idiom\n* Correctly specific unsigned char when intended\n* \u0027namespace flags\u0027 should be signed, since \u0027flags\u0027 it signed for\n  clone()\n* Add clear to property restore vector\u003cstring\u003e to empty after move\n* Explicit comparison against 0 for strcmp\n\nTest: build\nChange-Id: I8c31dafda2c43ebc5aa50124cbbd6e23ed2c4101\n"
    },
    {
      "commit": "3d3f24bc2271efa66888cdbb5ecc88f77aa1cfaa",
      "tree": "ce6e0a23e25e23a570b90089ed78102ea648b3ab",
      "parents": [
        "463773b733e6c24c94fe2ffb46b6e00224d89e58",
        "9c4fa66706896906ccbca60555dbc87ddd00aac9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 09 00:37:31 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 09 00:37:31 2019 +0000"
      },
      "message": "Merge \"init: fix to avoid loading apex *.rc files twice\""
    },
    {
      "commit": "d75f30a4f0ca10ebd87798d7aeed467e0da40daa",
      "tree": "77c7597b43cd97d85bcf89f368f7f75bc0f508c5",
      "parents": [
        "c538656d7d991ceb1058ac624be95bca45780d9d"
      ],
      "author": {
        "name": "Steve Muckle",
        "email": "smuckle@google.com",
        "time": "Tue May 21 15:50:39 2019 -0700"
      },
      "committer": {
        "name": "Steve Muckle",
        "email": "smuckle@google.com",
        "time": "Mon Jul 08 09:33:24 2019 -0700"
      },
      "message": "first_stage_init: add console\n\nStart and wait on a console if androidboot.first_stage_console\u003d1 is\npresent on the kernel command line. This only works on eng and\nuserdebug builds.\n\nChange-Id: I978e9390a89509431b399ea58b284736b27eeb1b\n"
    },
    {
      "commit": "9c4fa66706896906ccbca60555dbc87ddd00aac9",
      "tree": "716074cca38efee86567825c7078b131cae9cf6c",
      "parents": [
        "c538656d7d991ceb1058ac624be95bca45780d9d"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri Jul 05 11:22:18 2019 +0900"
      },
      "committer": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Fri Jul 05 11:22:18 2019 +0900"
      },
      "message": "init: fix to avoid loading apex *.rc files twice\n\nTest: adb shell dmesg | grep \"init: Parsing file /apex\"\n shows a single entry for each APEX\u0027es *rc file\n\nChange-Id: I9006cc3d0cb7bdfe7532279f29d8095b7d16a807\n"
    }
  ],
  "next": "3df8dc58b2b5b1f60d45793e6a7c1f51a2fd2383"
}
