)]}'
{
  "log": [
    {
      "commit": "736557c5105c2bc338917ff4b3b668bceeb86c0d",
      "tree": "b911a386d7dfd48a6c9a027f728a7b905adbbfb8",
      "parents": [
        "d0accefc0529873ea5d1724330ad995b26f372c0",
        "eaadc9d4266c2c20274d9d4f4a8ad55c48e155f5"
      ],
      "author": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Mon Oct 07 19:09:43 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 07 19:09:43 2019 +0000"
      },
      "message": "Merge changes from topic \"fscrypt-key-mgmt-improvements\"\n\n* changes:\n  init/fscrypt_init_extensions: support setting v2 encryption policies\n  fs_mgr_fstab: support specifying encryption policy version in fstab\n"
    },
    {
      "commit": "72d249143de1b878606f334ba9ad2e52024a746f",
      "tree": "68746a548d9be5ab7bb9159d3e19dff5e0d8e4c7",
      "parents": [
        "36749bd6d08e55b46cc65f35ee8dc0f83f3c508c"
      ],
      "author": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Oct 04 16:45:56 2019 +0100"
      },
      "committer": {
        "name": "Nikita Ioffe",
        "email": "ioffe@google.com",
        "time": "Fri Oct 04 16:45:56 2019 +0100"
      },
      "message": "Make init.updatable_crashing a read/write property\n\nThis property will need to be reset during userspace reboot, so it can\u0027t\nbe a read-only property anymore.\n\nTest: builds\nBug: 135984674\nChange-Id: I4e079b537cb5c725ac0b652804fdc801a6facfcf\n"
    },
    {
      "commit": "5fcc2b5d71adf428c28bbfe570d467ee7984120f",
      "tree": "23686d40249c966f9cb85e1a561f9dd2c151ac0b",
      "parents": [
        "58ae8d47801e17882b24231b241f9496952a28b4"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Oct 01 13:59:56 2019 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Oct 03 14:26:01 2019 -0700"
      },
      "message": "Convert SnapshotStatus to proto\n\nAlso, add a \"name\" field to SnapshotStatus, and delete\nthe \"name\" arg from CreateSnapshot / WriteSnapshotStatus.\nReadSnapshotStatus will warn if the name mismatches from\nthe file name, and auto-correct it.\n\nTest: libsnapshot_test\n\nChange-Id: I725cf39c07684b100b140a8a21ea9d23ab9d2241\n"
    },
    {
      "commit": "1a191bf54d4a77edd0fc5203141ab67a84936e62",
      "tree": "f0457239c8f073d4037b5177f3464c770fdd968c",
      "parents": [
        "2becdb6579a51ee421efea9c173b557e7af6cb67"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Wed Oct 02 16:23:32 2019 +0800"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Wed Oct 02 09:24:56 2019 +0000"
      },
      "message": "Support loading system_ext_property_contexts\n\nCommit I27dd391fc06a3c78e88a65c7931c84de1699f157 makes property_service\nno longer load selinux property_contexts by function\nselinux_android_prop_context_handle.\n\nSo we should load property_contexts from /system_ext as well in\nproperty_service.cpp.\n\nBug: 137712473\nBug: 141871131\nTest: `adb shell getprop -Z` to check system_ext_property_contexts is loaded\nChange-Id: I49c5c725784c0d598062ae356be6226446f4942a\n"
    },
    {
      "commit": "eaadc9d4266c2c20274d9d4f4a8ad55c48e155f5",
      "tree": "99c31de8747ba370c06f1bcdd3511f29ce57dc6a",
      "parents": [
        "d964376a927a5210f7bb7e80ca738b05b65b8d87"
      ],
      "author": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Fri Sep 13 10:54:53 2019 -0700"
      },
      "committer": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Mon Sep 30 10:27:38 2019 -0700"
      },
      "message": "init/fscrypt_init_extensions: support setting v2 encryption policies\n\nSupport setting v2 encryption policies on init-created directories.  The\npolicy version to set is gotten from a new field in\n/data/unencrypted/mode, which is the file that\u0027s used to pass the\nencryption options from vold to init.\n\nAlso don\u0027t bother falling back to defaults if fields are missing from\nthis file, since it\u0027s re-written on every boot by vold.\n\nBug: 140500999\nTest: tested as series; see If64028d8580584b2c33c614cabd5d6b93657f608\nChange-Id: Ia9c5d4b80199686799e3ac80de78a50ed3bdabf4\n"
    },
    {
      "commit": "34aba6a690811dac48568fe9679e895b80bcb069",
      "tree": "796ee541da9e98b013f42a7a5f3d879b7057707e",
      "parents": [
        "3699dbe2e005334b49dffd4759df1fd13688ebef",
        "f016f256b5c86ddf74705c3d4614c52abe6a5ca6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Sep 28 00:28:57 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Sep 28 00:28:57 2019 +0000"
      },
      "message": "Merge \"Separate system_ext_sepolicy.cil out of system sepolicy\""
    },
    {
      "commit": "3699dbe2e005334b49dffd4759df1fd13688ebef",
      "tree": "16b5ad2f1a319d786e0745f4bc82a1f6cc2ce46a",
      "parents": [
        "aef269f11bc97b19aef4f0022a0e7491af988e31",
        "9328021ce7ba61759f917f9de4d4b0eb705e7854"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 27 15:31:42 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 27 15:31:42 2019 +0000"
      },
      "message": "Merge \"init: add tips for debugging linker errors when launching init services\""
    },
    {
      "commit": "aef269f11bc97b19aef4f0022a0e7491af988e31",
      "tree": "f29d5de1d5374fc8ba5d8778871665f9d6bb739b",
      "parents": [
        "e36ae49985769e2df89ff3abbe06c1ce4d1a04bd",
        "3a803eb2d4451d884d2e79f5e624cb4e36873de6"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 27 15:31:04 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 27 15:31:04 2019 +0000"
      },
      "message": "Merge changes from topic \"logwrapper-api-update\"\n\n* changes:\n  Update init/fs_mgr for new logwrapper function\n  logwrap: convert to C++, rename function logwrap_fork_execvp().\n"
    },
    {
      "commit": "9328021ce7ba61759f917f9de4d4b0eb705e7854",
      "tree": "a8a26ad7c51b1719651eb85374a1ca830914d635",
      "parents": [
        "2a62d42704ae00082e266162d0c6093c877b541f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 26 15:24:40 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 26 15:24:40 2019 -0700"
      },
      "message": "init: add tips for debugging linker errors when launching init services\n\nTest: we can see linker errors in dmesg when following these tips\nChange-Id: I86b65e01d06ed7c0b908c4512d55872cd5595eca\n"
    },
    {
      "commit": "f0d17fb50ed749b577998618022b74b184d617b1",
      "tree": "994fa15f81626fae7b38c8547c4e6512fefcc21d",
      "parents": [
        "2a62d42704ae00082e266162d0c6093c877b541f",
        "92fd3caff7073572ef7a16d87d7f38a0e68f9f96"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 26 17:56:53 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 26 17:56:53 2019 +0000"
      },
      "message": "Merge changes from topic \"remove_ashmemd\"\n\n* changes:\n  libcutils: route to /dev/ashmem\u003cboot_id\u003e instead of ashmemd\n  ueventd: duplicate /dev/ashmem\n"
    },
    {
      "commit": "3a803eb2d4451d884d2e79f5e624cb4e36873de6",
      "tree": "dddb41c8a0157e6c328331336bb21f4900800ba7",
      "parents": [
        "ff7d067ffadb3e7b6fea59c33a4c314a600faf09"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 25 16:23:50 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 26 10:29:57 2019 -0700"
      },
      "message": "Update init/fs_mgr for new logwrapper function\n\nTest: cuttlefish boots, fsck logs seen\nChange-Id: Icbc01161b44e097be813f4af648fa671739078b9\n"
    },
    {
      "commit": "2a62d42704ae00082e266162d0c6093c877b541f",
      "tree": "3a22de6140bc0e22b4f7839c13e9110acc35d777",
      "parents": [
        "4cbf09549301418e3eb89af38bf217f66c29c7a3",
        "f117f34aed0c63b755194c173769a1c2eafe711a"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 26 14:32:33 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 26 14:32:33 2019 +0000"
      },
      "message": "Merge \"Use libcrypto_static instead of libcrypto\""
    },
    {
      "commit": "4cbf09549301418e3eb89af38bf217f66c29c7a3",
      "tree": "65fc77db9ca2e5cfc0e9d10662e0c805bccf082e",
      "parents": [
        "7d91385cf54c73ce80174ee416e1b492a5fb10e8",
        "2ad47f35a774828c7ea7c4fdb3fd1dcb0a8bc939"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Thu Sep 26 14:24:46 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 26 14:24:46 2019 +0000"
      },
      "message": "Merge \"Must use libdexfile_support_static in a static executable.\""
    },
    {
      "commit": "993d07fc534f96f098af5e385378e165746133fb",
      "tree": "bfd02acf5414b598437c48554888d1f064c410ee",
      "parents": [
        "e7180a796c9368aeacd87a493065174064918de6",
        "f5e872e9e9077bf5c679bf45a4cb32838c38c0c4"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 25 19:56:03 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 25 19:56:03 2019 +0000"
      },
      "message": "Merge changes from topic \"boringssl-kmsg\"\n\n* changes:\n  Redirect boringssl_self_test stdio to kmsg\n  init: add stdio_to_kmsg option\n"
    },
    {
      "commit": "ff89b8d8c28ee19dd94df239018c7142394c5082",
      "tree": "64e571d8faf1e6164fb6760256c1348df8a4dbe2",
      "parents": [
        "03642ad8b88a48fc22d714c9d0e4f2a368d356ac"
      ],
      "author": {
        "name": "Tri Vo",
        "email": "trong@google.com",
        "time": "Tue Sep 24 13:00:43 2019 -0700"
      },
      "committer": {
        "name": "Tri Vo",
        "email": "trong@google.com",
        "time": "Wed Sep 25 12:49:38 2019 -0700"
      },
      "message": "ueventd: duplicate /dev/ashmem\n\nWe want ashmem to only be used via libcutils API, with long-term goal\nbeing deprecation of ashmem with memfd. To do that we route libcutils to\na new source of ashmem fds. We then phase out uses of /dev/ashmem that\ndoesn\u0027t go through libcutils using SELinux.\n\nIn Q, we introduced ashmemd as the source of ashmem fds to libcutils.\nHowever, having a separate process and, consequently, binder hops to\nhandle /dev/ashmem results in performance/memory overhead.\n\nTo address the overhead, replace ashmemd with a duplicate of\n/dev/ashmem. Name it /dev/ashmem\u003cboot_id\u003e, where boot_id is a random\nnumber generated on each boot. This way we make sure that developers\ndon\u0027t accidentally depend on /dev/ashmem\u003cboot_id\u003e, as that name can\u0027t be\nhardcoded.\n\nBug: 139855428\nTest: writing \"add\"/\"remove\" to /sys/class/misc/ashmem/uevent correctly\nadds/removes /dev/ashmem and /dev/ashmem/boot_id\nChange-Id: I36d23116048bfcd99903ba46cc133161835a2cfa\n"
    },
    {
      "commit": "f74b7f575686245075c8bf6048a72af7836cdfb1",
      "tree": "dee0dbaa4168c4cb4897a83a9456f41d2cbee561",
      "parents": [
        "03642ad8b88a48fc22d714c9d0e4f2a368d356ac"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Sep 23 16:16:54 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 24 12:47:14 2019 -0700"
      },
      "message": "init: add stdio_to_kmsg option\n\nSome services are not native android services and therefore don\u0027t log\nvia the normal mechanisms.  This gives developers an option to have\ntheir stdout/stderr logs sent directly to kmsg.\n\nTest: see test prints to kernel log\nChange-Id: I7973ea74d5cab3a90c2cd9a3d5de2266439d0c01\n"
    },
    {
      "commit": "2ad47f35a774828c7ea7c4fdb3fd1dcb0a8bc939",
      "tree": "b5a6b1cb5ecc103ba42c3c2f4758e0dfae49bdf0",
      "parents": [
        "5cdf2ef3103d9f320a833070f23ab69d330f9da6"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Tue Sep 24 17:36:30 2019 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Tue Sep 24 17:36:30 2019 +0100"
      },
      "message": "Must use libdexfile_support_static in a static executable.\n\nThe other one compiles in dlopen() calls that won\u0027t work.\n\nTest: Build \u0026 boot\nBug: 141485154\nChange-Id: I8ab697cfbe41bd21ad47655e47a0218d52738b58\n"
    },
    {
      "commit": "513c989908e189520534fd37c455b010374e6e4b",
      "tree": "7de4aae9793a9edfa84418b878450133322c6bab",
      "parents": [
        "f08e28e440a60736bc2ce4b044f3c771339fe1eb"
      ],
      "author": {
        "name": "lijiazi",
        "email": "lijiazi@xiaomi.com",
        "time": "Tue Sep 24 17:14:32 2019 +0800"
      },
      "committer": {
        "name": "lijiazi",
        "email": "lijiazi@xiaomi.com",
        "time": "Tue Sep 24 17:36:45 2019 +0800"
      },
      "message": "Uevent: remove useless dir\n\nThere are no uevent fils in these dirs, so there\u0027s no need to\ntraverse these dirs.\n\nTest: manual\n\nChange-Id: I57b82846ad863952d8717e6c3ab80c1e243ee4f8\nSigned-off-by: lijiazi \u003clijiazi@xiaomi.com\u003e\n"
    },
    {
      "commit": "e6d71689bb40f8d496c9594d49e9313029af3f75",
      "tree": "aff4fa5a1099d85e7784464fc8b4fa97cc76dc91",
      "parents": [
        "e71efc3dc4976ff7f2dca39efae83f30e85ae3b9",
        "1b094939e500d6c22e3235f3d1745a5ebf3ba564"
      ],
      "author": {
        "name": "Howard Chen",
        "email": "howardsoc@google.com",
        "time": "Sat Sep 21 02:48:37 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Sep 21 02:48:37 2019 +0000"
      },
      "message": "Merge \"Mount multiple DSU partitions when present.\""
    },
    {
      "commit": "03642ad8b88a48fc22d714c9d0e4f2a368d356ac",
      "tree": "44768c811e6ef6ff1210f897ab1937df3b68bc6e",
      "parents": [
        "89562f11c8f85857cb4260078849737c51e51bfb",
        "5241d10049f0d93c0123556a72c64b8b322dfba1"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 20 14:59:58 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 20 14:59:58 2019 +0000"
      },
      "message": "Merge \"init: create sockets before forking\""
    },
    {
      "commit": "f016f256b5c86ddf74705c3d4614c52abe6a5ca6",
      "tree": "69d3983d3f2ccd48f64cd501848009c1c4e00125",
      "parents": [
        "c00229c34a86ea06054a56566d6b89528f4cf3c8"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Wed Aug 28 17:56:51 2019 +0800"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Fri Sep 20 18:20:21 2019 +0800"
      },
      "message": "Separate system_ext_sepolicy.cil out of system sepolicy\n\nCurrently system sepolicy can be extended via:\n  - BOARD_PLAT_PUBLIC_SEPOLICY_DIR\n  - BOARD_PLAT_PRIVATE_SEPOLICY_DIR\n\nTo support having a single shared core system sepolicy, those\ncustomization should be moved to the newly added system_ext partition.\n\nSystem-ext-specific sepolicy files will be installed into\n/system_ext/etc/selinux/*. system_ext_sepolicy.cil is merged into\nprecompiled_sepolicy at build-time. In case precompiled_sepolicy can\u0027t\nbe used (e.g. system-only-ota), the init will merge this file with\nthe rest of the sepolicy at runtime.\n\nBug: 137712473\nTest: boot aosp_crosshatch with system_ext_sepolicy.cil\nTest: boot aosp_crosshatch without system_ext_sepolicy.cil\nChange-Id: Ib37622271b559d65462de99ff424be831004508a\n"
    },
    {
      "commit": "1b094939e500d6c22e3235f3d1745a5ebf3ba564",
      "tree": "c4f2ec8e0f85b83cee309aa7b139ac2987c666c3",
      "parents": [
        "7922a446371add87d4aa53b33f4fb1a633568f64"
      ],
      "author": {
        "name": "Howard Chen",
        "email": "howardsoc@google.com",
        "time": "Wed Sep 11 18:22:01 2019 +0800"
      },
      "committer": {
        "name": "Howard Chen",
        "email": "howardsoc@google.com",
        "time": "Fri Sep 20 14:10:52 2019 +0800"
      },
      "message": "Mount multiple DSU partitions when present.\n\nThere might be partitions like product or system_ext in addition\nto the system partition. Those partitions can contain dependencies\nrequired by the system so we need to make the init to recognize\nthese partitions and mount them accordingly.\n\nBug: 140092208\nTest: gsi_tool install \u0026 reboot\nChange-Id: Ie5ef063292c3656e79cce9f887f23a8faa1ba2be\n"
    },
    {
      "commit": "5241d10049f0d93c0123556a72c64b8b322dfba1",
      "tree": "473953479670d380bdd60379ad091f7c28d7f3a4",
      "parents": [
        "bac7609c48c4fbe3440caf7375eec37cfefc46c5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 10 14:20:35 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 19 16:10:30 2019 -0700"
      },
      "message": "init: create sockets before forking\n\nThere is a race condition with Service::Start and socket creation.\nSince socket creation currently happens after the fork(), it\u0027s\npossible that init can continue executing other commands before the\nsocket is created.  If init starts another service that relies on that\nsocket, it isn\u0027t guaranteed to be available.\n\nParticularly, we\u0027ve seen this with hwservicemanager starting after\nlogd, but hwservicemanager\u0027s logs sometimes not showing up.\n\nBug: 140810300\nTest: boot and logging functions correctly\n\nChange-Id: Ib2932e836d345830cd38f3b556598508fd953058\n"
    },
    {
      "commit": "2436e6b15a9f5f03392e942d9caa98ab69ed36d1",
      "tree": "60dbb1d904da040f61b263c999bdb9e7e12826aa",
      "parents": [
        "bac7609c48c4fbe3440caf7375eec37cfefc46c5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 19 11:16:19 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Sep 19 14:05:56 2019 -0700"
      },
      "message": "init: reboot immediately if /data isn\u0027t mounted\n\nAll of the logic in reboot.cpp is meant to safely shutdown services,\nsafely unmount emulated RW file systems, then finally unmount the\nremaining RW file systems, particularly /data.  If /data hasn\u0027t been\nmounted, then none of this logic is required.\n\nRunning this logic caused a lock up when shutting down blueline from\nearly-init.  Vold, or potentially a related HAL, locked up during the\nShutdownVold() calls.  debuggerd separately locked up in the watchdog\nthread.\n\nTherefore, this change immediately reboots if /data is not mounted.\nIt also removes the lines to call into debuggerd.  debuggerd will not\nrun due to SELinux in any case, so it can only be used when hands-on\ndebugging a device.\n\nBug: 141082587\nTest: shutdown with /data mounted continues as normal\nTest: shutdown from early-init immediately shuts the device down\nChange-Id: I79c72346b17c7dfe57e955d9739bcaf559badc14\n"
    },
    {
      "commit": "14c2472734ce9f92978b7193a6877c5c2ceba200",
      "tree": "4390ac8fa516766511a10c6742ca0bb17ada90ab",
      "parents": [
        "b0321c1de178ac2dfd05fb6537e0e63f7eecf87e"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 18 13:47:19 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 18 14:02:14 2019 -0700"
      },
      "message": "init: degeneralize subcontext init into only vendor_init\n\nThis code is more generic than it needs to be and one of the side\neffects is that an extra init process is forked for odm_init, despite\nit having the same context as vendor_init.  I don\u0027t think anything is\ngoing to change regarding that soon, so this change stops forking that\nextra process to save its memory and simplifies the code overall.\n\nBug: 141164879\nTest: init still uses vendor_init for vendor_scripts\nTest: init unit tests\nTest: init only has one subcontext process\nChange-Id: I0d224455604a681711e32f89fb20132378f69060\n"
    },
    {
      "commit": "f117f34aed0c63b755194c173769a1c2eafe711a",
      "tree": "305b910a06e78b4077d441e518b3327598cd9e7f",
      "parents": [
        "f3a5ab8b1d814706784b261cd3cdfa877346a1e9"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Sep 18 11:04:35 2019 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Sep 18 11:04:35 2019 -0700"
      },
      "message": "Use libcrypto_static instead of libcrypto\n\nReplace libcrypto with libcrypto_static, which can be protected through\nvisibility to ensure only modules that don\u0027t affect FIPS certification\ncan use it.\n\nBug: 141248879\nTest: m checkbuild\nChange-Id: I5f0b9acfb57f68570f6f58f2395f2bb1bc015365\n"
    },
    {
      "commit": "0e70ce26b8e6d599739d1b30b6a6c04986ff88ab",
      "tree": "748d408870a5b3a7d54832b9a14dc01a11f7b7f1",
      "parents": [
        "7509fca99a0b6fa2f3ceb9d2e84710dc574bcdfe",
        "1cfcee0e4de6860560dc2da785dc0b6928eadd66"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Sep 18 00:35:55 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 18 00:35:55 2019 +0000"
      },
      "message": "Merge \"init: Make sure /dev/block/by-name/userdata is created in snapshot mode.\""
    },
    {
      "commit": "f3a5ab8b1d814706784b261cd3cdfa877346a1e9",
      "tree": "8cf30fe4a4cf5eea624bb360467ebdeb115ff040",
      "parents": [
        "e5e9ee41d9de64db195095c2ed7a2474c2374a34",
        "4e6bf2510f635fc0fb046eeda8a0a1d5a96a0412"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 17 20:21:09 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 17 20:21:09 2019 +0000"
      },
      "message": "Merge \"Remove the global seccomp option.\""
    },
    {
      "commit": "1cfcee0e4de6860560dc2da785dc0b6928eadd66",
      "tree": "7566724a01cbc718a89006ae1dbeaebba68bef55",
      "parents": [
        "116d2ff50367ccf332fde1dfa4fcbfcc1173aabf"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Sep 16 18:42:10 2019 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Tue Sep 17 13:19:22 2019 -0700"
      },
      "message": "init: Make sure /dev/block/by-name/userdata is created in snapshot mode.\n\nWhen userdata is used to store COW devices, we need to ensure we\u0027ve\ngenerated uevents for it.\n\nThis patch also refactors FirstStageMount to pass required devices\nthrough arguments rather than a member variable.\n\nBug: 140761481\nTest: manual test\nChange-Id: Ie5e1c9699f084da5467a758eea41c7907fecc5ca\n"
    },
    {
      "commit": "570d20d2ac875198416dff280b7a4b7adaacac81",
      "tree": "1a8297dc4e3585cc6dfee2886a61fb65e7679271",
      "parents": [
        "a550e7f4128a4e5747950d239fd41cbbc436649b"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Wed Sep 11 15:02:44 2019 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Fri Sep 13 15:50:23 2019 -0700"
      },
      "message": "Create /data/per_boot\n\nBug: 140882488\nTest: Booted twice, checked logs to ensure encryption\n    is different each time, adb created files in directory.\nChange-Id: I44f746acd1040f7baa9123d4824ba39b194f287b\n"
    },
    {
      "commit": "a550e7f4128a4e5747950d239fd41cbbc436649b",
      "tree": "fccc5c538fcde5f0eb8b8a6f2bcb2e84e286996c",
      "parents": [
        "101588127caf2c8e6763c79968d1ef0771273d06",
        "60971e6ce22bd4fee531dc72875acb4b913f69a7"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Sep 13 19:26:49 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 13 19:26:49 2019 +0000"
      },
      "message": "Merge \"init: add reboot_on_failure service option\""
    },
    {
      "commit": "530d8f1d48248aa82bf21c334f730aaa706d6fc4",
      "tree": "38cbacbfbe2e82e8aebffbbe03120d90c14766c9",
      "parents": [
        "6f735df0d1268cc976e5834c3cb1cc9e6fe9395d",
        "58505923e52df282a978d49798011c7a2ee1d9e2"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 13 16:56:06 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 13 16:56:06 2019 +0000"
      },
      "message": "Merge \"Set LOCAL_INJECT_BSSL_HASH for init_first_stage\""
    },
    {
      "commit": "60971e6ce22bd4fee531dc72875acb4b913f69a7",
      "tree": "aa80b358efb90ac48551640a81e29dc0d52aefad",
      "parents": [
        "6f735df0d1268cc976e5834c3cb1cc9e6fe9395d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 10 10:40:47 2019 -0700"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 13 16:48:35 2019 +0100"
      },
      "message": "init: add reboot_on_failure service option\n\nThis replaces the recently added `exec_reboot_on_failure` builtin, since\nit\u0027ll be cleaner to extend service definitions than extending `exec`.\nThis is in line with what we decided when adding `exec_start` instead\nof extending `exec` to add parameters for priority.\n\nTest: `exec_start` a service with a reboot_on_failure option and watch\n      the system reboot appropriately when the service is not found and when\n      the service terminates with a non-zero exit code.\n\nChange-Id: I332bf9839fa94840d159a810c4a6ba2522189d0b\n"
    },
    {
      "commit": "58505923e52df282a978d49798011c7a2ee1d9e2",
      "tree": "d87d2ad2f2d106d3664a1876a4dda37127d8e51d",
      "parents": [
        "bda0554bb2b7827602834ea94430b58274bbbd09"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 05 15:32:36 2019 -0700"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 13 03:31:42 2019 +0100"
      },
      "message": "Set LOCAL_INJECT_BSSL_HASH for init_first_stage\n\ninit_first_stage is built in Make and statically links libcrypto,\nso it needs to set LOCAL_INJECT_BSSL_HASH to make the FIPS self\ntest pass.\n\nBug: 137267623\nTest: m checkbuild\nChange-Id: Icd8ec07b731228a162db9a13d7304bf1d73127aa\n"
    },
    {
      "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": "4e6bf2510f635fc0fb046eeda8a0a1d5a96a0412",
      "tree": "a60bf8c76b7bba573fdf1a6977e0d5d2684c1cb9",
      "parents": [
        "34f25373933d7c092cf713bc60b48a381fdfe0bc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 04 20:53:01 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 04 21:16:26 2019 -0700"
      },
      "message": "Remove the global seccomp option.\n\nAdded in af1a9bfb8f4461ba9a28e4df62a55b054d1eebca, but it\u0027s never been\nused in practice because of the performance impact, and it\u0027s incompatible\nwith our ability to add new system calls via a bionic module update\nbecause it defaults to disabling all unknown syscalls, and init will\nstill be using the non-updated bootstrap libc from when it first shipped.\n\nTest: treehugger\nChange-Id: I8e396675fcfaf0218a92f464d15e613f43319305\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"
    }
  ],
  "next": "f7c2bfee083e9c9477255feb62d9307f97199f85"
}
