)]}'
{
  "log": [
    {
      "commit": "b104c502e1db80eda9751b0cba19e2e24fc0c3c0",
      "tree": "0bbf355ae852344b77770cffcc7563d090165ba6",
      "parents": [
        "16017b3fbbb6ada5cd22ca38e80776981800e036"
      ],
      "author": {
        "name": "caozhiyuan",
        "email": "cao.zhiyuan@zte.com.cn",
        "time": "Sat Nov 26 21:14:07 2016 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 20:19:17 2016 +0000"
      },
      "message": "init: Fix sync issue on property trigger.\n\nThis issue reproduces in the following senario.\n 1. (\"\", \"\") is added to queue;\n 2. property_triggers_enabled is set to 1;\n 3. user defined property is triggered, like sys.usb.config\u003dadb;\n 4. (\"sys.usb.config\", \"adb\") is added to queue;\n 5. main loop interpret (\"\", \"\") and queue all current triggers to execution,\n    so (\"sys.usb.config\", \"adb\") is queued for execution for the first time.\n 6. main loop interpret (\"sys.usb.config\", \"adb\"), it is queued for\n    execution for a second time.\nThe second time makes ASIT fail.\n\nBug: http://b/28218187\nChange-Id: I230e175e0dca8989f1e5bd812398da90082d0ec1\nSigned-off-by: caozhiyuan \u003ccao.zhiyuan@zte.com.cn\u003e\n"
    },
    {
      "commit": "102daa30a3ce597af1d9b2bb77205b16d0311cad",
      "tree": "5a20c4dbc0ceddd24a66b80c8583623eb043ab9b",
      "parents": [
        "3bde05d928fb74a75144ae0eeaa25891c91234d1"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Nov 18 14:58:40 2016 -0800"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Nov 18 15:09:18 2016 -0800"
      },
      "message": "Revert \"Revert \"init: create /dev/urandom, /dev/random in first stage.\"\"\n\nThis reverts commit 4c8a76e250fbc04210cb68324ff167a019591574.\n\nTest: booted angler-userdebug\n\nChange-Id: I2257a44b7cf624065e5653754062a117f3e44c98\n"
    },
    {
      "commit": "a8d8434c42b27f0186be7ecd78c2acc9d459b068",
      "tree": "897dbc3e29e705d582a9d1fbf89eece5fc4b4da3",
      "parents": [
        "e631e470e059d84388f3aacfe11a3fa60a584ba7"
      ],
      "author": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Mon Nov 14 15:40:18 2016 -0800"
      },
      "committer": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Wed Nov 16 22:27:45 2016 +0000"
      },
      "message": "Add flags to restorecon_recursive to traverse filesystems\n\nUse to solve the problem of tracefs conditionally being mounted\nunder debugfs and needing restorecon\u0027d without boot performance\npenalty.\n\nAlso move skip-ce to a flag for consistency.\n\nTest: Check that trace_mount has correct attributes after boot\nBug: 32849675\nChange-Id: Ib6731f502b6afc393ea5ada96fa95b339f14da49\n"
    },
    {
      "commit": "9605a945f7a497c0307b512b9cd762f2d23973ca",
      "tree": "d78bab11c11aba3c79c6b66a944699fb591a39dd",
      "parents": [
        "8cbc89527cbeb677d24698aca6d5302764db1775"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 10 17:43:47 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Nov 12 11:17:40 2016 -0800"
      },
      "message": "init start time tracking.\n\nWith this change, init sets a property \"init.start\" to show the\nCLOCK_BOOTTIME time at which init itself started, and for each service\nan \"init.svc.\u003cname\u003e.start\" property to show the CLOCK_BOOTTIME time at\nwhich that service was most recently started.\n\nThese times can be used by tools like bootstat to track boot time.\n\nAs part of this change, move init over to std::chrono. Also, rather than\nmake the command-line argument handling more complex, I\u0027ve switched to\nusing an environment variable for communication between first- and\nsecond-stage init, and added another environment variable to pass the\nstart time of the first stage through to the second stage.\n\nBug: http://b/32780225\nTest: manual\nChange-Id: Ia65a623e1866ea688b9a5433d6507926ce301dfe\n"
    },
    {
      "commit": "995560919cb080045c0530b687a7394c04993cbe",
      "tree": "6326cd7c6e3ecfbd175858b2a91c995b715cae0d",
      "parents": [
        "fff16693415e04705b4587b246f5118a18a89678",
        "80960d2a9a6e15931d946cc826dcb3d5bf68ca4f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 31 19:13:34 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 31 19:13:35 2016 +0000"
      },
      "message": "Merge \"init: Put init in group AID_READPROC\""
    },
    {
      "commit": "80960d2a9a6e15931d946cc826dcb3d5bf68ca4f",
      "tree": "2ed410a301b974072a3961315c4a0f11192fae35",
      "parents": [
        "cd368c640a68ac247f2ee32fd433c9522675c187"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Oct 29 12:20:00 2016 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Oct 29 12:20:00 2016 -0700"
      },
      "message": "init: Put init in group AID_READPROC\n\nbootcharts currently only show root\u0027s processes, which isn\u0027t very\nuseful. To investigate and track boot duration issues, we need a way for\ninit to see all the pids. Add init to GID 3009 (aka AID_READPROC)\n\nEnsure that init\u0027s children don\u0027t inherit this GID by always clearing\nsupplementary group IDs on fork.\n\nBug: 32506197\nTest: Device boots and /proc/1/status says init is in gid 3009\nTest: zygote starts and the Group: line in /proc/ZYGOTEPID/status is empty\nChange-Id: Iba90717aaa591f1d6030a379a272aee003600c0a\nNot-Tested: bootchart actually works. Speculative fix.\n"
    },
    {
      "commit": "313b35238214c7b79b95cc08f38ba3378c53c445",
      "tree": "cab9c634e71f559aae4e889177eec70fb1db8349",
      "parents": [
        "dba750e0e0d0cc996c70d7699cd35e34226565de"
      ],
      "author": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Fri Oct 28 12:22:32 2016 -0700"
      },
      "committer": {
        "name": "Wei Wang",
        "email": "wvw@google.com",
        "time": "Fri Oct 28 18:05:36 2016 -0700"
      },
      "message": "Fix log for early_mount\n\nTest: on device\nBug: 32508724\nChange-Id: Ib2908b19f6068012d5597ac4cc590ffb0c063b75\n"
    },
    {
      "commit": "4c8a76e250fbc04210cb68324ff167a019591574",
      "tree": "5d47c30703980bb1c5e14028b9fceedd43c66e70",
      "parents": [
        "ab4fbe1b4fe1c7581339e384929851a5e6b944b7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 02 08:39:39 2016 +0000"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 02 08:39:39 2016 +0000"
      },
      "message": "Revert \"init: create /dev/urandom, /dev/random in first stage.\"\n\nThis reverts commit ab4fbe1b4fe1c7581339e384929851a5e6b944b7.\n\nBug: http://b/31251721\nChange-Id: I43e68d1bd819d0f9f7d107865a33ec892975d956\n"
    },
    {
      "commit": "ab4fbe1b4fe1c7581339e384929851a5e6b944b7",
      "tree": "c477397297c87a02bccc384b9238ee4d20778475",
      "parents": [
        "3f3ea50828c190bfaed428986bea453dd5dbb998"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 31 15:32:23 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 31 15:36:37 2016 -0700"
      },
      "message": "init: create /dev/urandom, /dev/random in first stage.\n\nCreate /dev/random and /dev/urandom in the first stage, so that when we\nreexec, arc4random is available for libc initialization.\n\nBug: http://b/29622562\nChange-Id: I5b2071539a17eec609faac91dc28b08eba5ff89b\n"
    },
    {
      "commit": "99c4a8a6b3852c33828b03cbd0aef0c625957a39",
      "tree": "33ad8010ef491bd0c4a8937ca1046c81d58b0009",
      "parents": [
        "7a746f3a6850198b7f1cad7f22befe9ca48b47fd"
      ],
      "author": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Mon Feb 01 15:07:40 2016 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Wed Aug 17 17:21:35 2016 +0800"
      },
      "message": "Mount /vendor and /odm early\n\nRight now these two partitions are mounted in the fs stage of the init\nprocess. As a result, many vendor/ODM files needed earlier in the boot\nprocess (e.g., init.\u003chardware\u003e.rc, fstab.\u003chardware\u003e.rc,\nuevent.\u003chardware\u003e.rc, SELinux policy files etc) can only live on the root\npartition.\n\nTo prevent vendors/ODMs from polluting the root partition, this patch makes\nit possible to mount the vendor and ODM partitions in the first stage of the\ninit process. The fstab info of both partitions to be mounted early is\ncomposed from new kernel cmdline arguments android.early.prefix and\nandroid.early.fstab.\n\nFor example, with:\nandroid.early.prefix\u003d/sys/devices/1010000.msdc0/mmc_host/mmc0/mmc0:0001/block/mmcblk0/\nandroid.early.fstab\u003dmmcblk0p10+/odm+ext4+ro+verify\\nmmcblk0p09+/vendor+ext4+ro+verify\n\nthe final fstab string will be:\n/sys/devices/1010000.msdc0/mmc_host/mmc0/mmc0:0001/block/mmcblk0/mmcblk0p10 /odm ext4 ro verify\n/sys/devices/1010000.msdc0/mmc_host/mmc0/mmc0:0001/block/mmcblk0/mmcblk0p09 /vendor ext4 ro verify\n\nThe android.early.prefix is optional. When it is missing, the final fstab\nstring will be directly converted from android.early.fstab.\n\nThis patch also makes sure that the early mounted partitions are dm-verity\nenabled so that they are trust worthy to store system files.\n\nBUG\u003d27805372\n\nChange-Id: I3cf32482a5ec65445ba3aedab2164c7ba8f12694\n"
    },
    {
      "commit": "35f5d04620a3221b9f57194ab0239c7c7ba5a726",
      "tree": "eaebe09b53c2aa953f33cb511ccffaf748412099",
      "parents": [
        "00a4ee0f46d36aff90fa120619f4dc6f4a837930"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 26 09:32:33 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 26 09:32:33 2016 -0700"
      },
      "message": "Fix early init logging.\n\nRemove the /dev/__kmsg__ workarounds (which can then be removed\nfrom sepolicy), and fix confusion in the translation between\nandroid-base logging and kernel logging priorities (in particular,\nwhere \u0027notice\u0027 comes in the hierarchy).\n\nBug: http://b/30317429\nChange-Id: I6eaf9919904b6b55bc402c20bf1a4ae269014bc7\nTest: adb shell dmesg | grep init\n"
    },
    {
      "commit": "d2e74db475e095bc0386f89b042dc7e7474b797a",
      "tree": "1175ce2a1082cb4857547669af33de0cdc8e26bd",
      "parents": [
        "a17427cb1e9caaeb4dde7184b05dfa4b3b1f7172"
      ],
      "author": {
        "name": "Amit Pundir",
        "email": "amit.pundir@linaro.org",
        "time": "Wed Jun 29 19:00:00 2016 +0530"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 15 15:01:43 2016 -0700"
      },
      "message": "init: select usb gadget controller at run time\n\nRight now we set sys.usb.controller property in init.$platform.usb.rc\nto enable ConfigFS gadgets.\n\nLet system detect and set UDC driver name from /sys/class/udc instead.\n\nChange-Id: I99ad49d24dc53b543c5573e209bf00d6c2d91dd4\nSigned-off-by: Amit Pundir \u003camit.pundir@linaro.org\u003e\n"
    },
    {
      "commit": "171a829c39d9298432505fe943ad7128aeefe2b2",
      "tree": "96ecfe65e6910e41db3867bda7967d50735bbf25",
      "parents": [
        "b0d062a497bee38ff2a7c6c965e29af4199c3fe0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 29 16:16:41 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 29 16:16:41 2016 -0700"
      },
      "message": "Make klog_fd thread-safe and make klog_init a no-op.\n\nI\u0027ll come back and remove klog_init when I\u0027ve removed other calls to it.\n\nChange-Id: Iad7fd26d853b4ddc54e9abd44516b6f138cbbfcb\nTest: booted N9, looked at \"adb shell dmesg\" output.\n"
    },
    {
      "commit": "f86b5a6b90619e02d1d034ef7b0adc3b439f4abb",
      "tree": "1348657947a4a875d740dc1df134ae9150ef53d6",
      "parents": [
        "90db709a2fbccefcee82e54289cd517cd8cb99b5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 24 15:12:21 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 27 08:11:31 2016 -0700"
      },
      "message": "Move init to libbase logging.\n\nChange-Id: Ibfbefeff587a69e948978a037c555fd12a5ade6a\n"
    },
    {
      "commit": "01e5a6c97140447461aa17c972aa82afe8fbb609",
      "tree": "f6153b9f937e18c7b7ea5c96f6a3fd243912af7c",
      "parents": [
        "cfdd57eed828b0144ef592bde4d441986d4dfb9c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 24 09:13:51 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 24 09:13:51 2016 -0700"
      },
      "message": "Remove more obsolete MTD stuff.\n\nBug: http://b/29250988\nChange-Id: Ic2d0514fcdbe26526e87bc681b71efcc90eda678\nTest: still builds.\n"
    },
    {
      "commit": "bdeac39a42c1b9c7195ada1c30fe12f94314490f",
      "tree": "a4af07cd62a5f9119caa6dd8344c1cfec21ee27b",
      "parents": [
        "52eb93ca57fa2f93be7e762392abb93c0b4c9210"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 12 15:38:27 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 13 07:56:51 2016 -0700"
      },
      "message": "Remove undocumented functionality from init.\n\n(cherry-pick of a3cc6026301db08285028c760af2665a66b3cc44.)\n\nBug: http://b/28151340\nChange-Id: I5360502c79d9113a13055bf017b39c099033e947\n"
    },
    {
      "commit": "c8f026fc9c80ef2ae3aa0a41f55f7670894bb675",
      "tree": "e29a4bba2d64a188549e406a8eb462946db21368",
      "parents": [
        "abdb758ef63d79b5b893838d22598bd5924f8f9d"
      ],
      "author": {
        "name": "Daniel Cashman",
        "email": "dcashman@google.com",
        "time": "Fri Mar 25 17:42:10 2016 +0000"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Fri Mar 25 10:45:20 2016 -0700"
      },
      "message": "Revert \"Set mmap_rnd_bits to maximum value.\"\n\nPrebuilt kernels have not been updated with the requisite patches.\n\nThis reverts commit c819e78e7ff30630503ba4d5fa7cd3276fe51827.\n\nChange-Id: I8e63373a9b8a1e5adcb2471dfe43bde28e3f8e65\n"
    },
    {
      "commit": "39caeb5beead88465b029be8c27957f0a58aefa0",
      "tree": "15af82e129f05248ba0cc40d2ce6e5daff7834cc",
      "parents": [
        "8108b80d556f7fbd501a1018219dfa7d02cff96a"
      ],
      "author": {
        "name": "Kees Cook",
        "email": "keescook@google.com",
        "time": "Tue Mar 22 16:45:11 2016 -0700"
      },
      "committer": {
        "name": "Kees Cook",
        "email": "keescook@google.com",
        "time": "Wed Mar 23 10:00:11 2016 -0700"
      },
      "message": "init: improve mmap ASLR failure reporting\n\nThis should help people track down the reason for entropy setting\nfailures.\n\nBug: 27681085\nChange-Id: I6bde342ca0215e32c1f851365a1723630c7d4372\n"
    },
    {
      "commit": "754dd9660f141229c1b6a64ef27128fbaaecfb5a",
      "tree": "7869072d3741a296d747202aa15bbf6c3ebb5fcf",
      "parents": [
        "3396b4b665ab9a4db83b31ee001e3a32906698e9"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Tue Mar 22 16:04:26 2016 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Tue Mar 22 16:15:24 2016 -0700"
      },
      "message": "init: Fix typo.\n\nBug: 27681085\nChange-Id: I4308435a5b58189852c991d1bec65ed11933566a\n"
    },
    {
      "commit": "3396b4b665ab9a4db83b31ee001e3a32906698e9",
      "tree": "c8092b76492d15a98065ff6c91f3388e852c06e6",
      "parents": [
        "c819e78e7ff30630503ba4d5fa7cd3276fe51827"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Tue Mar 22 15:13:42 2016 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Tue Mar 22 15:37:19 2016 -0700"
      },
      "message": "Temporarily add set_mmap_rnd_bits brillo exception\n\n(cherry-picked from internal commit: 69022e03d81e43455cf7c21555314c4d08664311)\nBug: 27794137\nChange-Id: Idc6fc1e208bdb19556173d40215feb66e235c6d6\n"
    },
    {
      "commit": "c819e78e7ff30630503ba4d5fa7cd3276fe51827",
      "tree": "df9e6f394712644cb36db4f11c7a6d9cab2d9099",
      "parents": [
        "80b1b188281b0c89e94cd9c3c3f2b04f007d6b28"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Thu Mar 17 15:01:56 2016 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Tue Mar 22 13:16:26 2016 -0700"
      },
      "message": "Set mmap_rnd_bits to maximum value.\n\nAlso make sure it is above a minimum threshold, else abort.\n\n(cherry-pick of internal commit: 5d36813dc8d3be3f62856cf5147b828a7a8594a7)\n\nBug: 27681085\nChange-Id: Ia1d9583254fd64828092533298a99ec64b8233f7\n"
    },
    {
      "commit": "70daa67062c016eea1a30be2e1de0dcba1d23a13",
      "tree": "b3c4055f181dd02576083cef9ec5df12b5ce0ada",
      "parents": [
        "ba44383197c8d5e1ca6ad32b67837c9aaf7ee224"
      ],
      "author": {
        "name": "Viorel Suman",
        "email": "viorel.suman@intel.com",
        "time": "Mon Mar 21 10:08:07 2016 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 21 08:50:01 2016 -0700"
      },
      "message": "Multiple consoles\n\nThis CL allows enabling of multiple consoles. A service can be\nmapped to a specific console by providing the optional argument,\nIE \"tty0\", to \"console\" service attribute as follows:\n\nservice fbconsole /system/bin/sh\n    class core\n    console tty0\n    disabled\n    user shell\n    group shell log readproc\n    seclabel u:r:shell:s0\n\nBug: None\nChange-Id: I3b24e7f6848bbe5c6475f11334c04ec536e6af88\nTracked-On: https://jira01.devtools.intel.com/browse/BP-289\nSigned-off-by: Viorel Suman \u003cviorel.suman@intel.com\u003e\n"
    },
    {
      "commit": "efc72751729a5ade9e05aba264791bb44e65e7ab",
      "tree": "464c847205df44caf2199d6b9e3e3f922725fb55",
      "parents": [
        "922e151ba2d8e1036849b3882917b5aef2cb431c"
      ],
      "author": {
        "name": "Viorel Suman",
        "email": "viorel.suman@intel.com",
        "time": "Mon Mar 21 10:23:43 2016 +0200"
      },
      "committer": {
        "name": "Viorel Suman",
        "email": "viorel.suman@intel.com",
        "time": "Mon Mar 21 11:21:19 2016 +0200"
      },
      "message": "Revert \"Enable multiple consoles\"\n\nThis reverts commit caafe5c6204bc2066e6201a67ecd7cd1b3f8d015.\n\nBug: None\nChange-Id: Iea2a80003d996ce542393242f87dc658ac6d01c9\nTracked-On: https://jira01.devtools.intel.com/browse/BP-289\nSigned-off-by: Viorel Suman \u003cviorel.suman@intel.com\u003e\n"
    },
    {
      "commit": "caafe5c6204bc2066e6201a67ecd7cd1b3f8d015",
      "tree": "ee1f184b3655bfbfdf739bf1ce1f5e4412fca4ca",
      "parents": [
        "371e7ea170d749489a0eb7085347f58b7be63734"
      ],
      "author": {
        "name": "Viorel Suman",
        "email": "viorel.suman@intel.com",
        "time": "Wed Mar 09 17:50:10 2016 +0200"
      },
      "committer": {
        "name": "Viorel Suman",
        "email": "viorel.suman@intel.com",
        "time": "Thu Mar 17 21:00:15 2016 +0200"
      },
      "message": "Enable multiple consoles\n\nThis CL allows enabling of multiple consoles. The expected format\nof \"androidboot.console\" kernel parameter is a list of available\nconsoles, as follows:\n\n  androidboot.console\u003dtty0:ttyS0\n\nA service can be mapped to a specific console by providing the\noptional argument, IE \"tty0\", to \"console\" service attribute as follows:\n\nservice fbconsole /system/bin/sh\n    class core\n    console tty0\n    disabled\n    user shell\n    group shell log readproc\n    seclabel u:r:shell:s0\n\nBug: None\nChange-Id: I3f8556425c8651bd121995869700f18b23365d55\nTracked-On: https://jira01.devtools.intel.com/browse/BP-289\n"
    },
    {
      "commit": "3d1dff22311bb6b3c01115f0c4400dcdc37c35c3",
      "tree": "3cae0b15d9ee8a3a701159020a8fe72572dc5ed3",
      "parents": [
        "a680117bb55c629f2dd06c3027cbca2e35ff087d"
      ],
      "author": {
        "name": "Janis Danisevskis",
        "email": "jdanis@google.com",
        "time": "Tue Mar 08 18:35:28 2016 +0000"
      },
      "committer": {
        "name": "Janis Danisevskis",
        "email": "jdanis@google.com",
        "time": "Fri Mar 11 17:47:30 2016 +0000"
      },
      "message": "Leftovers of the SELinux policy update mechanism\n\nRemove references to SELinux policy files in /data/security\nfrom libselinux/android.c. In the process all code that is\napparently related to handling an alternate policy and/or\nreloading the policy has been removed.\n\nBug: 26544104\nChange-Id: I47bf76ac3c26c5d71f92a21ffac2b17ba14262ea\n"
    },
    {
      "commit": "3d9e27335926497c82bcfab228b90b84d732780f",
      "tree": "7fe8b0b8c74f4013bfe2bdbcce30bbc912dde8a3",
      "parents": [
        "17741bc85c0570a4f01bf8c945db1cd1b117a19a"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Mar 03 10:40:12 2016 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Mar 03 11:26:24 2016 -0800"
      },
      "message": "Mount selinuxfs when other filesystems are mounted\n\nBe consistent when mounting filesystems, and mount selinuxfs\nat the same time other filesystems are mounted. In particular,\nthis ensures that a /sys/fs/selinux/null is available at early\nboot, avoiding an unnecessary mknod call.\n\nChange-Id: I01e6b3900f48b4cb3f12d8a928e1e95911524252\n"
    },
    {
      "commit": "9e9efcadc5144e465314d30ca7b3db0ec0a2bc57",
      "tree": "ff3a1a7bb2adbb503c7e0f7602c3b2ff25e9aec9",
      "parents": [
        "9729392ffa40ed37aab7fd535c6644d20279bbf0"
      ],
      "author": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Mon Dec 07 12:33:58 2015 +0000"
      },
      "committer": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Wed Dec 09 10:09:11 2015 +0000"
      },
      "message": "init: set ro.boot.flash.locked from ro.boot.verifiedbootstate\n\nIf ro.oem_unlock_supported is specified for the device and it supports\nverified boot, export lock status in ro.boot.flash.locked.\n\nBug: 26039090\nChange-Id: Ie7844aeb458c97944c72d46ea962b9cfb0a7875d\n"
    },
    {
      "commit": "4f71319df011d796a60a43fc1bc68e16fbf7d321",
      "tree": "5e9b64a97edcda3dbb1d40c617bdd9b179deb259",
      "parents": [
        "1efab7acc5d5b69dced70b6d04070d36f7c9632d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "message": "Track rename of base/ to android-base/.\n\nChange-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf\n"
    },
    {
      "commit": "e36a85cdcc93a84a6869fc8fc3fc82e3639d4398",
      "tree": "cc60ebe797feb6304fc6cfe113383f34594bd51d",
      "parents": [
        "a3892504acda9ab280db5ade66c0d961fbd936a6"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Nov 30 16:40:25 2015 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Dec 01 17:47:35 2015 -0800"
      },
      "message": "restorecon /property_contexts\n\n/property_contexts exists before selinux policies are loaded, so we must\nrestorecon before other processes can access it\n\nBug: 21852512\nChange-Id: Ie983caac635eb928ab19eea996a5625f3673de39\n"
    },
    {
      "commit": "2d8f1d4c478b9d921730d3fc9b290315e2ff9f04",
      "tree": "074514fa305f467b1bb08a464078f2e5536fd89a",
      "parents": [
        "892f0e93007dc912f18a09fd281c73adf762277a",
        "c39ba5ae32afb6329d42e61d2941d87ff66d92e3"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Nov 09 20:05:22 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 09 20:05:22 2015 +0000"
      },
      "message": "Merge \"Enable hidepid\u003d2 on /proc\""
    },
    {
      "commit": "c39ba5ae32afb6329d42e61d2941d87ff66d92e3",
      "tree": "a5fca3ab71e1856a75e995c1d8ec81dc55bd56e1",
      "parents": [
        "54b5e85373619a838641d276a840caad284b09b3"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Nov 07 16:52:17 2015 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Nov 09 09:08:46 2015 -0800"
      },
      "message": "Enable hidepid\u003d2 on /proc\n\nAdd the following mount options to the /proc filesystem:\n\n  hidepid\u003d2,gid\u003d3009\n\nThis change blocks /proc access unless you\u0027re in group 3009\n(aka AID_READPROC).\n\nPlease see\n  https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt\nfor documentation on the hidepid option.\n\nhidepid\u003d2 is preferred over hidepid\u003d1 since it leaks less information\nand doesn\u0027t generate SELinux ptrace denials when trying to access\n/proc without being in the proper group.\n\nAdd AID_READPROC to processes which need to access /proc entries for\nother UIDs.\n\nBug: 23310674\nChange-Id: I22bb55ff7b80ff722945e224845215196f09dafa\n"
    },
    {
      "commit": "1dcf325844df54a3a2d274f37dea8dd676391eed",
      "tree": "a0c3036750c086cb2e62c29626e6e1f1d2f1cb91",
      "parents": [
        "54b5e85373619a838641d276a840caad284b09b3"
      ],
      "author": {
        "name": "Rom Lemarchand",
        "email": "romlem@android.com",
        "time": "Sun Nov 08 17:51:50 2015 -0800"
      },
      "committer": {
        "name": "Rom Lemarchand",
        "email": "romlem@google.com",
        "time": "Sun Nov 08 17:51:50 2015 -0800"
      },
      "message": "init: skip \"name\" DT entry\n\nDTs have a standard \"name\" entry which is not to be\nturned into an android property, so skip it.\n\nChange-Id: I79f6638b4123358c8d80510c1666cf5d4561160e\n"
    },
    {
      "commit": "d7aea443d9bc0b1f37a2c31d0d476d61ff41fb66",
      "tree": "cc671c413d24b1e4169cbafc942ac29743ffc696",
      "parents": [
        "bd4f52b2e2d1f03e77e2bef7b40865b631c8d115"
      ],
      "author": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Thu Oct 01 16:03:47 2015 -0700"
      },
      "committer": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Mon Oct 05 11:39:56 2015 -0700"
      },
      "message": "property_service: log pid,uid and gid of setprop client\n\nWhen auditing setprop denials, it is often unclear of who the process is\nin a multi-process domain. To help identify the invoker, log the pid, uid,\nand gid of the caller.\n\nBefore:\navc:  denied  { set } for property\u003dwifi.xxx ...\n\nAfter:\navc:  denied  { set } for property\u003dwifi.xxx pid\u003d30691 uid\u003d123 gid\u003d345 ...\n\nChange-Id: I5cdcb3d18fbd52e0987b5e1497b9f6620c6c742a\nSigned-off-by: William Roberts \u003cwilliam.c.roberts@intel.com\u003e\n"
    },
    {
      "commit": "b7349902a945903f9e36a569051f5131beb0bc24",
      "tree": "8553bcebe434b7d6fe178fbb2c2ef2433773c8f2",
      "parents": [
        "e13fd9aa231b117b03be6b84b7fb0debe6cb620d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Aug 26 11:43:36 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Sep 01 12:26:02 2015 -0700"
      },
      "message": "init: Use classes for parsing and clean up memory allocations\n\nCreate a Parser class that uses multiple SectionParser interfaces to\nhandle parsing the different sections of an init rc.\n\nCreate an ActionParser and ServiceParser that implement SectionParser\nand parse the sections corresponding to Action and Service\nclasses.\n\nRemove the legacy keyword structure and replace it with std::map\u0027s\nthat map keyword -\u003e (minimum args, maximum args, function pointer) for\nCommands and Service Options.\n\nCreate an ImportParser that implements SectionParser and handles the\nimport \u0027section\u0027.\n\nClean up the unsafe memory handling of the Action class by using\nstd::unique_ptr.\n\nChange-Id: Ic5ea5510cb956dbc3f78745a35096ca7d6da7085\n"
    },
    {
      "commit": "bac3299720623f4226bca103b26260052732ad30",
      "tree": "3f232ef27421dd03dd8ee1adbecd638ca979a4bf",
      "parents": [
        "4247ebfd2faefcfd7abf7a4cc4c85ce6c8b5125c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 31 12:45:25 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 07 10:16:39 2015 -0700"
      },
      "message": "Create Service and ServiceManager classes\n\nChange-Id: I363a5e4751ad83d2f4096882a6fbbeddca03acfe\n"
    },
    {
      "commit": "96f67316a22bc9236aed70b198e91a5406389e5b",
      "tree": "f168868b586356de56460b67ddfb10ab00e13e6d",
      "parents": [
        "cf4dba5ab315493531fff5a4867698a3659b0526"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 30 13:52:55 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 31 16:02:12 2015 -0700"
      },
      "message": "init: use std::vector\u003cstd::string\u003e for argument passing\n\nChange-Id: Ie7a64e65de3a20d0c7f7d8efc0f7c1ba121d07fe\n"
    },
    {
      "commit": "fa0c21c94ccb98bfa5cf3cc7a6b220be4a5fa378",
      "tree": "db32b026384bc809486ef7bba9bf74131a8d9be5",
      "parents": [
        "fac3bf35af412292e1a955510095c4234dc0fd53"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 23 17:53:11 2015 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jul 30 13:37:23 2015 -0700"
      },
      "message": "init: Create classes for Action and Command\n\nThis creates the concept of \u0027event_trigger\u0027 vs \u0027property_trigger\u0027\n\nPreviously these were merged into one, such that \u0027on property:a\u003db \u0026\u0026\nproperty:b\u003dc\u0027 is triggered when properties a\u003db and b\u003dc as expected,\nhowever combinations such as \u0027on early-boot \u0026\u0026 boot\u0027 would trigger\nduring both early-boot and boot.  Similarly, \u0027on early-boot \u0026\u0026\nproperty:a\u003db\u0027 would trigger on both early-boot and again when property\na equals b.\n\nThe event trigger distinction ensures that the first example fails to\nparse and the second example only triggers on early-boot if\nproperty a equals b.\n\nThis coalesces Actions with the same triggers into a single Action object\n\nChange-Id: I8f661d96e8a2d40236f252301bfe10979d663ea6\n"
    },
    {
      "commit": "f13b1b31399aa501514eb9beeef303d1ae2e0e14",
      "tree": "67eee7556d9a1f0ccbdfe9f1108c12645010cf42",
      "parents": [
        "5f3b05ad14db2a4ebc9eb25567bc951d465b3151"
      ],
      "author": {
        "name": "Lee Campbell",
        "email": "leecam@google.com",
        "time": "Fri Jul 24 16:57:14 2015 -0700"
      },
      "committer": {
        "name": "Lee Campbell",
        "email": "leecam@google.com",
        "time": "Mon Jul 27 14:56:03 2015 -0700"
      },
      "message": "init: Adding support to import directories\n\nSupport added so init scripts can now import directories.\n\nBUG: 22721249\nChange-Id: I02b566bfb50ea84469f1ea0c6ad205435a1df286\nTEST: Tested importing a folder on arm64 emulator\n"
    },
    {
      "commit": "ee530065648d7fdf1bb80c76385cc54a6d661dc8",
      "tree": "84f77ac82af9bf8472f6b4507093b5d22290f2b5",
      "parents": [
        "00ede7d2626f9343d330dc6f5286bba3e99e41d0"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jul 24 18:17:16 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jul 24 18:17:16 2015 -0700"
      },
      "message": "init: expand_props for onrestart commands.\n\nIt is only a temporary fix. I hope the code can be moved into a member\nfunction of class Command.\n\nBug: 22654233\nChange-Id: I38c24fb624e54986a953f44d398b3b80c3795d24\n"
    },
    {
      "commit": "00ede7d2626f9343d330dc6f5286bba3e99e41d0",
      "tree": "fdd8e8a7a67c962194f9b6b8a95a3c7324cf577a",
      "parents": [
        "74edcea90e31a3795e58aa1b2bbe96032f0bcd61"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jul 24 13:26:04 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jul 24 15:02:19 2015 -0700"
      },
      "message": "init: do expand_props before calling the builtins.\n\nAlso switch expand_props to std::string.\n\nBug: 22654233\n\nChange-Id: I62910d4f74e2b1a5bd2b14aea440767a2a8462b7\n"
    },
    {
      "commit": "74edcea90e31a3795e58aa1b2bbe96032f0bcd61",
      "tree": "1b2163806229cd03670484aad5a2d11ad1a3eed0",
      "parents": [
        "89cc750e9b2623aae3c257ce6c72f4ffe3e1bb33"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jul 24 10:11:05 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jul 24 11:14:08 2015 -0700"
      },
      "message": "init: Let property_get return std::string.\n\nBug: 22654233\n\nChange-Id: Id6091f58432f75e966b9871256049fbe17766c10\n"
    },
    {
      "commit": "4800dbf1da2b7d866c67c7375a55057f2b6c6d52",
      "tree": "63aaa93ce048343e6d5d257034c8f1e429d976bc",
      "parents": [
        "759717ee63f7d8a75089bc4adc308d190ec6b0ac"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jul 16 10:49:51 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jul 16 11:32:19 2015 -0700"
      },
      "message": "init: refuse to start process if domain transition not defined\n\nWhen SELinux is in enforcing mode, any process executed by\ninit must have a domain transition defined. See\nhttps://android-review.googlesource.com/108640 for details. This\nprevents an executable spawned by init from remaining in init\u0027s\n(very powerful) SELinux domain.\n\nHowever, this is only enforced when SELinux is in enforcing mode.\nDuring new device bringup, it\u0027s common to run an Android device\nin globally permissive mode. In globally permissive mode, SELinux\ndenials are logged only, but otherwise ignored. If appropriate\nSELinux domain transitions are not defined from init to init spawned\nprocesses, this could cause misleading SELinux denials attributed\nto init instead of the child process.\n\nTo help address these misleading denials, modify init to not spawn\nprocesses unless a domain transition is defined. This essentially\nenforces the rules in https://android-review.googlesource.com/108640\non both permissive and enforcing kernels.\n\nWhile I\u0027m here, change some \"freecon()\" calls to \"free()\", with the\nlong term goal of deleting freecon() entirely.\n\nChange-Id: I3ef3a372bb85df61a3f6234cb1113cc25fc6506a\n"
    },
    {
      "commit": "d62f0608d9d67bf647cf15debbd163e84584fe44",
      "tree": "5422f5f2b5173b001ca2fa7c170c91d9713883c7",
      "parents": [
        "106f92f5c8f116acf8ba01090aab30ad57d0fed8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 12 18:02:20 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 17 14:42:40 2015 -0700"
      },
      "message": "init support for cgroups.\n\nThis adds the \"writepid\" option that instructs init to write the child\u0027s\npid to the given filenames (such as /dev/cpuctl/bg_non_interactive/cgroup.procs\nand/or /dev/cpuset/foreground/cgroup.procs).\n\nBug: http://b/21163745\nChange-Id: I121bb22aa208bc99c4fb334eb552fdd5bcc47c1a\n"
    },
    {
      "commit": "4d87095ebfefdb9e641492462f0a0e21d5b96ecf",
      "tree": "436768267355be6e72efa4481635954fa28a3661",
      "parents": [
        "555d91985d174217c3e805997bcd86d9c94f5a6b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jun 12 22:03:50 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jun 12 22:12:33 2015 -0700"
      },
      "message": "Remove calls to is_selinux_enabled()\n\nd34e407aeb5898f19d4f042b7558420bbb3a1817 removed support for\nrunning with SELinux completely disabled. SELinux must either be\nin permissive or enforcing mode now.\n\nRemove unnecessary calls to is_selinux_enabled(). It always returns\ntrue now.\n\nChange-Id: Ife3156b74b13b2e590afe4accf716fc7776567e5\n"
    },
    {
      "commit": "17fff893c04971b519d25d52b07f51111353cba5",
      "tree": "bcd727357959e02a0e4e97af7edf385265bdaa8e",
      "parents": [
        "3ef730c57f88ac24b0d6b021e43fc344d602fe36"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Jun 02 11:11:02 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Jun 02 15:17:52 2015 -0700"
      },
      "message": "init: change exec parsing to make SECLABEL optional\n\nAllow SECLABEL to be - to denote default\n\nChange-Id: I58cdc6c805dc6e50dc42b7e13e72d0eaf4864f11\n"
    },
    {
      "commit": "c7331d02d1c6b1e51b3a1210506f38fd61819495",
      "tree": "b7c716a370787f1d1b71ebd057a821e5f3711cc8",
      "parents": [
        "34804b90ecc8d4d39e22b70ee7110e7f7df5daea"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 14 12:03:14 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 14 12:03:14 2015 -0700"
      },
      "message": "Reduce the coldboot timeout to 1s.\n\n5s was already a ridiculously long time to delay booting, and some OEMs are\ntrying to make it even more insane:\n\n  https://www.codeaurora.org/cgit/quic/la/platform/system/core/commit/?h\u003dlp\u0026id\u003dfd23edd48272976d2fb333f377242173f92aa343\n\nLet\u0027s at least ensure that Nexus and Android One devices don\u0027t take forever\nto boot...\n\nBug: http://b/19899875\nChange-Id: I9680c166a759360f34118e51cd0645e12b6bd5c8\n"
    },
    {
      "commit": "e5ce30fed81d1918a259be092dcd8bfffc3c2649",
      "tree": "346fa436221a434c00d7c2a842c78345624b0210",
      "parents": [
        "8b32c30b92be6914da2dca23089473c4f37adfb9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 06 19:19:24 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 07 11:02:08 2015 -0700"
      },
      "message": "Clean up init /proc/cmdline handling.\n\nHelped debug a problem where the N9 bootloader incorrectly\nconcatenated the various command lines.\n\nBug: http://b/20906691\nChange-Id: I0580b06f4185129c7eedf0bdf74b5ce17f88bf9c\n"
    },
    {
      "commit": "d34e407aeb5898f19d4f042b7558420bbb3a1817",
      "tree": "94fdaea0b40eab6fcc2b8e4be31f94a89e38edd3",
      "parents": [
        "2b3a4939463cb2eb6b65e416f6544a2e2d3bc29b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Apr 28 12:39:41 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Apr 28 13:11:07 2015 -0700"
      },
      "message": "init: remove support for disabled SELinux\n\nRemove support for androidboot.selinux\u003ddisabled. Running with SELinux\ndisabled is not a supported configuration anymore. SELinux must be\nin enforcing in shipping devices, but we also support permissive for\nuserdebug/eng builds.\n\nDon\u0027t try security_setenforce() if we\u0027re already in enforcing mode.\nA kernel compiled without CONFIG_SECURITY_SELINUX_DEVELOP does\nnot have a permissive mode, so the kernel will already be enforcing\nonce the policy is loaded.\n\nBug: 19702273\nChange-Id: I07525a017ddb682020ec0d42e56a2702c053bdeb\n"
    },
    {
      "commit": "f667a3247a7e814355feedbc08c6bbc92a9409b5",
      "tree": "1abfdd619f3a78dd1e88c5a23b95569d49ef3db5",
      "parents": [
        "ccac2be8a6269469087a7978e1a6db62ef4618c6"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 17:42:52 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 18:29:26 2015 -0700"
      },
      "message": "init: get rid of the remaining double mounts\n\nDon\u0027t double mount /dev and its subdirectories anymore. Instead, the\nfirst stage init is solely responsible for mounting it.\n\nDon\u0027t have init prepare the property space. This is the responsibility\nof the second stage init.\n\nDon\u0027t have SELinux use the property space to determine how we should\nbe running. Instead, create a new function and extract the data we\nneed directly from /proc/cmdline. SELinux needs this information in\nthe first stage init process where the property service isn\u0027t available.\n\nChange-Id: I5b4f3bec79463a7381a68f30bdda78b5cc122a96\n"
    },
    {
      "commit": "178299fd459b7622e9e3de05a48d6ba050f92bec",
      "tree": "9a6f9833881d53c9b19833ad092b1c18fba5d51d",
      "parents": [
        "f8b0743ef418c15fe622143a6b4b42b102a07803",
        "9dec93bfeb7a4c1ef49745f60f551e0b11a35b2d"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 23:11:26 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 25 23:11:27 2015 +0000"
      },
      "message": "Merge \"init: don\u0027t double mount /proc and /sys\""
    },
    {
      "commit": "9dec93bfeb7a4c1ef49745f60f551e0b11a35b2d",
      "tree": "606cfb5cb6abe6c34faffdaa13510589a2253152",
      "parents": [
        "8929c77ab9aa9be612291809669e9162837c54ae"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 15:50:03 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 15:50:03 2015 -0700"
      },
      "message": "init: don\u0027t double mount /proc and /sys\n\nThe first stage init mounts /proc and /sys, and then the second\nstage init also mounts /proc and /sys on top of the existing mount.\nOnly mount these two directories once, in the first stage init.\n\nNot yet fixed: the double mounting of /dev. Removing the double\nmounting doesn\u0027t work right now because both init stages are trying\nto create a property space, and if the double mount of /dev goes away,\nthe property service in the second stage init fails to work.\n\nChange-Id: I13719027a47526d074390c2b1a605ad99fb43a8f\n"
    },
    {
      "commit": "eedbe81f753fd19e5eb2238187c5618e9153bf55",
      "tree": "2fb2d3873af5cc7fae38b5b55261800358a8ca86",
      "parents": [
        "8929c77ab9aa9be612291809669e9162837c54ae"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 14:10:03 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 15:36:13 2015 -0700"
      },
      "message": "init: fix write_file checkreqprot logic error\n\nwrite_file() returned -errno on error, not -1. Callers who check for\n-1 would falsely believe that the write was successful when it wasn\u0027t.\nFixup write_file so that it return -1 on error consistent\nwith other functions.\n\nChange-Id: Ic51aaf8678d8d97b2606bd171f11b3b11f642e39\n"
    },
    {
      "commit": "a1f6a4b13921f61799be14a2544bdbf95958eae7",
      "tree": "0edd84d09e49194202228860b4345b7edac0109f",
      "parents": [
        "6ce5625d58c2376b719802a0ae0b56bcd3afcdc8"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 13:48:26 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 25 13:48:26 2015 -0700"
      },
      "message": "init: remove mkdir /dev /proc /sys\n\nThese directories are already present in the initial ramdisk, and\nthese mkdir calls are no-ops.\n\nChange-Id: I528f9e96a3471de904845a2f9e09c1b6ff83a708\n"
    },
    {
      "commit": "929f4070767d1e4806c058849178afa13d9ded1e",
      "tree": "ac2368c66c572e1fb95406d8542605993fa68f6a",
      "parents": [
        "df5d4482074fc68a25a6a33992f3fc5164c2d3ec"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 21:13:44 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 21:13:44 2015 -0700"
      },
      "message": "Switch init to epoll.\n\nNot just because it\u0027s what the cool kids are doing --- it also lets us\nsimplify the inner loop and decouple it from whatever systems want to\nbe woken to perform some activity if there\u0027s data to be read on some fd.\n\nCurrently this is just used to clean up the existing signal handling,\nkeychord, and property service code.\n\nChange-Id: I4d7541a2c4386957ad877df69e3be08b96a7dec5\n"
    },
    {
      "commit": "c6c26ed781d9ae1ba388cebba63532d2ecda3227",
      "tree": "f27c292d6584c4d5f2e486a40e91c8c8539bfb33",
      "parents": [
        "b749be0bc36b3ae610aa05541581ef8cc5e484ee"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 18:50:30 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 19:15:20 2015 -0700"
      },
      "message": "Clean up property service initialization.\n\nAll the code that was being delayed does is create a socket. We can\ndo that straight away, avoid the overhead, and simplify our main loop.\n\nThe keychord fd, on the other hand, seems a little tricky. It looks\nlike /dev/keychord isn\u0027t immediately available, at least not on N9;\nwe have to wait for ueventd to set us up the bomb.\n\nChange-Id: I020e75b8e4b233497707f0a3cbbb6038b714161f\n"
    },
    {
      "commit": "9042cae40b60f37294073b59744d04c18033a07c",
      "tree": "287f1a9d3fc833a4fcb10cd8ab6d3d29902f6c4d",
      "parents": [
        "662baefbb7ceaf2f2502f4e7752d4a6d835f216a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 17:43:21 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 17:43:21 2015 -0700"
      },
      "message": "Clean up init signal handling a little.\n\nWe can set it up earlier, and error reporting like this helped me find\nthe SELinux problem with the last change to this code.\n\nChange-Id: If0f38bc5ff0465c4030e2d39d34f31f49b2d8487\n"
    },
    {
      "commit": "662baefbb7ceaf2f2502f4e7752d4a6d835f216a",
      "tree": "7b5e2ed086b59ed4bf55f9213f91345bc91cec7a",
      "parents": [
        "05c92d2b4fa7e96f6e64384f197e12916ed1d821",
        "4f673306fc20736be4f4fab602718f9dd28ff5e9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 25 00:24:55 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 25 00:24:55 2015 +0000"
      },
      "message": "Merge \"Setup signal handler before any exec command\""
    },
    {
      "commit": "f65730e620dde083133b8c1ab61c0d07b4dd8c2f",
      "tree": "a92c5688fc45a24edfc25c9a709086d9d752da05",
      "parents": [
        "34dd04dbb53bc6dc1ec4f9c6639b10acb7c53c72"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 18:38:17 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 12:26:05 2015 -0700"
      },
      "message": "Revert \"Revert \"Make init re-exec itself for its SELinux domain transition.\"\"\n\nThis reverts commit 4217374611ada50f33aee544f015f6f9dfbf7ced.\n\nIt turns out that the kernel passes any unrecognized arguments on to init,\nand (at least) N6 and N9 have such arguments. My lazy check of argc was\nthus insufficient to recognize what stage of init we were in, so we\u0027d\nskip to stage 2 and not set up SELinux. And apparently you can get a\nvery long way with SELinux off... We\u0027ll fix that in a later change.\n\nBug: 19702273\nChange-Id: I43b3fb722fed35dd217cb529cbcac9a29aff4e4b\n"
    },
    {
      "commit": "4217374611ada50f33aee544f015f6f9dfbf7ced",
      "tree": "96e6fe53791cd8c57dc6bf4153773e55a0d7cc8c",
      "parents": [
        "adf0d1bbfa4bc560c2106f14afa8258a11c48bf6"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Apr 24 16:57:21 2015 +0000"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Apr 24 16:57:21 2015 +0000"
      },
      "message": "Revert \"Make init re-exec itself for its SELinux domain transition.\"\n\nshamu isn\u0027t booting.\n\nThis reverts commit adf0d1bbfa4bc560c2106f14afa8258a11c48bf6.\n\nChange-Id: I89d568838cebbe14cc4a8ae3843f0f1ac54987af\n"
    },
    {
      "commit": "adf0d1bbfa4bc560c2106f14afa8258a11c48bf6",
      "tree": "ffce4af31f881404111a124dc858d21996bfbfcb",
      "parents": [
        "876881b22ad5d735cdb3ae2ac1afa6c336378808"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 22 18:39:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 23 15:20:51 2015 -0700"
      },
      "message": "Make init re-exec itself for its SELinux domain transition.\n\nChange-Id: I38adabe5789d671e3f7d21936071a758ec8cea8a\n"
    },
    {
      "commit": "4f673306fc20736be4f4fab602718f9dd28ff5e9",
      "tree": "09b45bc64bee25cabb5b9aebc0cca18c5e2d38bf",
      "parents": [
        "623aa1c47a51990259fbbc271d7f9f40046153fd"
      ],
      "author": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonymobile.com",
        "time": "Sat Apr 18 14:13:24 2015 +0200"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonymobile.com",
        "time": "Sat Apr 18 14:18:25 2015 +0200"
      },
      "message": "Setup signal handler before any exec command\n\nFixes init deadlock when an exec command was called\nin an on-init section.\n\nThe exec command handling relies on that the signal handler\nmechanism is working to know when to continue executing\ncommands.\n\nChange-Id: Ib0ce75ffad7cf3bf926c93d0506b2fe3e5a92630\n"
    },
    {
      "commit": "da40c00137f75543a69972f1be506e2d14a41845",
      "tree": "d24df4f9a94411205786227c26cd2a1a664420bc",
      "parents": [
        "e29744d94df787fa83307572d90a954b1592f69b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 27 23:20:44 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Mar 28 00:25:22 2015 -0700"
      },
      "message": "Log more timing information from init.\n\nAlso make important events in init\u0027s life NOTICE rather than INFO,\nand ensure that NOTICE events actually make it to the kernel log.\n\nAlso fix the logging so that if you have a printf format string\nerror, the compiler now catches it.\n\nAlso give messages from init, ueventd, and watchdogd distinct tags.\n(Previously they\u0027d all call themselves \"init\", and dmesg doesn\u0027t\ninclude pids, so you couldn\u0027t untangle them.)\n\nAlso include the tag in SELinux messages.\n\nBug: 19544788\nChange-Id: Ica6daea065bfdb80155c52c0b06f346a7df208fe\n"
    },
    {
      "commit": "db3f267c99411b10144998c6c1f1a6288d0191bc",
      "tree": "989b8000829cefb26964ed177ce986b3e38230a9",
      "parents": [
        "1b8dbe74412dd27f2950e0c84feaf09c5b7dcbf0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 20 09:45:18 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 20 10:03:32 2015 -0700"
      },
      "message": "Clean up property setting code.\n\nIn particular, ensure that all property_set failures are reported.\n\nChange-Id: Iab94a28bcba2346868c0f39bcfe26e55a2c55562\n"
    },
    {
      "commit": "d679bc9e568fa1e7d1d2ce9f478b1d4f00dae42a",
      "tree": "7230327f604c554f2430b23eccf0f3a06eec6985",
      "parents": [
        "6a0548bf7cd8c3a0d17d2cc207d6fcf0c8297d31"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 20 08:50:46 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 20 08:58:42 2015 -0700"
      },
      "message": "Lose bootmode and console globals.\n\nAlso remove some code marked \"TODO: these are obsolete. We should delete\nthem\".\n\nChange-Id: I6255cee4cb6680bfcbc5b46366990309cba95037\n"
    },
    {
      "commit": "6a52443d31d4de56ead022a55f63683316d96634",
      "tree": "481b792e495ded8d609c47b119206b3a3e203500",
      "parents": [
        "bbc01d825448a738160716f95d9cc38f2be5f4f1"
      ],
      "author": {
        "name": "Rom Lemarchand",
        "email": "romlem@android.com",
        "time": "Sat Feb 28 06:39:11 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 19 16:32:02 2015 -0700"
      },
      "message": "Parse boot properties from device tree\n\n- Make sure compatible DT node is \"android,firmware\"\n- Set ro.boot.* properties from firmware/android/ DT node\n\n(cherry-pick of cbcbea27c70846a96f4bba2f7cb245f937de4d3f.)\n\nChange-Id: If3d0716831516cb3d3fde1f75d57e2691d42d054\n"
    },
    {
      "commit": "bbc01d825448a738160716f95d9cc38f2be5f4f1",
      "tree": "267d9d8c8d6bcc3aa1fd347848e32b64b7d72adc",
      "parents": [
        "8386a726d11785dee69a806a0d37147f7bad1e76",
        "74b34f3cb79aa8f2c5ba6a9dcc46d0dd84cdac86"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 19 23:21:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 19 23:21:29 2015 +0000"
      },
      "message": "Merge \"Remove /proc/cpuinfo parsing\""
    },
    {
      "commit": "0dccc888bd1d48acf412edd2b5279e5d1040b156",
      "tree": "39e7d54bbd1c1cfda644b579564470aedb6dc6aa",
      "parents": [
        "5aa097c8a7b9326e1add7a23bf4d31febd25127b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 18 20:17:31 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 18 20:17:31 2015 -0700"
      },
      "message": "Remove useless memset from init.\n\nChange-Id: Ia880810bb2c9a976dceeb0ffdba0cb98e69e3c6d\n"
    },
    {
      "commit": "cc86fb2b29b13570ff416d4590a8cab705b19ec3",
      "tree": "5da41dfa636fb63ffc626a92291d114ba903d41f",
      "parents": [
        "928cbdd2c34cd5db9b344e593866f9e1e1e477e2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 17 20:01:13 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 17 20:01:13 2015 -0700"
      },
      "message": "Switch init over to _PATH_DEFPATH.\n\nBug: 19564110\nChange-Id: I343b4a360b10319dca13ab01f2d411ff940e9052\n"
    },
    {
      "commit": "74b34f3cb79aa8f2c5ba6a9dcc46d0dd84cdac86",
      "tree": "938a00b0ccfce17fafed89fd8ee4b1f216d78fba",
      "parents": [
        "f1c2ba490ef979b3d347f08535ab8b817e917e62"
      ],
      "author": {
        "name": "Rom Lemarchand",
        "email": "romlem@android.com",
        "time": "Fri Feb 27 17:20:29 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Mar 14 11:05:48 2015 -0700"
      },
      "message": "Remove /proc/cpuinfo parsing\n\n- Clean up the paths for ro.revision and ro.hardware parsing\n- Use ro.hardwre in ueventd instead of parsing the kernel command line\n\n(cherry-pick of 38b340a52f8e864650db8bae1eb88d5c00485db0.)\n\nBug: 19366018\nChange-Id: I018a293f3d46e736a8b65132b5b00b0f7c20edae\n"
    },
    {
      "commit": "58c3bacc38072dafa77e5d33bffa4d3a2a4d2562",
      "tree": "935e8881bc522034f09086b61694d3eef762cae0",
      "parents": [
        "a4d98484a2b64d215d1d35830693a16cf2873308"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 11 12:31:53 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 11 12:31:53 2015 -0700"
      },
      "message": "Fix a printf format string (caught by clang but not GCC).\n\nChange-Id: I665756615eef74b05ef92f5865d910f29ead0695\n"
    },
    {
      "commit": "8d82ea05cb0945ba6cb8bf321b9ffbd0b6932745",
      "tree": "2b73c3eac0ffb520609acf1f2b52d609e419f227",
      "parents": [
        "5329d3fd54fa875bb7de78a8c40134cc63921c64"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 06 20:15:18 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 25 17:55:34 2015 -0800"
      },
      "message": "Implement exec.\n\nChange-Id: I20329bc9b378479d745b498d6a00eca0872cd5ab\n"
    },
    {
      "commit": "e2d63af002a3b494f6bd464f2652b6e1997e7a52",
      "tree": "d4b36bc9bcc5df83d82f657a9343bfb913dfc06c",
      "parents": [
        "f96c15000f849d4c3fef08f0145c61a4862c3833"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 17 19:27:51 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 17 19:27:51 2015 -0800"
      },
      "message": "Move sprintf to snprintf.\n\nBug: 19340053\nChange-Id: Id0d866e6195ed4752b4be6081eeb2aab8b1dbe9a\n"
    },
    {
      "commit": "a197ff12dd336a9945ad1164402980296f9c235c",
      "tree": "b01d81e0a3f06b3b239005697112de20f389ccda",
      "parents": [
        "ed318bff41c4515ca79a11afb97507a452e9fcd3"
      ],
      "author": {
        "name": "Yongqin Liu",
        "email": "yongqin.liu@linaro.org",
        "time": "Fri Dec 05 13:45:02 2014 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 12 12:13:24 2015 -0800"
      },
      "message": "bootchart: fix bootchart can not be triggered problem\n\nbootchart uses a file on the data partition to decide if it should collect\ndata for bootchart, but the data partition will be mounted by the mount_all\ncommand in the \"on fs\" section, and it will be only added into the action\nqueue when command \"trigger fs\" is executed, but that\u0027s after the\nbootchart_init action (late_init).\n\nThis change makes bootchart_init a builtin command of init,\nand make it executed as the first command of \"on post-fs\" section\nwhich will be triggered after the \"on fs\" section.\n\nThis change also refactors the bootchart code to all be in bootchart.cpp.\n\nChange-Id: Ia74aa34ca5b785f51fcffdd383075a549b2a99d9\nSigned-off-by: Yongqin Liu \u003cyongqin.liu@linaro.org\u003e\n"
    },
    {
      "commit": "f682b4786a4093efb23bf80d69bf80eb274b145b",
      "tree": "8af209a035867fd30720e6e6da1b8b581aab871d",
      "parents": [
        "d558530ba90cb6218fe8e255c71a034c3fe1ea58"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 06 12:19:48 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 06 14:20:30 2015 -0800"
      },
      "message": "Clean up reading and writing in init.\n\nThis isn\u0027t particularly useful in and of itself, but it does introduce the\nfirst (trivial) unit test, improves the documentation (including details\nabout how to debug init crashes), and made me aware of how unpleasant the\nexisting parser is.\n\nI also fixed a bug in passing --- unless you thought the \"peboot\" and \"pm\"\ncommands were features...\n\nBug: 19217569\nChange-Id: I6ab76129a543ce3ed3dab52ef2c638009874c3de\n"
    },
    {
      "commit": "c0e919c92062360a69b771722677d041c9998403",
      "tree": "8d082ff796a482fd305a00640a5c83dd0a258d12",
      "parents": [
        "27d28d3baff860d1fd936a5fcf2d920577c52575"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 04 14:46:36 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 04 17:16:11 2015 -0800"
      },
      "message": "Stop using #if for conditional compilation.\n\nUse regular \u0027if\u0027 to prevent bitrot.\n\nAlso remove remaining typedefs.\n\nChange-Id: I2e6ca928e2db29b88b643cf990ff05cfb0be94a6\n"
    },
    {
      "commit": "f3cf438714aa1284d8a58e2f3b108ba93f6d3abb",
      "tree": "3a1b726c6805315c280d745e8b742ec9542d58e9",
      "parents": [
        "5204b1580e0d0f38272c7da166eee9b88c14dc50"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 03 17:12:07 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 04 08:59:10 2015 -0800"
      },
      "message": "Build init as C++.\n\nThis is just the minimal change to keep it building.\n\nChange-Id: I245c5b8413a1db114576c81462eb5737f5ffcef2\n"
    },
    {
      "commit": "0ab46c9e2b5e664ee9c6dee024c2020114317421",
      "tree": "906dd8e03f8a126aa72d3fabda624f179ff10566",
      "parents": [
        "6a728fde77d1367318c79e5b182f0cb316872a37"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 03 11:20:49 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 03 11:31:11 2015 -0800"
      },
      "message": "Init: Fix literal\n\nThis is a literal 0 implicitly converted to a NULL.\n\nChange-Id: I0573e85eb0578f938877c4bec79054081c27e661\n"
    },
    {
      "commit": "429721c5c4218679d6ae042d85dd98e3d7ead658",
      "tree": "48a7828344bff171990a586c3ec43729270b1baf",
      "parents": [
        "46adfa69b689bc9f9e15c87275839f233a404582"
      ],
      "author": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Tue Sep 23 07:48:47 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 02 16:22:56 2015 -0800"
      },
      "message": "init: Implement \u0027exec\u0027 command.\n\n(cherry-pick of d05ab3952ec0e38f33a0e80ce6b9eb45b0064ba4.)\n\nChange-Id: Id6d9bb32e51a0ad090ed8240cc505dc45b57b35d\n"
    },
    {
      "commit": "0b41512a2ea3d5fbb2b82841557a96417398c398",
      "tree": "381db0232c00e524127d236191a5d13c1df2e4a7",
      "parents": [
        "a73774e62e09c8e27039d3f8a5f1f842a0df740a"
      ],
      "author": {
        "name": "Badhri Jagan Sridharan",
        "email": "badhri@google.com",
        "time": "Fri Oct 10 23:19:06 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 02 16:21:05 2015 -0800"
      },
      "message": "init: Add support \"\u0026\u0026\" operator in property triggers\n\n\"\u0026\u0026\" operator can now be used to test the validity\nof two of more properties.\n\nFor example:\n\non property:test.a\u003d1 \u0026\u0026 property:test.b\u003d1\n    setprop test.c 1\n\nThe above stub sets the test.c to 1 only when\nboth test.a\u003d1 and test.b\u003d1\n\n(cherry-pick of 162f7d797c67019a7a3f08c3b0f0ffc91d548ddc.)\n\nChange-Id: I72c19f7aa92231372a416193618ee6c7fd368141\nSigned-off-by: Badhri Jagan Sridharan \u003cbadhri@google.com\u003e\n"
    },
    {
      "commit": "45a884f85f8eae602fe6e7c9718c90db65675e07",
      "tree": "1ec631444bbafd5c5f575e598b9c6601fc80fb53",
      "parents": [
        "520ca3e13a134386762c3fc754a8bc2e51af3c2f"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Feb 02 14:37:22 2015 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Feb 02 14:37:22 2015 -0800"
      },
      "message": "Add O_CLOEXEC to lots of open() calls.\n\nand other related fixups.\n\nChange-Id: Ia88fb37a07ff6777d00c49800081f5a519c0c78d\n"
    },
    {
      "commit": "05345bfdb08ea196eb061af11307758d62fc6234",
      "tree": "5265adf7530dd7fa7d50f53a91d0e11188a03a24",
      "parents": [
        "765f371cf40c67ccca3033b05aa052de0145f999"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Wed Dec 03 12:52:59 2014 -0800"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Wed Dec 10 13:21:17 2014 -0800"
      },
      "message": "Move property_context label handling to libselinux.\n\nResubmission of commit: dab91bd37af6be355163ee33ca6f1b00e7dd1b51\n\nChange-Id: Iad9517d3f81f7c091307b3e7497675e2cdc32be5\n"
    },
    {
      "commit": "59f64ec31ffa4ca75f39006c1ce30acf71d71407",
      "tree": "c37de4ed030f8bc2917e362f25cbc92071637d9b",
      "parents": [
        "98069027bd90d2139d54affa1367dcd3317a1c11"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Dec 10 02:02:32 2014 +0000"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Dec 10 02:02:32 2014 +0000"
      },
      "message": "Revert \"Move property_context label handling to libselinux.\"\n\nEmulator fails to boot.\n\nThis reverts commit 98069027bd90d2139d54affa1367dcd3317a1c11.\n\nBug: 18692152\nChange-Id: If362e1311bc3f07e033ba81190c05608ada7c361\n"
    },
    {
      "commit": "98069027bd90d2139d54affa1367dcd3317a1c11",
      "tree": "886b52847bcaedc252d9b270a05796fde9573bba",
      "parents": [
        "bc2602068d83b0226a614ed143cebd708c5fabd2"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Wed Dec 03 12:52:59 2014 -0800"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Wed Dec 03 15:18:40 2014 -0800"
      },
      "message": "Move property_context label handling to libselinux.\n\nChange-Id: I76e2ed95d4e4f8618458e63d30ae82e37d1acf7b\n"
    },
    {
      "commit": "a016c42b4f7122625a417929afa0e9379ffa4887",
      "tree": "0be123cd7aaaec26ffb58967152bef64b74134a0",
      "parents": [
        "1690b49e631904759737176b4bb285d446655f5d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 24 19:52:41 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 24 19:52:41 2014 -0800"
      },
      "message": "Init: Remove unused variables\n\nFor build-system CFLAGS clean-up, fix unused variables.\n\nUse a #define instead of static variable in a header file.\n\nChange-Id: Id47bf38e51644b61a9f3ac1893a16553695f1aac\n"
    },
    {
      "commit": "3700373c67d08a4f180390cdd99b162e9ff0cfd3",
      "tree": "a08bbb11b001e4b9dfc4e17852e81d20c18deccc",
      "parents": [
        "73290cd1369422260f1843dc36949c27422c0300"
      ],
      "author": {
        "name": "Bo (Andover) Zhang",
        "email": "zhang@broadcom.com",
        "time": "Thu Jul 24 13:11:35 2014 -0400"
      },
      "committer": {
        "name": "Bo (Andover) Zhang",
        "email": "zhang@broadcom.com",
        "time": "Tue Jul 29 21:09:01 2014 -0400"
      },
      "message": "Fixed the pacing logic in bootchart data collection.\n\nIdeally bootchart collects system data every BOOTCHART_POLLING_MS ms.\nHowever, the current bootchart pacing logic would collect data every\ntime the main loop in init.c is executed. This results in:\n\n1. Multiple data samples being taken consecutively or prematurely. In\nmany cases, these data samples have the same timestamp (in jiffies).\nThe off-line data processing tool would complain about dividing by\nzero \"interval\" and bail out.\n\n2. Because of the ineffective pacing, bootchart data collection would\nterminate prematurely. The total duration of data collection is usually\nmuch shorter than what the user specifies.\n\nThe fix is to check whether BOOTCHART_POLLING_MS ms has elapsed\nbefore taking a new data sample. For this purpose, /proc/uptime\nis used to get the time values, consistent with the precision of\nbootchart timestamps.\n\nChange-Id: I106bf91dbda01059b719df6c73b8bd1cd54a64f0\nSigned-off-by: Bo (Andover) Zhang \u003czhang@broadcom.com\u003e\n"
    },
    {
      "commit": "9464e5a58da50f6cc3503020b38181150cfd01c4",
      "tree": "7e4001943b916c9555f7cc6399aba0f154b71435",
      "parents": [
        "56cbd19b1b8a42a0011be78aa1051304bc57127d"
      ],
      "author": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Fri Jul 11 15:05:23 2014 -0700"
      },
      "committer": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Fri Jul 11 15:47:15 2014 -0700"
      },
      "message": "Move unlink(\"/dev/.booting\") until after filesystems are mounted.\n\nMove the unlink out of init.c and into init.rc, so that the file\nwill be removed after all the filesystems with firmware are up.\n\nChange-Id: I7442df2042cc2788d0301f00e3c2fba7d6e0e1c7\n"
    },
    {
      "commit": "381341f5f72a46b34126e5c8e6f62f04b702ba47",
      "tree": "91000d3a4822b1a5bc95295d898785bb868a845c",
      "parents": [
        "77a2c22dcbab56b260eb9d39c84fe8f98258cebb"
      ],
      "author": {
        "name": "James Morrissey",
        "email": "james.morrissey@arm.com",
        "time": "Fri May 16 11:36:36 2014 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 10 11:22:46 2014 -0700"
      },
      "message": "Fix environment variable assignment in init\n\nThe init process allows environment variables to be specified in\nthe rc script globally, via \u0027export\u0027, and for a specific process,\nvia the \u0027setenv\u0027 option.\n\nHowever, the mechanism for assembling the environment simply\nappended the new variable without checking whether it was already\ndefined, so it was not possible to overwrite an existing entry.\nThis patch fixes that behaviour.\n\nLimitations and concerns:\n\nThe limit of a maximum number of 31 variables is unchanged.\n\nCurrently, most callers of \"add_environment\" do not check the return\nvalue, but the function now logs the failure rather than failing\nsilently.\n\nChange-Id: Ie9a68c37a0f55c5b40e904e695cd35514f67f480\n"
    },
    {
      "commit": "24a3b783d5fcf55fdc9034ef395a5fbc77290c75",
      "tree": "8e125f970a110735809888d688c352cf55efb6f5",
      "parents": [
        "a42d5bf0064e8c8ce50b22abe13bb6eed4ea9dac"
      ],
      "author": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Thu Jun 26 13:56:01 2014 -0700"
      },
      "committer": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Thu Jun 26 15:05:15 2014 -0700"
      },
      "message": "Improve init\u0027s debug printing.\n\n+ Make prints of rc commands significantly more verbose. All commands\n  will log all arguments, file/line number of the command, return value,\n  and parent action which triggered the command.\n\ninit: command \u0027mount tmpfs tmpfs /mnt/obb mode\u003d0755,gid\u003d1000\u0027 action\u003dinit\n      status\u003d0 (/init.rc:89)\ninit: command \u0027setprop net.tcp.default_init_rwnd 60\u0027 action\u003dboot status\u003d0\n      (/init.rc:403)\n\nChange-Id: I5498c7258e4891706be4a12546df4231d14d86c4\n"
    },
    {
      "commit": "439224e27530353351c7df504fb29fad9ac776a0",
      "tree": "bf9281672a41f297f2a68e7c60fb6334c0b7914d",
      "parents": [
        "7950fc47a76cf7fe2d5c5e1a25002cb7848cf155"
      ],
      "author": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Tue Jun 24 13:45:43 2014 -0400"
      },
      "committer": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Tue Jun 24 14:11:59 2014 -0400"
      },
      "message": "Redirect libselinux logging to dmesg for ueventd.\n\nWe already do this for init, but had failed to do it for ueventd\nand could not capture any logging from libselinux calls made by\nueventd.\n\nTruly enabling non-error logging also requires uncommenting a line\nin Android.mk:\nLOCAL_CFLAGS +\u003d -DLOG_UEVENTS\u003d1\nwhich enables other logging and sets the default log level to INFO,\nor otherwise changing the klog level in the ueventd code (is not\nsettable by init.rc loglevel).\n\nChange-Id: I00e6f9d6271f2a21d9078c96368816d74d6d2850\nSigned-off-by: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\n"
    },
    {
      "commit": "e4b7b294f37d9b64d6b7c1931e2c9bfb1a500d68",
      "tree": "5a7481adbd875eaa1e74ef2e1dbc5f11c9323141",
      "parents": [
        "dbb93515c9a1a60a6e824e789920f43d625a8c2a"
      ],
      "author": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Mon Jun 16 15:06:21 2014 -0700"
      },
      "committer": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Fri Jun 20 16:43:00 2014 -0700"
      },
      "message": "Add ability to boot from charger mode.\n\nAdd the ability to boot up directly from charger mode, instead of forcing\ncharger mode to initiate a full restart to launch \u0027full\u0027 android. This\nshould shave a few seconds off of boot time on supported devices (just\nmanta for now).\n\nChange-Id: Ieec4494d929e92806e039f834d78b9002afd15c4\n"
    },
    {
      "commit": "f3c85b2488529404a170a28f9bc72538b1ace97d",
      "tree": "04ed6010c0de3de6c6a4f08ee1809b7c4986709b",
      "parents": [
        "676f7d509d683921335ccddc2f267a73eb5c60c6"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jun 02 20:56:04 2014 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jun 02 20:56:04 2014 -0700"
      },
      "message": "Only allow disabling SELinux on userdebug / eng builds\n\nOnly parse and honor the kernel command line on userdebug\nor eng builds. On user builds, assume that selinux is always enabled\nand enforcing.\n\nChange-Id: I71c66e4365bdf2f226800634126a38b716d96599\n"
    },
    {
      "commit": "252b0e2b46e3d5e71a8b5c55928dc9ca62811f0a",
      "tree": "72b962c61caa5495097a458578e6bb485cd7da46",
      "parents": [
        "570cd46d14645f622e9972671308fdb4f2425292",
        "03daf05dcfbdbf4ed6175afb2f4676e59dd74aa3"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat May 31 05:03:04 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat May 31 05:03:05 2014 +0000"
      },
      "message": "Merge \"SELinux changes to check policy versions during a reload.\""
    },
    {
      "commit": "f94853f294059efc49ee5a057833cf8bc2b6c5df",
      "tree": "0d5316186ac01d4d10fe936ab258190f9010ba54",
      "parents": [
        "32e4479d5535887d03625b43b7e3574b458dfc8d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 16:51:09 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 16:51:09 2014 -0700"
      },
      "message": "Clean up some unnecessary system_properties cruft.\n\nBug: 14970171\nChange-Id: I6f54c35e265b849be914120f795c9f8e0cec34bb\n"
    },
    {
      "commit": "3beec7e55f1b5a840fc8fe0868b84d2238779af6",
      "tree": "dffb2159f4670268e917b6356e50260702e8a364",
      "parents": [
        "dc57f4d93ad2c8dbf2ea1b031328e12fa2fac401"
      ],
      "author": {
        "name": "JP Abgrall",
        "email": "jpa@google.com",
        "time": "Fri May 02 21:14:29 2014 -0700"
      },
      "committer": {
        "name": "JP Abgrall",
        "email": "jpa@google.com",
        "time": "Sat May 03 00:14:59 2014 -0700"
      },
      "message": "init: add \u0027enable \u003cservice\u003e\u0027 to negate \"service \u003cservice\u003e... disabled\"\n\nenable \u003cservicename\u003e\n   Turns a disabled service into an enabled one as if the service did not\n   specify disabled in the rc file.\n   It will also start the service if needed.\n\nBug: 14472973\nChange-Id: Id0b49cc687a2bc74f6f92e066c617724cc94908d\nSigned-off-by: JP Abgrall \u003cjpa@google.com\u003e\n"
    },
    {
      "commit": "03daf05dcfbdbf4ed6175afb2f4676e59dd74aa3",
      "tree": "b534b2cc54f1dbca859fc8efdae5032387b78def",
      "parents": [
        "ab3d49b03527d5fc65664f66ddb78c98450c8c84"
      ],
      "author": {
        "name": "Robert Craig",
        "email": "rpcraig@tycho.ncsc.mil",
        "time": "Mon Mar 17 21:16:53 2014 -0400"
      },
      "committer": {
        "name": "Robert Craig",
        "email": "rpcraig@tycho.ncsc.mil",
        "time": "Mon Apr 28 22:06:38 2014 +0000"
      },
      "message": "SELinux changes to check policy versions during a reload.\n\nWhen deciding on which property_contexts policy to load\nduring a reload, an initial call is made to libselinux to\ngrab the correct policy index. This policy index represents\nwhether the /data/security or the rootfs version will\nbe used.\n\nChange-Id: I4716039bb0f5ba1e961977a18350347a67969dca\nSigned-off-by: rpcraig \u003crpcraig@tycho.ncsc.mil\u003e\n"
    },
    {
      "commit": "de151571a4512491bc11f94e60c60c8fa84893f3",
      "tree": "9f60a6f751e6fd4ef4562dee53f4bf2600340155",
      "parents": [
        "5fb1a34af4128bfe7332b02e31b146a82bc2872d"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Jan 18 15:28:11 2014 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Mar 11 21:27:27 2014 -0700"
      },
      "message": "don\u0027t load property_contexts from /data\n\nBug: 12613118\nChange-Id: I5a84b13d2151075d5136e3682431fbcc9307df13\n(cherry picked from commit dc3a42bb11dc2aefee37f799b5a1cce87cf35aaf)\n"
    },
    {
      "commit": "eb3f421e028608e37e4eb814351f03b99ae55900",
      "tree": "030a4b7c930994a5bee836f0780aadf87dabac25",
      "parents": [
        "27fd413d6d02a53c453cf926717b67e9a8d1eb32"
      ],
      "author": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Wed Feb 12 16:17:00 2014 -0500"
      },
      "committer": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Wed Feb 19 09:15:09 2014 -0500"
      },
      "message": "Enable building init with -Wall -Werror.\n\nEliminates various warnings from SELinux-related code.\n\nBug: 12587913\nChange-Id: I28921f0ebd934324436609540d95ccef58552b64\nSigned-off-by: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\n"
    },
    {
      "commit": "dbd37f2e1da5b27ef1ad6d0cc9580e6893560f5f",
      "tree": "6f0a3d877b6b0c4734b942443504a6e186e56c30",
      "parents": [
        "6ddabb7a1cc3080ae773acb045f69b5e6afee87a"
      ],
      "author": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Tue Jan 28 10:34:09 2014 -0500"
      },
      "committer": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Tue Jan 28 10:42:24 2014 -0500"
      },
      "message": "Move restorecon and restorecon_recursive code to libselinux.\n\nThis requires telling libselinux to use the sehandle already\nobtained by init rather than re-acquiring it internally.  init\nretains ownership of the sehandle because it performs the\ninitial load, uses the sehandle for other purposes (e.g. labeling\nof directories created via mkdir and labeling of socket files),\nand handles the policy reload property trigger.\n\nChange-Id: I4a380caab7f8481c33eb64fcdb16b6cabe918ebd\nSigned-off-by: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\n"
    },
    {
      "commit": "ccecf1425412beb2bc3bb38d470293fdc244d6f1",
      "tree": "9fd922197bc88bed453efa0738f3dfb5d6db4c3c",
      "parents": [
        "e847f429f43ae56aaa406697ca603c8469e2100b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 10:53:11 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 12:54:18 2014 -0800"
      },
      "message": "system/core 64-bit cleanup.\n\nThis cleans up most of the size-related problems in system/core.\nThere are still a few changes needed for a clean 64-bit build,\nbut they look like they might require changes to things like the\nfastboot protocol.\n\nChange-Id: I1560425a289fa158e13e2e3173cc3e71976f92c0\n"
    },
    {
      "commit": "268cc54089cbdeb0c2ea955448bb16a0858c4538",
      "tree": "782c5c42929926dfa806fa3b410bfbad3c35b3b5",
      "parents": [
        "2dcc275936aefbb5badf3b4822d492260077144d",
        "1d4e86c44589b3a97ca0113493c2e569c3aabcc6"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sat Dec 28 20:09:52 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Dec 28 20:09:53 2013 +0000"
      },
      "message": "Merge \"ueventd: fix a busy loop while reading uevents\""
    }
  ],
  "next": "af06c6745bdf391c57ef29de4e6133f05c3b6187"
}
