)]}'
{
  "log": [
    {
      "commit": "62a4b279ab7ccff78e0c2a23456160b2ac272e06",
      "tree": "fc2f929b6927b55305ab704d688bd3b9be6f1de6",
      "parents": [
        "bff86152e5e30b25c1e9a8cd8815dbfb2a2235ad"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Fri Jan 31 15:23:09 2020 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Feb 04 13:02:49 2020 +0100"
      },
      "message": "Setup Android/, Android/data and Android/obb dirs correctly.\n\nNormally sdcardfs takes care of setting up these directories on-demand,\nfor example when an app requests its private data directory to be\ncreated. On devices without sdcardfs however, we ourselves need to make\nsure to setup the UID/GID of these directories correctly.\n\nIntroduce a new PrepareAndroidDirs() function which sets the dirs up\ncorrectly. On devices without sdcardfs, that means:\n\nPath              UID         GID         mode\n/Android          media_rw    media_rw     771\n/Android/data     media_rw    ext_data_rw  771\n/Android/obb      media_rw    ext_obb_rw   771\n\nBug: 146419093\nTest: wipe Android/, reboot, with and without sdcardfs, verify\n      contents\n\nChange-Id: I3a879089422c7fc449b6a3e6f1c4b386b86687a4\n"
    },
    {
      "commit": "0a7e9925a617dc4a309e3a6a5de268f7a577eb57",
      "tree": "9e37e53757c31bb883753fd88d93bf620579a114",
      "parents": [
        "bb972c0e0eb583a02b47eaaf4b63b577c90224ae"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Fri Jan 24 16:17:32 2020 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Mon Jan 27 14:00:29 2020 +0100"
      },
      "message": "Automatically use correct lower paths for setupAppDir.\n\nWhen we\u0027re asked to create an app directory, find the corresponding\nvolume, and use the raw path of that volume to create the directory.\nThis ensures this will continue working on devices that don\u0027t have\nsdcardfs.\n\nBug: 146419093\nTest: manual test on cuttlefish\nChange-Id: I91d735c1adbcca171e5af73aca0abd7ef396d0b7\n"
    },
    {
      "commit": "b0e977a0b1f226e8a88a5e61cc415a424fcda21a",
      "tree": "03a8dd30df2a2726a087498a0ee9a7dbd9c42486",
      "parents": [
        "60ddb198b7ac31596cb62cac52ac4e465f8f967c"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Sat Jan 11 19:24:26 2020 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Sat Jan 11 19:24:26 2020 +0100"
      },
      "message": "vold: Don\u0027t unmount /mnt/installer on start.\n\nThis is a slave bind mount of /mnt/user, created before we create the\ntwo mount namespaces. Unmounting it here prevents us from re-creating it\nin the right way, so leave it alone.\n\nBug: 134706060\nTest: verify mount is still there after vold starts\nChange-Id: Iaac91953cbb9abfef0aaac60f74b99b16c943f87\n"
    },
    {
      "commit": "8f391ad11025d7a8f96b0f382d990cc0c8362ac8",
      "tree": "1e22725f645abc1623dcea47ef2eb5b958ea4a65",
      "parents": [
        "a064500bf3e4e3ecd98c3d3b450c734540af3a7a",
        "86f21a2211d23bcf87953e7129bec601a6dce2c9"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Jan 07 10:28:14 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 07 10:28:14 2020 +0000"
      },
      "message": "Merge changes I2c1d4b42,I06fe4d33\n\n* changes:\n  Conditionally use sdcardfs.\n  Also delay creating found disks until user 0 is started.\n"
    },
    {
      "commit": "c59d774149d4786e71de085fa96e9a42aeb8cfb3",
      "tree": "301aef75cbf73d7b8a246ad1bf952234fd62ad4e",
      "parents": [
        "e3102990ca50ea1711653fbca15e9c6ff5e5cf3e"
      ],
      "author": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Mon Jan 06 21:48:16 2020 +0000"
      },
      "committer": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Mon Jan 06 21:55:13 2020 +0000"
      },
      "message": "Convert paths to lower filesystem paths during setupAppDir\n\nMaking FUSE request from vold is risky because the FUSE daemon may be\ndown and vold could get wedged.\n\nAdditionally, the FUSE daemon only responds to requests with matching\nuser id paths, i.e requests on /mnt/user/0/emulated/10 will fail.\nSo if vold (running as user 0) makes a request on\n/storage/emulated/10, it really means /mnt/user/0/emulated/10\nwhich will fail if it gets to the FUSE daemon.\n\nTODO: Fix the lower filesystem paths to support devices without\nsdcardfs\n\nBug: 141540368\nChange-Id: I90d698f6aecd114d75b6d578ad08620988da7d7d\natest: atest android.appsecurity.cts.ExternalStorageHostTest#testMediaSandboxedFull\n"
    },
    {
      "commit": "cf5916f3fa9e5eabc143dfb3669198e9ba3c3634",
      "tree": "c72bac9fd1a2e39beef909812231307f0041f676",
      "parents": [
        "13ff668775d1cc8fcbccc59b9bfe4df5324de1b1"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Fri Jan 03 14:36:45 2020 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Fri Jan 03 16:32:20 2020 +0100"
      },
      "message": "Also delay creating found disks until user 0 is started.\n\nPublic and private volumes can be discovered before user 0 is up and\nrunning; when using FUSE however, we can\u0027t mount these disks yet,\nbecause we depend on the user to become unlocked before we can start the\nFUSE daemon (which is the MediaProvider application process). So besides\nwaiting for any secure keyguard to be dismissed, also wait for user 0 to\nbe started.\n\nBug: 146419093\nTest: Boot cuttlefish with a fake public volume; is available after\nrepeated boots.\n\nChange-Id: I06fe4d336d1baec3a49886c3cf12d844a1d0eb26\n"
    },
    {
      "commit": "13ff668775d1cc8fcbccc59b9bfe4df5324de1b1",
      "tree": "8955c7dd299ea0ad1621e253dce1b45134e3fdb0",
      "parents": [
        "da4d63eaff5fea8b4bf1ff2135a6d9e98ffb0d57"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Dec 24 12:57:16 2019 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Dec 31 15:58:41 2019 +0100"
      },
      "message": "Replace mkdirs() with setupAppDir().\n\nvold historically offerred functionality to create directories on behalf\nof others. This functionality was purely used to create app-specific\ndata/obb/media dirs. Make this more explicit by renaming the method to\nindicate this.\n\nAdditionally, in the past, we never needed to care about the UID set on\nthese directories, because sdcardfs would take care of that for us\nautomatically. But with sdcardfs going away, we need to make sure the\nUID of the app-specific directories is set correctly. Allow the caller\nto pass this in as an argument.\n\nBug: 146419093\nTest: atest FuseDaemonHostTest\nChange-Id: Ibeb5fdc91b40d53583bc0960ee11c4d640549c34\n"
    },
    {
      "commit": "1986bfda8d84246637a286e079a0e322d438acc2",
      "tree": "f4d034223be743129965153a87a92e433f52623b",
      "parents": [
        "adecd0ae753ae1f5dd7e4e807d5f831bf6376eb0"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Dec 17 09:41:42 2019 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Tue Dec 17 14:43:26 2019 +0100"
      },
      "message": "Vold mkdirs should use lower filesystem.\n\nIf vold\u0027s view of /storage is FUSE, it means that creation of\ndirectories in Android/ will go through FUSE as well. The implementation\nof fs_mkdirs() tries to opendir() individual parts of the entire path;\nso for a path \"/storage/emulated/0/Android\", it will try to opendir()\n\"/storage\", \"/storage/emulated\", etc.\n\nBy default, \"/storage/emulated\" is created with 711 permissions; while\nvold itself is root, access to /storage/emulated is routed through\nMediaProvider (because of FUSE), and MediaProvider doesn\u0027t run as root,\nnor does it have the capabilities to bypass the ACL. This means that\nfs_mkdirs() as it is will fail, because opendir(\"/storage/emulated\")\nwill fail from MediaProvider.\n\nTo prevent this, route these accesses directly to the lower filesystem\n(currently, sdcardfs), by renaming the paths.\n\nBug: 146189163\nTest: atest AdoptableHostTest\nChange-Id: Idbb41b9ffad9713f3b255c51bd4de16f4d090223\n"
    },
    {
      "commit": "01fa0e0d8dc0a3606faf902a4753e32a74c3889d",
      "tree": "2571e9ddf0313f9408c9be8bcd60f26ca62018da",
      "parents": [
        "b4569d73ee85d264942659941fe29b35d5a3ce14"
      ],
      "author": {
        "name": "Abhijeet Kaur",
        "email": "abkaur@google.com",
        "time": "Fri Dec 13 10:26:32 2019 +0000"
      },
      "committer": {
        "name": "Abhijeet Kaur",
        "email": "abkaur@google.com",
        "time": "Fri Dec 13 10:26:32 2019 +0000"
      },
      "message": "Replace \"sys.fuse_snapshot\" with \"persist.sys.fuse\"\n\nWith the newly added flag for Settings developer options, which is now\nused to change the state of FUSE, PROP_FUSE now acts as the snapshot\nfeature flag for the current boot.\n\nBug: 145391093\nTest: atest AdoptableHostTest\nChange-Id: I22363b088e88c764294cbd61c6d94160c907fae3\n"
    },
    {
      "commit": "02efdf55d2cd8224d98b3df4180184542c7672d7",
      "tree": "3c6b2bb6f0b80294f3bad2bfbd0e5b98daa0a36e",
      "parents": [
        "fe83792eec52957b6f231048e3fc217035451255"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Nov 27 10:53:51 2019 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Nov 27 12:48:35 2019 +0000"
      },
      "message": "VolumeManager: limit the scope of remountUid post fork.\n\nWe want to be sure we\u0027re not allocating memory, holding locks\nor otherwise preventing the child process from making progress.\n\nThis is a temporary fix of limited scope. In the medium term, it\nwould be preferable to exec a binary that performs this work for us\nas soon as we fork.\n\nTest: manual\nBug: 141678467\n\nChange-Id: I57dbd9b3c887aa27e2dd609abf0ad43c66f4ef2a\n"
    },
    {
      "commit": "54bf4c03d13f53e45b46819cd0e1123d1d9e6afc",
      "tree": "fe9022934425bda4e706655322721cd43a7910e1",
      "parents": [
        "5048b4b2bc89a888595db79f2f480c8dacf72c43"
      ],
      "author": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Mon Nov 18 14:26:54 2019 +0100"
      },
      "committer": {
        "name": "Martijn Coenen",
        "email": "maco@google.com",
        "time": "Fri Nov 22 17:06:07 2019 +0100"
      },
      "message": "Don\u0027t automatically start user 0.\n\nIt\u0027s the responsibility of the StorageManagerService to send down\nstarted users after a reset(); and with the latest multi-user FUSE\nchanges, the manual start is no longer necessary.\n\nBug: 135341433\nTest: atest AdoptableHostTest\n\nChange-Id: I3c9c1d7c25ad10787212d7902fa3f1878ee5f896\n"
    },
    {
      "commit": "2d45d9b42063d57f8be769555fc9c47eabe74f9a",
      "tree": "b286f2c33a146fd202370509257587f2407e0857",
      "parents": [
        "a438b2436886a9d1dbb865c891cc5ec9ececba09"
      ],
      "author": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Thu Nov 14 16:19:05 2019 +0000"
      },
      "committer": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Thu Nov 14 16:28:33 2019 +0000"
      },
      "message": "Fix emulated volumes not created for secondary users\n\nIfabaa12368e5a591fbcdce4ee71c83ff35fdac6b introduced individual\nemulated volumes for each Android user. The change however didn\u0027t\ncreate the volumes for the secondary users on user start in vold\nwithout the persist.sys.fuse flag\n\nNow we always create the volumes but only mount sdcardfs volumes\nfor user 0 because the sdcardfs mount paths do not change with for\ndifferent users unlike the FUSE mount paths.\n\nBug: 144473552\nTest: atest AdoptableHostTest\nTest: Start a guest user in Settings and launch chrome browser in that\nuser, verify that chrome does not crash\n\nChange-Id: I89f3591d0197d86267f0e3934f496273e2f9fd7e\n"
    },
    {
      "commit": "a438b2436886a9d1dbb865c891cc5ec9ececba09",
      "tree": "8717e9a392b74e108a7195467b0bd7ee90ba4714",
      "parents": [
        "0ddfc941b854cb59472bb4420c1fe22d2dba1c87"
      ],
      "author": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Wed Sep 25 14:37:38 2019 +0100"
      },
      "committer": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Mon Nov 11 20:24:49 2019 +0000"
      },
      "message": "Fix multi-user and multi-storage with FUSE\n\nUp until now, the FUSE mount logic has made two assumptions:\n1. The primary external volume is an emulated volume on /data/media\n2. Only the primary user is running, as user zero\n\nThese assumptions are fixed by the following changes\ncreating an EmulatedVolume per Android user and changing the\nVolumeBase id format to append the user to the id, so\ns/emulated/emulated-0/. This allows us mount separate volumes per user\n\nSome additional refactorings to re-use/clean up code.\n\nTest: adb shell sm set-virtual-disk and partition disk operations work\neven after setting up a work profile\nBug: 135341433\n\nChange-Id: Ifabaa12368e5a591fbcdce4ee71c83ff35fdac6b\n"
    },
    {
      "commit": "de735e608bf80fe5dda1ddfd2bd375831661a5b9",
      "tree": "9a680fe6b2cbd89fc6ef2e7530019eefe9152f4a",
      "parents": [
        "e334cdcbc0b560fdf99913b6d23ace161a5b9c79",
        "5cf32b52a6f91771506020dd8ea69bab01290dbf"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Sep 27 16:09:33 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 27 16:09:33 2019 +0000"
      },
      "message": "Merge \"Use snapshot value sys.fuse_snapshot instead of persist.sys.fuse\""
    },
    {
      "commit": "5cf32b52a6f91771506020dd8ea69bab01290dbf",
      "tree": "ba78474ef9bb44931e38f2472cc9b1a28a8a7903",
      "parents": [
        "e94ef6b04d9ae5f7a32d881cf029abe357354632"
      ],
      "author": {
        "name": "shafik",
        "email": "shafik@google.com",
        "time": "Wed Sep 25 13:56:01 2019 +0100"
      },
      "committer": {
        "name": "shafik",
        "email": "shafik@google.com",
        "time": "Wed Sep 25 13:56:01 2019 +0100"
      },
      "message": "Use snapshot value sys.fuse_snapshot instead of persist.sys.fuse\n\nThis will allow us to receive values from server flags and store them in\npersist.sys.fuse without risking flag consistency during a boot.\n\nTest: manual - flip persist.sys.fuse both ways and make sure FuseDaemon\nworks as expected.\nBug: 140803239\n\nChange-Id: I839a1973c98b4eda982226d20be48d1c08e7464a\n"
    },
    {
      "commit": "981222f500baffae98bfd5949de41257a8238074",
      "tree": "057708db93a1d45cb79e4ed13b5da4989a4aa7f2",
      "parents": [
        "e94ef6b04d9ae5f7a32d881cf029abe357354632"
      ],
      "author": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Mon Sep 09 10:24:44 2019 +0100"
      },
      "committer": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Tue Sep 24 10:39:13 2019 +0100"
      },
      "message": "Bind mount lower filesystem during FUSE mount\n\nWhen mounting a FUSE device on /mnt/user/\u003cuserid\u003e/\u003cvol\u003e,\nbind mount the correspoinding lower filesystem path to\n/mnt/pass_through/\u003cuserid\u003e/\u003cvol\u003e. At Zygote fork time, an\napp with the right privilege will have the pass_through path\nbind mounted into /storage instead of the /mnt/user path.\n\nThis provides such an app direct access to the lower filesystem\nwithout going through FUSE.\n\nBug: 140064376\nTest: mount(8) shows /mnt/pass_through/0/emulated is a bind\nmount of the lower fs\n\nChange-Id: I32c3cad64138910fcec9fb8f66b206706b5fd139\n"
    },
    {
      "commit": "1711236e02b8083f7c123a532a028e2a849364d2",
      "tree": "0c412ecbc1d3550ab11898fc5c5fe8ccc516a8f6",
      "parents": [
        "a914cc764e255b639f2463976c98e92316ee27ea"
      ],
      "author": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Tue Sep 03 20:50:53 2019 +0100"
      },
      "committer": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Tue Sep 03 23:12:12 2019 +0100"
      },
      "message": "Avoid touching FUSE mounts on vold binder threads\n\nOn user unlock when persist.sys.fuse property is set,\nStorageManagerService calls into vold to link the primary\nvolumes. Because this involves accessing a FUSE path that\nhas not been initialized, vold should offload this work\nfrom the binder thread, otherwise it would wedge and the\nsystem server would wedge causing a Watchdog trigger.\n\nThis fixes a bug where we \u0027link primary\u0027 twice and vold\ngets wedged on system server restarts.\n\nBug: 140064376\nTest: with the FUSE property set:\nadb shell stop \u0026\u0026 adb shell start \u0026\u0026 adb shell ls /sdcard\n\nChange-Id: I0eb86f8ba256c385c916e2a0389a4f7482fc3775\n"
    },
    {
      "commit": "3623a212e305f022a2fe279a4c13ec2a6513d6e7",
      "tree": "11e3cd1b0ff67be927160ec2b390f1f3c419257a",
      "parents": [
        "7cd6ceb835d1116d97e01fe4757cfbe8531970d5"
      ],
      "author": {
        "name": "Zim",
        "email": "zezeozue@google.com",
        "time": "Fri Jul 19 16:46:53 2019 +0100"
      },
      "committer": {
        "name": "Nandana Dutt",
        "email": "nandana@google.com",
        "time": "Wed Aug 28 10:49:27 2019 +0100"
      },
      "message": "Mount /dev/fuse on /mnt/user/\u003cuserid\u003e/\u003cvolumeid\u003e\n\nSince system_server cannot mount devices by itself,\nadd a binder interface to vold that system_server\ncan call to initiate this mount when required.\n\nBUG: 135341433\nTest: manual\nTest: atest --test-mapping packages/providers/MediaProvider\nTest: ExternalStorageHostTest DownloadProviderTests\n\nChange-Id: If4fd02a1f1a8d921a3f96783d8c73e085c5b7ca1\n"
    },
    {
      "commit": "8f2ff80e873a78e2a21c0b301d92a377b5f01f54",
      "tree": "335c1929610ea40c0ff300e9b5d5d2e3cc8d1cf6",
      "parents": [
        "6a3ef488e5fea4f9c5992c76f4b20e7c800881c1"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu May 30 16:40:20 2019 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu May 30 16:40:20 2019 -0700"
      },
      "message": "Support \"full\" mode when updating bind mounts of a process.\n\nBug: 133829348\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nChange-Id: I5f48ecbfe8cce243fa75a2e8447ce1d4676003ad\n"
    },
    {
      "commit": "ebce4cc16b87b702d976ff2d1fcf13eb36b2e51f",
      "tree": "acbf6a5a000137c76d2d61927615338099dbe83c",
      "parents": [
        "9db42907b5ccb318da8256582782b1e4e0e9ac9f"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Apr 29 10:46:35 2019 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu May 09 17:46:30 2019 +0000"
      },
      "message": "Remove storage sandboxes related code.\n\nBug: 131115422\nTest: manual\nTest: atest --test-mapping packages/providers/MediaProvider\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nTest: atest DownloadProviderTests\nTest: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java\nTest: atest cts/tests/app/DownloadManagerLegacyTest/src/android/app/cts/DownloadManagerLegacyTest.java\nTest: atest cts/tests/app/DownloadManagerApi28Test/src/android/app/cts/DownloadManagerApi28Test.java\nChange-Id: Ib3272a47a901ed106474039e72f123b11f5443ff\nMerged-In: Ib3272a47a901ed106474039e72f123b11f5443ff\n"
    },
    {
      "commit": "36bdf7ab54f14b6b1b830bfa4e43c2c4e3c1aacd",
      "tree": "a59f2468239426b9e12a0fd8ce386fe6180234fc",
      "parents": [
        "0a9469e923f9f2e589892ea7ec3285e6ee0c4a70"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Apr 18 15:18:30 2019 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Apr 18 15:18:30 2019 -0700"
      },
      "message": "Update remountUidLegacy to handle \"full\" mount mode.\n\nBug: 130791955\nTest: manual\nChange-Id: I078c2922d1d5a8d16bbb213201a3cad7b1bf4b86\n"
    },
    {
      "commit": "a05ea743f0f405cda6fce64d25ddaa820e63271a",
      "tree": "f6fa6ef281532557b1987c04e969a2ea69821ca0",
      "parents": [
        "3654986ae506cd196984d634cd473dbcc8e0023b"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Apr 12 13:55:28 2019 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Apr 12 16:40:57 2019 -0700"
      },
      "message": "Allow sandboxed apps to access only package specific dirs.\n\nBug: 130427780\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nChange-Id: I7afcea090306336c4033860084a2a436d2bb4740\n"
    },
    {
      "commit": "58e1a816baca44e914fd74c96654f4b460943c2d",
      "tree": "a1b84c94fb7b1524202833705298cb941f590656",
      "parents": [
        "87fcd8b36a819dcfe0a85fd5fde337dcef2160bd"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 29 18:35:22 2019 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 29 19:23:40 2019 -0700"
      },
      "message": "VolumeManager: more O_CLOEXEC changes\n\nTest: compiles and boots\nBug: 129350825\nChange-Id: Ie6a0e05f1814d744eb16863f749c939ab1e097e0\n"
    },
    {
      "commit": "9bda3fe810bea92852b6fb018e9bfab28918ed13",
      "tree": "7a6e830f35fd65b11b89bc946a5d90e0e094ed4b",
      "parents": [
        "25fe2727643fbb5f46e94bdfd5796ce70155e17d",
        "4197c098dfb467a3d74b02d60ef6fec40c8de05d"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 29 18:46:07 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 29 18:46:07 2019 -0700"
      },
      "message": "Merge \"vold: cleanups for O_CLOEXEC tidy checks.\" am: a59868d6de am: 5af0c75525\nam: 4197c098df\n\nChange-Id: Ibe3636abcfafab7854c7b0434095b6e91fadcacf\n"
    },
    {
      "commit": "e7e89acbc8a7312950ee00f0da4497261fe8264f",
      "tree": "01015667b34e1e609a05b8cc0fa0d9db7711cd58",
      "parents": [
        "95587b085e5605bec6cebf7758d05731b384dbd3"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 29 16:03:51 2019 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 29 16:04:47 2019 -0700"
      },
      "message": "vold: cleanups for O_CLOEXEC tidy checks.\n\nBug: 129350825\nTest: compiles and boots\nChange-Id: I83a484ca15df1b757b670008f15af5504bc94df1\n"
    },
    {
      "commit": "4b64463572e44df008911fb53156383efe4adb36",
      "tree": "e80370258da8dd07da1e087a8955c98de586a48f",
      "parents": [
        "dfe9605bf4d29b8fd6d6a334f9f759f62b70d6fe",
        "f1baff6ddd223c549cbe8dadaf481f1314595abc"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Fri Mar 08 18:05:14 2019 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 08 18:05:14 2019 -0800"
      },
      "message": "Merge \"Don\u0027t unmount /storage for early native processes\" am: ee9554b2d9 am: b5acb5bfba\nam: f1baff6ddd\n\nChange-Id: I7107dd9d24dd07f9c17ea11d24db17db2cd10f12\n"
    },
    {
      "commit": "8d21c924d705266e5a8ec17c8c66e58a7ff63433",
      "tree": "571070c1db84bf91b58de958ed880dc365374608",
      "parents": [
        "decda14f024576acba0035cce76f8da3d660d275"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Fri Jan 04 13:35:25 2019 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Mar 04 16:22:41 2019 +0900"
      },
      "message": "Don\u0027t unmount /storage for early native processes\n\nMotivation:\n\nEarly processes launched before the runtime APEX - that hosts the bionic\nlibs - is activated can\u0027t use the bionic libs from the APEX, but from the\nsystem partition (which we call the bootstrap bionic). Other processes\nafter the APEX activation should use the bionic libs from the APEX.\nIn order to let both types of processes to access the bionic libs via\nthe same standard paths /system/lib/{libc|libdl|libm}.so, some mount\nnamespace magic is used.\n\nTo be specific, when the device boots, the init initially bind-mounts\nthe bootstrap bionic libs to the standard paths with MS_PRIVATE. Early\nprocesses are then executed with their own mount namespaces (via\nunshare(CLONE_NEWNS)). After the runtime APEX is activated, init\nbind-mounts the bionic libs in the APEX to the same standard paths.\nProcesses launched thereafter use the bionic libs from the APEX (which\ncan be updated.)\n\nImportant thing is that, since the propagation type of the mount points\n(the standard paths) is \u0027private\u0027, the new bind-mount events for the\nupdated bionic libs should not affect the early processes. Otherwise,\nthey would experience sudden change of bionic libs at runtime. However,\nother mount/unmounts events outside of the private mount points are\nstill shared across early/late processes as before. This is made possible\nbecause the propagation type of / is \u0027shared\u0027 .\n\nProblem:\n\nvold uses the equality of the mount namespace to filter-out processes\nthat share the global mount namespace (the namespace of the init). However,\ndue to the aforementioned change, the early processes are not filtered\nout because they have different mount namespaces. As a result,\numount2(\"/storage/\") is executed on them and this unmount event\nbecomes visible to the global mount namespace (because as mentioned before /\nis \u0027shared\u0027).\n\nSolution:\n\nFiter-out the early processes by skipping a native (non-Java) process\nwhose UID is \u003c AID_APP. The former condition is because all early\nprocesses are native ones; i.e., zygote is started after the runtime\nAPEX is activated. The latter condition is to not filter-out native\nprocesses created locally by apps.\n\nBug: 120266448\nTest: m; device boots\n\nChange-Id: I054deedc4af8421854cf35be84e14995523a259a\n"
    },
    {
      "commit": "23d725d85af69e0df64a9953db806986ad0f7cac",
      "tree": "b175ba5c6f6620d1bb8e58234fc93cafe7196c34",
      "parents": [
        "a9ca319cc3dc47fadcfa1ddc225471d9da023fa2"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Feb 28 10:46:48 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Feb 28 10:46:48 2019 -0800"
      },
      "message": "Ignore packages whose sandboxes are already created.\n\nBug: 124788246\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nChange-Id: Ie80bbdebc9d3d50e96d2cd17db804b7589b49055\n"
    },
    {
      "commit": "83680408415595dbda9f1126b1f38beef29bf200",
      "tree": "d86c3103a4cfff33a3d1b996427d09cf845c009f",
      "parents": [
        "30df1c61d954273ca437e0f8a1b6fd22d6d796a8"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sun Feb 24 10:16:09 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sun Feb 24 12:47:27 2019 -0800"
      },
      "message": "Look for visible vols for a user under /mnt/user/\u003cuserId\u003e/package/.\n\nCurrently, we pass down visisble volumes for a user to zygote so that\nit can set up appropriate bind mounts after forking. This method has\natleast a couple of race conditions, so instead make zygote just\nlook under /mnt/user/\u003cuserId\u003e/package for volumes that need to be\nhandled for a particular user.\n\nBug: 126069494\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nTest: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java\nTest: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*\nChange-Id: If996cde24d9fc158729fcc8a8bdb17ca952a518e\n"
    },
    {
      "commit": "30df1c61d954273ca437e0f8a1b6fd22d6d796a8",
      "tree": "09277e5a43c999a72d767125d6ff84aa5cab2117",
      "parents": [
        "727c5fad41c4153f3dd60867b23c9637f6ac91e4"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Feb 22 17:03:02 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Feb 22 17:03:02 2019 -0800"
      },
      "message": "Don\u0027t delete /mnt/user/\u003cuserId\u003e/package on reset.\n\nWe need this to stay mounted at /storage.\n\nBug: 124466384\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nTest: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*\nChange-Id: I0cc835471ced2822d83d7056bec53d62ddc682f0\n"
    },
    {
      "commit": "727c5fad41c4153f3dd60867b23c9637f6ac91e4",
      "tree": "d27872df036806c0a4d3e0d37f0bc877caf2d543",
      "parents": [
        "af607fa9965e50383cbd7a30ff8d9c828032c45d"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Feb 21 15:00:11 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Feb 21 15:12:42 2019 -0800"
      },
      "message": "Avoid creating /mnt/user/\u003cuserId\u003e/package/\u003cpackageName\u003e for all pkgs.\n\nBug: 124466384\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nTest: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java\nTest: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*\nChange-Id: I678e199ef03805bb85a8a7ad9f1f7bae0a9fc56a\n"
    },
    {
      "commit": "6d285cec244a15350fe3761c212300a1f6c63ac6",
      "tree": "590074cce9c2ea6ad5ce9d04ff21cf949adbf4d7",
      "parents": [
        "bb517accbf97c5350ef695f2432f59646b87f916"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Feb 19 14:12:20 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Feb 19 14:46:15 2019 -0800"
      },
      "message": "Ignore EEXIST errors when creating pkg specific dirs.\n\nSome of the pkg specific dirs could be created by zygote\nand vold in parallel, so ignore any EEXIST errors while\ncreating these dirs.\n\nBug: 118185801\nTest: manual\n\nChange-Id: Ifaa9998131764304867ac027af335414dbfc291c\n"
    },
    {
      "commit": "f9b38a58e163aac364fc0685c063211facb79787",
      "tree": "1e83422fd343cfd63e33ea061378b6db30bc8a9a",
      "parents": [
        "88114b2a563d5bbbc68a16566e223797f4136227"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Feb 14 19:09:51 2019 +0000"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Feb 14 19:11:20 2019 +0000"
      },
      "message": "Revert \"Revert \"Ensure necessary external storage dirs while creating sandboxes.\"\"\n\nThis reverts commit 88114b2a563d5bbbc68a16566e223797f4136227.\n\nReason for revert: blocking issue in b/124345887 is resolved\n\nChange-Id: Ie34843c12b7a471d2384b64ad049ede63aed09e8\n"
    },
    {
      "commit": "88114b2a563d5bbbc68a16566e223797f4136227",
      "tree": "375b68ad2eb109c11a79aad2c740b3bbd823089c",
      "parents": [
        "083377e593429a6db7d64de69dcc9d7209f0f66d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Thu Feb 14 15:41:28 2019 +0000"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Thu Feb 14 15:41:28 2019 +0000"
      },
      "message": "Revert \"Ensure necessary external storage dirs while creating sandboxes.\"\n\nThis reverts commit 083377e593429a6db7d64de69dcc9d7209f0f66d.\n\nReason for revert: b/124345887\n\nChange-Id: I388d45fab68b611917464a204269a48bf771ac57\n"
    },
    {
      "commit": "083377e593429a6db7d64de69dcc9d7209f0f66d",
      "tree": "1e83422fd343cfd63e33ea061378b6db30bc8a9a",
      "parents": [
        "a6082500e405363d56234ff5198b1806850e1c86"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Feb 11 19:25:51 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Feb 13 18:16:50 2019 -0800"
      },
      "message": "Ensure necessary external storage dirs while creating sandboxes.\n\nBug: 124058579\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nTest: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java\nTest: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*\n\nChange-Id: I0e62de38e9ceff80df75e253443af69d4391a49e\n"
    },
    {
      "commit": "a6082500e405363d56234ff5198b1806850e1c86",
      "tree": "375b68ad2eb109c11a79aad2c740b3bbd823089c",
      "parents": [
        "82c4b689620bebbef1c69784c551f39192fa3caf"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Feb 11 12:18:48 2019 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Feb 11 13:14:37 2019 -0700"
      },
      "message": "Enable isolated storage by default.\n\nWe\u0027ve been dogfooding the isolated storage feature for many months\non various internal groups, and we\u0027re ready to enable it globally.\n\nBug: 112545973\nTest: executed entire CTS suite using forrest\nChange-Id: I612b6aba4f08dc0ac13f4f94b03c4bddd6de12df\n"
    },
    {
      "commit": "023b5391f9778b11c151e81614ce1a3321313129",
      "tree": "dcc86183f005952614262cbc028949bed67241af",
      "parents": [
        "4928819dd55b9b6b78f5e3f2fd286edfb4cb25d2"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Feb 06 12:39:19 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Feb 06 19:36:11 2019 -0800"
      },
      "message": "Remove sandbox specific bind mounts from root namespace.\n\nUpdate vold to only create package sandboxes and not do any bind mounts.\nAfter zygote forks, all the necessary bind mounts will be setup for\nthe process.\n\nBug: 124009234\nTest: manual\nTest: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java\nTest: atest DownloadProviderTests\nTest: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java\nTest: atest MediaProviderTests\nTest: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*\n\nChange-Id: Ia42209cb74cbc423bb09c1c51cb7a164f7c568da\n"
    },
    {
      "commit": "5504901bf021742ad94a8a45cc3a7ec280e741f8",
      "tree": "363427d055e3aebed09018403829bdce694a4a3f",
      "parents": [
        "811de623a0e74c439cf51926b7ddc8738ecab0d2"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Jan 09 12:15:15 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Jan 18 18:48:55 2019 -0800"
      },
      "message": "Create a new MOUNT_EXTERNAL_LEGACY storage mode.\n\nApps that are already installed on the device before isolated_storage\nfeature is enabled will be granted MOUNT_EXTERNAL_LEGACY mode. In this\nmode, /mnt/runtime/write will be mounted at /storage giving them same\nlevel of access as in P.\n\nA new mount directory /mnt/runtime/full is also created which will be\nused for mounting at /storage for apps started with MOUNT_EXTERNAL_FULL\nmode. This will allow apps with WRITE_MEDIA_STORAGE permission to\nread/write anywhere on the secondary devices without needing to bypass\nsdcardfs.\n\nBug: 121277410\nTest: manual\nTest: atest android.appsecurity.cts.ExternalStorageHostTest\nChange-Id: Icc1ff9da35545692daedef7173d7c89290dd2766\n"
    },
    {
      "commit": "5ee228e3db5a9acac99f8ac1a159c84e5c0c56d1",
      "tree": "6c30db542d253cac61ac74eb19406402301041ec",
      "parents": [
        "8f1cc56c12f4e32d291f1b9a2fac111da36d0482",
        "34b437b3019663e752f4be884b8827ecc1346935"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Fri Jan 18 21:54:30 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 18 21:54:30 2019 +0000"
      },
      "message": "Merge \"Use \"sys.isolated_storage_snapshot\" prop to check for the feature.\""
    },
    {
      "commit": "34b437b3019663e752f4be884b8827ecc1346935",
      "tree": "232394d02b3f9c136dca7cd2eb4ac083e407ad1f",
      "parents": [
        "64918e6e4e95abf79275919e8e585ce47f55f66a"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Jan 17 17:20:47 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Jan 17 17:20:47 2019 -0800"
      },
      "message": "Use \"sys.isolated_storage_snapshot\" prop to check for the feature.\n\nStorageManager.hasIsolatedStorage() has already been updated to use\nthis, so most callers are already using this sys prop. Now, updating\nremaining callers to use it as well.\n\nBug: 122559151\nTest: manual\nChange-Id: I6982a84b737a1d329f397b8182b7b7cdc5a8897f\n"
    },
    {
      "commit": "6bf148081389e402a887a43b2e47defe69621244",
      "tree": "bd4bb52e724a423be1b6bb9f82062fb163bace0b",
      "parents": [
        "64918e6e4e95abf79275919e8e585ce47f55f66a"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Jan 17 13:38:10 2019 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Jan 17 15:18:10 2019 -0800"
      },
      "message": "Update VolumeManager to use UnmountTreeWithPrefix.\n\nBug: 122905493\nTest: manual\nChange-Id: Ia6aa1d400277a76dfd2c1db87c613d7e692b0b5c\n"
    },
    {
      "commit": "37fd66f19db161ac8578b38c70b934ef287e0e14",
      "tree": "5b06d62b6f8d6890cbdcca32efec03612172c964",
      "parents": [
        "dfd8b646210e9f57098fec670a4062bf843aba16",
        "2bc201e6bbf6bb554de85171566f63387a3c781d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 20 21:19:55 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 20 21:19:55 2018 +0000"
      },
      "message": "Merge \"vold: const-ify some of the API\""
    },
    {
      "commit": "dfd8b646210e9f57098fec670a4062bf843aba16",
      "tree": "6f1b68bb0eac21dbb266a6a01567393725e94cb2",
      "parents": [
        "c608caca3d6568d8a42efcad58291b880703b451",
        "817b911ca46af0a492cc48acb76ad6b42d825512"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Dec 20 21:11:30 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 20 21:11:30 2018 +0000"
      },
      "message": "Merge \"Update process mount points when appop gets updated.\""
    },
    {
      "commit": "ef9abab5ee25c700c0f8e865a64d565b40e6d7ff",
      "tree": "de9f57c61c732b3f221bcc6eb521a81e650700df",
      "parents": [
        "03d3856c90e002a8a313af9f361af4e1c503a176"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Tue Dec 18 08:42:08 2018 -0800"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Thu Dec 20 10:38:15 2018 -0800"
      },
      "message": "vold: const-ify some of the API\n\nWe make some of the C++ member functions \u0027const\u0027, to reflect how\nthey (don\u0027t) affect the state of the class.\n\nTest: TreeHugger\nChange-Id: Iec1c2801bfe721e2741406ed1ac0ef95662840a6\nMerged-In: Iec1c2801bfe721e2741406ed1ac0ef95662840a6\n"
    },
    {
      "commit": "2bc201e6bbf6bb554de85171566f63387a3c781d",
      "tree": "1d25f41e5c0a2e4b7dd70753429bcec06fd9ea9e",
      "parents": [
        "c608caca3d6568d8a42efcad58291b880703b451"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Tue Dec 18 08:42:08 2018 -0800"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Thu Dec 20 10:30:17 2018 -0800"
      },
      "message": "vold: const-ify some of the API\n\nWe make some of the C++ member functions \u0027const\u0027, to reflect how\nthey (don\u0027t) affect the state of the class.\n\nTest: TreeHugger\nChange-Id: Iec1c2801bfe721e2741406ed1ac0ef95662840a6\n"
    },
    {
      "commit": "ba0c62f75237efda635ed95d63b2fa8b2e351275",
      "tree": "1332a5a43b51e0c1ba4bf42fbc0503627dc1b822",
      "parents": [
        "2717699b4984cf407a7ea11d2ffbc52614113713"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sun Dec 16 18:22:34 2018 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sun Dec 16 18:35:53 2018 -0800"
      },
      "message": "Remove packageName from vold internal state.\n\nstd::remove will only move the matching items to the end, there\nshould be an erase call after that to actually get rid of those\nitems from the container.\n\nTest: manual\nChange-Id: I7d3b48f77fa5fab703fb10cf429d8c183322ed29\n"
    },
    {
      "commit": "817b911ca46af0a492cc48acb76ad6b42d825512",
      "tree": "9b24d24d2f5364dbcdec0c308bf7afcc56d806f6",
      "parents": [
        "2717699b4984cf407a7ea11d2ffbc52614113713"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Dec 13 17:40:28 2018 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sun Dec 16 16:02:14 2018 -0800"
      },
      "message": "Update process mount points when appop gets updated.\n\nWhen an app is started, it\u0027s mountmode is dependent on\nOP_REQUEST_INSTALL_PACKAGES. If user changes the appop grant of an app,\nwe need to update the mounts of any processes running in that app.\n\nBug: 121099965\nTest: atest android.appsecurity.cts.ExternalStorageHostTest#testExternalStorageObbGifts\nChange-Id: I87fee492891d33ccc9fc9e2548114f67d90cc759\n"
    },
    {
      "commit": "03992e3741e632749e8fd7f3db452d2daf983619",
      "tree": "3c83d5a0c3d491775476047cd70f5308a3447227",
      "parents": [
        "042dfdde7b1346a97b9553b37e4bd7397f32955e"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Dec 12 12:43:38 2018 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Dec 12 19:04:52 2018 -0800"
      },
      "message": "Create a new mount mode for installer packages.\n\nNew external storage mount mode for installers so\nthat they can access obb dirs of all apps.\n\nBug: 111789719\nTest: atest android.appsecurity.cts#testExternalStorageObbGifts\nChange-Id: Iab112f0273806f8f812f14d6691bbe71dff42d83\n"
    },
    {
      "commit": "1271b905600090eec4b93d7aee8b0f9e64acbdb1",
      "tree": "b34da83308c071d3830badab20a02318970f002c",
      "parents": [
        "5c801225e468fb0f32032952c01d16e16328bd4f",
        "9f7af4b6e3f8e67df467bfae853b398986bb50da"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Fri Nov 30 01:17:08 2018 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Nov 30 01:17:08 2018 -0800"
      },
      "message": "Merge \"Extract AppFuse as a util\" am: 7be8a7ee1d am: d04a16cbd5\nam: 9f7af4b6e3\n\nChange-Id: I92a3fa8828e983df876d42637913737e2b31fd4f\n"
    },
    {
      "commit": "7be8a7ee1dc78c846876959870daed771c8d77c6",
      "tree": "5409ddbbbc573001eea251af055b6d414ffc1fb9",
      "parents": [
        "396040ca2cf6e296c19c74993e7dd61dc2b5570f",
        "ac02a4863f36f28e2c50373102ae0dd1ae444e8f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 30 05:05:10 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 30 05:05:10 2018 +0000"
      },
      "message": "Merge \"Extract AppFuse as a util\""
    },
    {
      "commit": "5c801225e468fb0f32032952c01d16e16328bd4f",
      "tree": "0c05d1ed62b58eac90e9bf72b898e027d5bb7e36",
      "parents": [
        "60f121b389b63faa32b2d02b8a9f469fb02a917e",
        "8f6198d299026f3b3c727f5f044a6aee084ef6aa"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 30 01:34:21 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 30 01:34:21 2018 +0000"
      },
      "message": "Merge \"Change AppFuse mount location to vold namespace\""
    },
    {
      "commit": "60f121b389b63faa32b2d02b8a9f469fb02a917e",
      "tree": "f3c58f4fd0032eedfda46622f05d918b9f040e2b",
      "parents": [
        "6a1c15cf5bc426fed5345e0e90855cba3f253a8a",
        "2255cf528f4553695cea72fccbddac23ee4e8a87"
      ],
      "author": {
        "name": "LongPing.WEI",
        "email": "weilongping@huawei.com",
        "time": "Wed Nov 28 10:03:09 2018 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 28 10:03:09 2018 -0800"
      },
      "message": "Merge \"Use setmntent with \"e\" option\" am: 396040ca2c am: a92bdeb7f5\nam: 2255cf528f\n\nChange-Id: Ibc84f3b9d2dc8ab0707b354d64529434355f36d6\n"
    },
    {
      "commit": "8f6198d299026f3b3c727f5f044a6aee084ef6aa",
      "tree": "c1961b19581bf42889b17b2d873cb40529ca3fda",
      "parents": [
        "6a1c15cf5bc426fed5345e0e90855cba3f253a8a"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Fri Oct 26 20:56:45 2018 -0600"
      },
      "committer": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Mon Nov 26 15:30:01 2018 +0000"
      },
      "message": "Change AppFuse mount location to vold namespace\n\nPreviously, AppFuse is mounted in system_server\u0027s mount namespace. This\nCL moves the mount location to vold namespace.\n\nRelanding this since it fails to be merged on ag/5521004 (blocked by\nPresubmit, seems to be caused by temporary state) - this one now\npasses presubmit without any changes.\n\nBug: 110379912\nTest: testOpenProxyFileDescriptor passes\nChange-Id: Id93c26d5a98842c78f27850c83e15df619cec1ab\n"
    },
    {
      "commit": "4f046068117ee17f6e0e25cef785f00db2e856f8",
      "tree": "46959c8a24ba16ae1dc0b9bc4893771727215e65",
      "parents": [
        "2a683d4ce690ffdc1c5eaffee7709231d6845322"
      ],
      "author": {
        "name": "LongPing.WEI",
        "email": "weilongping@huawei.com",
        "time": "Fri Nov 23 19:27:35 2018 +0800"
      },
      "committer": {
        "name": "LongPing.WEI",
        "email": "weilongping@huawei.com",
        "time": "Fri Nov 23 19:27:35 2018 +0800"
      },
      "message": "Use setmntent with \"e\" option\n\nOtherwise it will cause selinux warning in children processes sometimes\n\nChange-Id: I41239c3f9779140622076c644a5f63051d00eaa8\n"
    },
    {
      "commit": "ac02a4863f36f28e2c50373102ae0dd1ae444e8f",
      "tree": "1d9e063c1f8af1d201c8b6d58b29961ca5754fbe",
      "parents": [
        "b2455747a92957d109a050b8f3e394d87d085086"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Wed Oct 31 21:59:47 2018 -0600"
      },
      "committer": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Wed Nov 14 07:28:06 2018 +0000"
      },
      "message": "Extract AppFuse as a util\n\nBug: 110379912\nTest: testOpenProxyFileDescriptor\nChange-Id: I0429a498d7b54682efe9b05815f3470e8745609e\n"
    },
    {
      "commit": "5f53cd3b79021843a4b0a72dfdc983f14a6023ac",
      "tree": "4efee161264f60648893a77f41ab623ca0cf2021",
      "parents": [
        "dcbce84fedd8d80055103e94043c67515e808fc4"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Fri Oct 26 20:56:45 2018 -0600"
      },
      "committer": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Tue Nov 13 22:46:23 2018 +0000"
      },
      "message": "Change AppFuse mount location to vold namespace\n\nPreviously, AppFuse is mounted in system_server\u0027s mount namespace. This\nCL moves the mount location to vold namespace.\n\nBug: 110379912\nTest: testOpenProxyFileDescriptor passes\nChange-Id: Id93c26d5a98842c78f27850c83e15df619cec1ab\n"
    },
    {
      "commit": "4d8ba072315af6addbf0ef3d0987939d5f8f3e6b",
      "tree": "1fe6befc08021ec3ad8a456217f1cad2f9c7e970",
      "parents": [
        "7f5f1b12ff8940c3d5bd842b40ce983641e33ab3",
        "a294e197b483ce3002e5e37837ad343435391f77"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Tue Nov 13 12:13:23 2018 -0800"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Nov 13 12:13:23 2018 -0800"
      },
      "message": "Merge \"StubVolume as first class Volume in Vold\" am: dcbce84fed am: 14955896e5\nam: a294e197b4\n\nChange-Id: Iaec41c8ffe6feaa59163987c914fa21edc7ae2cd\n"
    },
    {
      "commit": "8c9f33242fc79e85ff06491f05e2559fa0b2167f",
      "tree": "cf6c7d2464bc18e4158ba638c7cf73a5a01834c9",
      "parents": [
        "b3001b9f286193cf6791a979720fa5a97e21d809"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Mon Oct 29 08:52:56 2018 +0900"
      },
      "committer": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Thu Nov 08 07:40:43 2018 +0000"
      },
      "message": "StubVolume as first class Volume in Vold\n\nStubVolume is a Volume that is maintained by external party such as the\nChromeOS processes in ARC++.\n\nBug: 110380403\nTest: Tested on ARC++\n\nChange-Id: I3198bd7283d5f60a524da3707dea7385ffec599d\n"
    },
    {
      "commit": "b288bf0f446200872df8b1a66c6667e4ed4e6445",
      "tree": "ca7914a7b67f64bd9b01764699d0916c0dd152d2",
      "parents": [
        "9565b1f157b71351c8379ceff75bd90f539dc237",
        "a51283d2816f2d537c13bf77655b9eed0c3bf7a4"
      ],
      "author": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Mon Oct 29 10:41:02 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Oct 29 10:41:02 2018 -0700"
      },
      "message": "vold: rename from \"ext4 encryption\" to fscrypt am: a701c458ca am: 10b70834a4\nam: a51283d281\n\nChange-Id: I346bca3f23cfe84d77e5de1e8ef601fb7debf620\n"
    },
    {
      "commit": "a701c458ca6d36604f417f55e95c63493d1545d7",
      "tree": "5ba25fccd5eeb6a0b467142e4623d88a4072f952",
      "parents": [
        "0016efbc446910650cc041194621cc8f9ba04151"
      ],
      "author": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Tue Oct 23 13:06:55 2018 -0700"
      },
      "committer": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Thu Oct 25 17:12:32 2018 -0700"
      },
      "message": "vold: rename from \"ext4 encryption\" to fscrypt\n\nWe support file-based encryption on both ext4 and f2fs now, and the\nkernel API is the same.  So rename things appropriately in vold:\n\n    e4crypt \u003d\u003e fscrypt\n    ext4enc \u003d\u003e fscrypt\n    Ext4Crypt \u003d\u003e FsCrypt\n    EXT4_* \u003d\u003e FS_*\n    ext4_encryption_key \u003d\u003e fscrypt_key\n\nAdditionally, the common functions shared by \u0027vold\u0027 and \u0027init\u0027 are now\nin libfscrypt rather than ext4_utils.  So update vold to link to\nlibfscrypt and include the renamed headers.\n\nNote: there\u0027s a chance of \u0027fscrypt\u0027 being confused with the dm-crypt\nbased encryption code in vold which is called \u0027cryptfs\u0027.  However,\nfscrypt is the name used in the kernel for ext4/f2fs/ubifs encryption,\nand it\u0027s preferable to use the same name in userspace.\n\nTest: built, booted device with f2fs encryption\nChange-Id: I2a46a49f30d9c0b73d6f6fe09e4a4904d4138ff6\n"
    },
    {
      "commit": "69bc40f9a9753c5e028af45b6402315580107e60",
      "tree": "7f00420db59409433594e2571b60aa59372358a5",
      "parents": [
        "51a38dada72b1c0fa68c7a6586ce4a4809dfe936"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Oct 25 11:06:55 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Oct 25 11:58:43 2018 -0700"
      },
      "message": "Update StorageManagerService handling of packages info.\n\nInstead of maintaining local copy of all appIds and sandboxIds,\nStorageManagerService will just get required packages info\nfrom PackageManagerService when an user starts and passes it\nto vold.\n\nBug: 117988901\nTest: manual\nChange-Id: Idab274529e843784c8804929e920c3af63032690\n"
    },
    {
      "commit": "51a38dada72b1c0fa68c7a6586ce4a4809dfe936",
      "tree": "e074a4bdad9ddc10699b6794ff131c09481e594b",
      "parents": [
        "3ad56b76f02aea3cdf158678b40147cb52eab03a"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Oct 18 08:51:31 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sat Oct 20 21:00:13 2018 -0700"
      },
      "message": "Update shared sandbox directory structure.\n\nSandboxes for apps with sharedUserIds will live\nat Android/shared:sharedUserId/ instead of\nAndroid/shared/sharedUserId/.\n\nBug: 117573457\nTest: manual\nChange-Id: I7ab920814b501b9cdd4c58fefe81c53162b318f3\n"
    },
    {
      "commit": "b792c3a210cda7c84fe7dba1befd563a78ae4704",
      "tree": "931f0b3d1a9dc1b4d590bc519fee4d082ef71b60",
      "parents": [
        "112c9cc2f89ef543ace262f71c9322804a366671",
        "fa6a174a05a90bea18c3bedf7a2387d1851326c4"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Oct 10 21:00:04 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 10 21:00:04 2018 +0000"
      },
      "message": "Merge \"Delete package sandbox data when it is uninstalled.\""
    },
    {
      "commit": "fa6a174a05a90bea18c3bedf7a2387d1851326c4",
      "tree": "d22145f8077058409514f2af99801a1ff93e3f34",
      "parents": [
        "cba5a411d19374ef14dc9817e7879b0ec63ecd31"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Oct 04 16:26:22 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Oct 09 11:12:52 2018 -0700"
      },
      "message": "Delete package sandbox data when it is uninstalled.\n\nBug: 111890351\nTest: manual\nChange-Id: I989d507f3352959e824b161a94c0eaad6eed9bba\n"
    },
    {
      "commit": "9acc6d4398bc9270e09804183fa07cdc77c964c0",
      "tree": "c98474536f3af4655dd22b4444eda0b66fd5209d",
      "parents": [
        "cba5a411d19374ef14dc9817e7879b0ec63ecd31"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sat Oct 06 19:03:02 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sat Oct 06 19:03:02 2018 -0700"
      },
      "message": "Check isolated_storage is enabled before cleaning up sandboxes.\n\nAlso, clear packages state stored for the user being stopped.\n\nBug: 117329171\nBug: 111890351\nTest: manual\nChange-Id: Ida48fcec851830dbb756e329c20c322c631ad264\n"
    },
    {
      "commit": "c4405e9c17bf29a40787d2b9eb1cce01e9838de7",
      "tree": "fcf62d7d61a817115f3ebb270c36d3677d432486",
      "parents": [
        "9931db7e59624271953ad0a08bdfc24d3125bb16"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Sep 20 10:09:27 2018 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Oct 02 18:00:49 2018 +0000"
      },
      "message": "Protect /mnt/scratch from stale umount on userdebug\n\nOn userdebug protect /mnt/scratch. On user builds ensure that\n/mnt/scratch is considered a stale mount so it can not be used.\nvold runs before ro.debuggable is set, so this must be a compile\ntime decision.\n\nMinor technical debt cleanup associated with using android::base.\n\nTest: compile\nBug: 109821005\nChange-Id: I8efdbedfe850dd24daecf03a37aea61de47edc7d\nMerged-In: I8efdbedfe850dd24daecf03a37aea61de47edc7d\n"
    },
    {
      "commit": "86e81e718314b68efc01c7d2408452b979ddc80b",
      "tree": "4ea964c8a000eebea1ac3cf4e1bd7d5ebe109559",
      "parents": [
        "1fa13825fc64c1146f2a3910117043b4cf05aa85"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Sep 20 10:09:27 2018 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Oct 01 10:49:23 2018 -0700"
      },
      "message": "Protect /mnt/scratch from stale umount on userdebug\n\nOn userdebug protect /mnt/scratch. On user builds ensure that\n/mnt/scratch is considered a stale mount so it can not be used.\nvold runs before ro.debuggable is set, so this must be a compile\ntime decision.\n\nMinor technical debt cleanup associated with using android::base.\n\nTest: compile\nBug: 109821005\nChange-Id: I8efdbedfe850dd24daecf03a37aea61de47edc7d\n"
    },
    {
      "commit": "1fa13825fc64c1146f2a3910117043b4cf05aa85",
      "tree": "d1c5133707a54ac4e30af41c1cb5bca8aff9d6fb",
      "parents": [
        "40ab6742a7b8f96abc0fb9407df473fd310a3513",
        "65eac7fc1a1976ab6ffc1f72c29788eb7b3ffb5e"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Sep 28 20:13:09 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Sep 28 20:13:09 2018 -0700"
      },
      "message": "Merge \"Remove unmount_tree in VolumeManager.\" am: 9931db7e59 am: 96707825f2\nam: 65eac7fc1a\n\nChange-Id: I40174a2504b376ebce6962f23ce1e06b7d2c1666\n"
    },
    {
      "commit": "99d304ac6076b55c24a3391d00a44324ee0cc08e",
      "tree": "8d104a88382d0fe1af8d04574975e13a56fce7fe",
      "parents": [
        "a64572431e614a4f695bc3ba4b7daaa390b5fe70"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Sep 27 14:53:51 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Sep 28 13:38:39 2018 -0700"
      },
      "message": "Remove unmount_tree in VolumeManager.\n\nThis is not needed anymore since everything else is updated\nto use android::vold::UnmountTree.\n\nBug: 111890351\nTest: manual\nChange-Id: Idb574469763fa3438fbfc40d6da786d87ac63c38\n"
    },
    {
      "commit": "40ab6742a7b8f96abc0fb9407df473fd310a3513",
      "tree": "e7565ffda5a24aa9f0db683e6ee48fb5445c9069",
      "parents": [
        "144e7cc25ac094be4374b8eadca2b10b3ab48f2d"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Sep 18 13:07:45 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Sep 27 15:50:26 2018 -0700"
      },
      "message": "Bind mount pkg specific dirs in the zygote child namespaces.\n\n- Also update vold to create sandboxes for secondary storage devices.\n- Since bind mounts are created in the process specific namespaces, we\n  don\u0027t need /mnt/storage anymore which we were using it to prevent\n  some bind mounts from propagating onto /mnt/runtime/write.\n- Create bind mounts for {media,obb} dirs similar to data dir in\n  per process namespace.\n- Also fix a bug where we are not passing correct packages to vold when\n  a new user starts.\n\nBug: 111890351\nTest: manual\nChange-Id: I7849efc4fbf3c654606fa30de7ab2de0236d766f\n"
    },
    {
      "commit": "144e7cc25ac094be4374b8eadca2b10b3ab48f2d",
      "tree": "e271d493ee7c28c308a6387fb01d0441a3a588c2",
      "parents": [
        "2acacdb667b419f857f9497c085a955a65ee97d1",
        "e9c88c4c6c1f0b923a947d1b8577b3860f85f050"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Sep 27 13:35:28 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Sep 27 13:35:28 2018 -0700"
      },
      "message": "Merge \"Add unmountTree to utils.\" am: a64572431e am: f5b24f1015\nam: e9c88c4c6c\n\nChange-Id: Iae8f7c972272807f87b2ce9c4ba536cf6458d3cb\n"
    },
    {
      "commit": "89ddf9911973711e8a565101939d3a2a5f3a4b37",
      "tree": "e275a90d30d0a94c84aecdfe135afce39d37a79b",
      "parents": [
        "a2a227e3826712c8388fcac7fb607a26bf22ccb6"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Sep 25 14:22:07 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Sep 27 10:29:02 2018 -0700"
      },
      "message": "Add unmountTree to utils.\n\nBug: 111890351\nTest: builds without any errors\nChange-Id: I62a94c9e8d101756b686b402774f08a1d71cf875\n"
    },
    {
      "commit": "dac54dce51508ea2fe7ae72a8b38a195766f133b",
      "tree": "868cc337083c104ca3a3ab8339900b83fd2d31bd",
      "parents": [
        "4af82eff5f4eb9df59e3ace6a36634af410ae4c4",
        "3c5f6031584e44e51f7f96607f07463360bec29b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 24 10:34:26 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Sep 24 10:34:26 2018 -0700"
      },
      "message": "Merge \"Update vold to log only debug or higher level messages.\" am: 9bd07d8760 am: 92c182e4c7\nam: 3c5f603158\n\nChange-Id: I2209a3208a26ae649b4d5dc1aa18d30b6a61afcb\n"
    },
    {
      "commit": "4b6ca4ea65210c2031163895f19869a762c976e7",
      "tree": "d6127e75ba92d843ce79a4ac7f7a32e69601577e",
      "parents": [
        "15b9656ae9acfbed4af62b8cecba30c35cd514a8"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Sep 21 10:54:54 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Sep 21 11:16:51 2018 -0700"
      },
      "message": "Update vold to log only debug or higher level messages.\n\nThis will allow adding lots of verbose logs which can be enabled\nonly during local testing/debugging. Update the existing verbose\nlevel logs to debug level since we want those to be logged by\ndefault.\n\nTest: manual\nChange-Id: Ib05e2b6efa71308458d49affb6ed81d3975b28ab\n"
    },
    {
      "commit": "8915d62847bcd7e05396a1497ad04b4369dd7be7",
      "tree": "6f9287e96c20eb2de94ef1faebef4d68dd3e5e1b",
      "parents": [
        "a676df01e233c92111c5aed5c6ec9cffff138734"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Sep 18 15:14:18 2018 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Thu Sep 20 06:27:22 2018 -0700"
      },
      "message": "clang-format the rest of the files\n\nApply clang-format to fix the remaining files not fixed by\nchange I23cde3f0bbcac13bef555d13514e922c79d5ad48\n\nTest: Format-only changes; treehugger suffices.\nChange-Id: I1bfd5c8d68d298596875d5edae26cdfe27c03489\nMerged-In: I1bfd5c8d68d298596875d5edae26cdfe27c03489\n"
    },
    {
      "commit": "edf7a4eb95824ea1656daafe3d9ecbabb093586e",
      "tree": "ea151c2d743a834d0eab48f723c90b4396913398",
      "parents": [
        "b2efa615db0c0f96f925548bfe095245c5a7483f"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Sep 18 15:14:18 2018 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Wed Sep 19 19:45:27 2018 -0700"
      },
      "message": "clang-format the rest of the files\n\nApply clang-format to fix the remaining files not fixed by\nchange I23cde3f0bbcac13bef555d13514e922c79d5ad48\n\nTest: Format-only changes; treehugger suffices.\nChange-Id: I1bfd5c8d68d298596875d5edae26cdfe27c03489\n"
    },
    {
      "commit": "c756209b898c3951a5d76f84f43d71964b26e498",
      "tree": "656439e810ea05162982b421c228d6dffec843d3",
      "parents": [
        "4a923e216dd653e668724e8093e12efbd6c0a4f0"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Aug 24 10:20:56 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Aug 24 12:35:56 2018 -0700"
      },
      "message": "Create sandboxes for newly installed apps.\n\nBug: 111890351\nTest: manual\nChange-Id: I1b7f5bd25e04f9f4a61d0d4f64bbbb0ca6157fa5\n"
    },
    {
      "commit": "3a7ee5c2aefb1b20c17eab14574c534d20d6f211",
      "tree": "65df5c2e5eb765be374e22e8a07eb2b8333636db",
      "parents": [
        "f2ccd56e7a4207c1bc5a83d4bd36101bf0028182"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Aug 07 17:10:11 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Aug 23 21:40:07 2018 -0700"
      },
      "message": "Use /mnt/storage for bind mounting package sandboxes.\n\nCreate a new slave bind mount at /mnt/storage and use this for\ncreating package sandboxes. This will help prevent package\nspecific data directories from getting duplicated and also make\nhandling bind mounts for packages with sharedUserIds easier.\n\nBug: 111890351\nTest: manual\nChange-Id: I0f590cc99a379d93f6db85bf56e8d274e3ea7488\n"
    },
    {
      "commit": "5cc0d564c8277a11a066188e03e7100cf1b9f04d",
      "tree": "efb132b2c501be5c6013b8e6e542408f40e8b733",
      "parents": [
        "0ba33ed3dbdfd3ea2ec31aa07878492d75f3ba5f",
        "f768c271a3a817c9a60b7454631a42d065eb36af"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Aug 07 19:09:06 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 07 19:09:06 2018 +0000"
      },
      "message": "Merge \"Update sandbox structure for apps with sharedUserIds.\""
    },
    {
      "commit": "f768c271a3a817c9a60b7454631a42d065eb36af",
      "tree": "1397fb8b81d0ec132efda6e36daf940194a214a2",
      "parents": [
        "a8341e8779dc24c6b83913940dd58add9ac27626"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sat Aug 04 10:10:27 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Aug 07 10:47:38 2018 -0700"
      },
      "message": "Update sandbox structure for apps with sharedUserIds.\n\nFor apps with sharedUserIds, sandbox/shared:\u003cshared-user-id\u003e is\ncurrently used as sandbox root. Given that \u003cshared-user-id\u003e can\nbe upto 255 characters, adding \"shared:\" might tip over the\nfilename limit on ext4 filesystems. So, instead use\nsandbox/shared/\u003cshared-user-id\u003e as the sandbox root.\n\nBug: 111890351\nTest: manual\nChange-Id: Iba437b3eed59f9eb3094a823e8bf2a5a58410fd7\n"
    },
    {
      "commit": "a695f25518591a8ed8a7b5872dfe86e90056a537",
      "tree": "8d9040917655428233d15179996e2a21d9e6e010",
      "parents": [
        "53947a36629425f9e63f9c422e567fd0a6c19dfc"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Aug 03 18:07:52 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Aug 03 18:17:03 2018 -0700"
      },
      "message": "Keep /sdcard working for shell process when isolated storage is enabled.\n\nThis is same as what we are doing as of P, symlinking\n\"/mnt/user/\u003cuser-id\u003e/primary\" to primary volume path.\n\nBug: 111890351\nTest: manual\nChange-Id: I3bc538401bf56fd6243ce7eca424cc4c9b585974\n"
    },
    {
      "commit": "53947a36629425f9e63f9c422e567fd0a6c19dfc",
      "tree": "e2e9a36e70322b19c097ae37e93ebb529990b853",
      "parents": [
        "62bbb2b1d204dd3ee09d7082bbe89e7f8d2c52d6"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Aug 01 10:24:13 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Aug 01 10:24:13 2018 -0700"
      },
      "message": "Update vold to prepare package sandboxes for primary volume.\n\nVold is updated to create package specific sandboxes for primary\nvolume and mount them at\n\"/mnt/user/\u003cuser-id\u003e/package/\u003cpackage-name\u003e/\u003cprimary-label\u003e\".\nThis will later be mounted at /storage when a new process starts.\n\nBug: 111890351\nTest: Manually verified that a package has access to \"/sdcard\" and\n      \"/storage/emulated/0\", both of which are just the package specific\n      sandboxes and the package doesn\u0027t have access to other sandboxes\n      and can\u0027t see other package names.\n\nChange-Id: I72dc8ae9eb2260a298159c5de18387dad2f9de48\n"
    },
    {
      "commit": "62bbb2b1d204dd3ee09d7082bbe89e7f8d2c52d6",
      "tree": "59f1f57dd904be22abf16256b3c4615b6ad4c195",
      "parents": [
        "ebaad1c848d6363b2a8a837f7b4256ab3c750688"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Aug 01 01:09:10 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Aug 01 01:23:15 2018 -0700"
      },
      "message": "Update vold to handle package info from StorageManagerService.\n\nBug: 111890351\nTest: n/a\nChange-Id: I098ad4bc15fae843909d97dad5d301a4e53d51bc\n"
    },
    {
      "commit": "ebaad1c848d6363b2a8a837f7b4256ab3c750688",
      "tree": "3f3844e345d4ad9661e45a561d11b066fed72528",
      "parents": [
        "76c6bdab9c479613de48d09aabfb6e31c170141f"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Jul 31 16:39:59 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Aug 01 07:16:28 2018 +0000"
      },
      "message": "Update IVold interface to take packageNames when a user starts.\n\nBug: 111890351\nTest: n/a\nChange-Id: Ia24f15112f9a4ee4994688ff8fedf786cbf479b7\nExempt-From-Owner-Approval: This was approved as part of http://ag/4494673\n"
    },
    {
      "commit": "d484aa9dadd0096c35d3b448daba17421422e19f",
      "tree": "986d6429f80943b7243da81ce9b5230ae84d632a",
      "parents": [
        "f101236657437d5f148ef0ecbe7c33a8eac1ee5a"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Jul 31 10:07:34 2018 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Jul 31 10:07:34 2018 -0700"
      },
      "message": "Add APIs for pushing package info to vold.\n\nBug: 111890351\nTest: n/a\nChange-Id: I3194a88a9ce612a2e4f2c7ea9e3392e0f8020fc1\n"
    },
    {
      "commit": "3d4fb41f3d6719a03a9a931267f7e14637dee922",
      "tree": "b87a26ba9e4880dec461f0f87912fc3b405e2359",
      "parents": [
        "8d4da293128cf03dfe42deb305a54d6ab3c07775",
        "4a625453bfa6f42997d90be20e0499bdbe82bbaa"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Mon Jul 02 19:03:58 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jul 02 19:03:58 2018 -0700"
      },
      "message": "Merge \"Do not unmount /mnt/product/* when vold starts\"\nam: 4a625453bf\n\nChange-Id: Idd91865540106b5030f74b26037b61c00719ef28\n"
    },
    {
      "commit": "c0cd37be9dd66d5fe7448389a71ee21f60e876e1",
      "tree": "ba8555d4ff19ee947085aba0cef361a2e0b91773",
      "parents": [
        "e98adee732f773c281aeb1acef8a992a67d22571"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Fri Jun 29 10:31:07 2018 +0800"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Fri Jun 29 13:35:43 2018 +0800"
      },
      "message": "Do not unmount /mnt/product/* when vold starts\n\nBug: 110808288\nTest: Boot a device and checks /mnt/product/foo mounted in early mount\n      isn\u0027t unmounted.\n\nChange-Id: Ide411cd78565505bc72ed57e79f3d31b6392b27c\n"
    },
    {
      "commit": "e98adee732f773c281aeb1acef8a992a67d22571",
      "tree": "80858f79b87b25b655ac01a039bc6ab2f60c4515",
      "parents": [
        "17a93d50018956573bb2fa3b5934679bea075e3f"
      ],
      "author": {
        "name": "Tri Vo",
        "email": "trong@google.com",
        "time": "Mon Apr 16 14:27:10 2018 -0700"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Fri Jun 29 12:22:01 2018 +0800"
      },
      "message": "Exclude /mnt/vendor from vold\u0027s ownership.\n\nAddresses this selinux denial:\navc: denied { search } for name\u003d\"vendor\" dev\u003d\"tmpfs\" ino\u003d11069\nscontext\u003du:r:vold:s0 tcontext\u003du:object_r:mnt_vendor_file:s0 tclass\u003ddir\npermissive\u003d0\n\nBug: 64905218\nTest: fixes above denial.\nChange-Id: I670b2148e65c7e0fcabd1e11f5bace0c4f4e18bd\nMerged-In: I670b2148e65c7e0fcabd1e11f5bace0c4f4e18bd\n(cherry picked from commit bca5cd78fe14292079e2ffd63912f51e974c7fc3)\n"
    },
    {
      "commit": "bca5cd78fe14292079e2ffd63912f51e974c7fc3",
      "tree": "98a0460e7098217f2c2987e90647ba5a99100ec2",
      "parents": [
        "c1903ad3d65a04fab97268db3a2782697b0bbfc4"
      ],
      "author": {
        "name": "Tri Vo",
        "email": "trong@google.com",
        "time": "Mon Apr 16 14:27:10 2018 -0700"
      },
      "committer": {
        "name": "Tri Vo",
        "email": "trong@google.com",
        "time": "Mon Apr 16 14:33:53 2018 -0700"
      },
      "message": "Exclude /mnt/vendor from vold\u0027s ownership.\n\nAddresses this selinux denial:\navc: denied { search } for name\u003d\"vendor\" dev\u003d\"tmpfs\" ino\u003d11069\nscontext\u003du:r:vold:s0 tcontext\u003du:object_r:mnt_vendor_file:s0 tclass\u003ddir\npermissive\u003d0\n\nBug: 64905218\nTest: fixes above denial.\nChange-Id: I670b2148e65c7e0fcabd1e11f5bace0c4f4e18bd\n"
    },
    {
      "commit": "32a5b9aed304e6619248cb58727e8b29d61d3b1c",
      "tree": "a93c6f7024349fa0db819c8d050bc2e420f6563f",
      "parents": [
        "401b2603516a64d3ee7804e270c966828e6b454a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 12:38:47 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 12:38:47 2017 -0800"
      },
      "message": "StartsWith now allows std::string prefixes.\n\nBug: N/A\nTest: builds\nChange-Id: I2e24632e95f2bf929c2c000152c5c4076d53186e\n"
    },
    {
      "commit": "401b2603516a64d3ee7804e270c966828e6b454a",
      "tree": "3f3e72637a13b91fda19d2b8919453bbca6a2a94",
      "parents": [
        "0667b7e7ddb797a6b5dae029f3c7a50d5ca10977"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Dec 14 22:15:20 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Dec 15 13:44:55 2017 -0700"
      },
      "message": "Delay touching disks when secure keyguard showing.\n\nWe\u0027ve tried our best to protect against malicious storage devices\nwith limited SELinux domains, but let\u0027s be even more paranoid and\nrefuse to look at disks inserted while a secure keyguard is\nshowing.  We\u0027ll gladly scan them right away once the user confirms\ntheir credentials.\n\nTest: builds, boots, manual testing\nBug: 68054513\nChange-Id: I37fd6c25bbd6631fa4ba3f84e19384d746a22498\n"
    },
    {
      "commit": "b64933a5021ee9666388b781b542f11ef7665673",
      "tree": "629ca20d3c4907555eacb2636b33278ba24616c1",
      "parents": [
        "2048a2865cfa1f8c794b94eb044854f130943f9c"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Oct 31 08:25:55 2017 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Oct 31 08:40:23 2017 -0700"
      },
      "message": "Be even more C++. Switch on a warning.\n\nRemove lots of \"extern C\" and \"ifdef __cplusplus\" which are no longer\nneeded now all of vold is C++. Also turn on the cert-err58-cpp warning\nwe once had to disable.\n\nBug: 67041047\nTest: compiles, boots\nChange-Id: I8c6f9dd486f2409e0deed7bb648d959677465b21\n"
    },
    {
      "commit": "c6433a299df633c45d714a20fe3672b9b86d9312",
      "tree": "44222958dd24f47012cb06e3eb903ef3fa09388a",
      "parents": [
        "ff19b05e8ecf5349aa2fb0939446c1de760d8c87"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Tue Oct 24 14:54:43 2017 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Thu Oct 26 12:19:03 2017 -0700"
      },
      "message": "Forget keys when we forget the volume.\n\nBug: 25861755\nTest: create a volume, forget it, check logs and filesystem.\nChange-Id: I0ab662969c51703cb046d57b72330e0f14447ef3\n"
    },
    {
      "commit": "3ce18256a1e2edf830830f066e5ddb4c8203111b",
      "tree": "4015d01f68255d4f03589bb88987c15cdf1234c9",
      "parents": [
        "ac46172c79bae9fe52f15fc0f0867c2e904cb10e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Oct 24 11:08:45 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Oct 24 12:19:47 2017 -0600"
      },
      "message": "Pass both partition GUID and filesystem UUID.\n\nFDE keys are indexed using the partition GUID, while FBE keys will be\nindexed using the filesystem UUID, so pass both of those identifiers\nalong when forgetting a volume.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest\nBug: 25861755\nChange-Id: I6e239d5ba67a01c9a848d705f6167da00f975924\n"
    },
    {
      "commit": "c923127e23056f2883f9f89e81d0a02ad79fc520",
      "tree": "d7216345ed11937f49147df1dfb73683041ac0f8",
      "parents": [
        "7718457dfcfb3533b89174acaa584011bafe72e9",
        "6419445383a85a676814f0337ece4717ce9ce0a5"
      ],
      "author": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Tue Oct 24 17:19:58 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Oct 24 17:19:58 2017 +0000"
      },
      "message": "Merge \"Check that dir name is a pid before attempting to read\"\nam: 6419445383\n\nChange-Id: I8b7639934bcee660bcd84f83afae5cc2c17bae15\n"
    },
    {
      "commit": "9fd7559813898f2c0da713add24a08dfab6f864d",
      "tree": "91e7d8e3506a9bb8860e7d2d829111a3f80ce7f2",
      "parents": [
        "947a57e76dfa5b46bef11254d9eb84d9cf7b1586",
        "5889083d719432f466ebf0f271b21d8141b67a14"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 24 16:04:22 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 24 16:04:22 2017 +0000"
      },
      "message": "Merge \"Check that dir name is a pid before attempting to read\""
    },
    {
      "commit": "a997db73d64e748ecf20c2de3e517c19247c5e81",
      "tree": "465cd541047632edebbfbc84d5897e1762a369ed",
      "parents": [
        "2890b8d21565be4349956c67261cd370e4814c28"
      ],
      "author": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Mon Oct 23 17:12:31 2017 -0700"
      },
      "committer": {
        "name": "Jeffrey Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Tue Oct 24 14:04:27 2017 +0000"
      },
      "message": "Check that dir name is a pid before attempting to read\n\nPrevents selinux denials for folders in /proc that do not have the\ndefault /proc label.\n\nBug: 68146208\nTest: no selinux denials for vold attempting to read proc_asound dir.\nMerged-In: I7cdd3bbe8e687e078372012773e9a34a5c76e0f8\nChange-Id: I7cdd3bbe8e687e078372012773e9a34a5c76e0f8\n"
    },
    {
      "commit": "5889083d719432f466ebf0f271b21d8141b67a14",
      "tree": "45bf6f777650c3d7cf87135df2ae7a999d93a811",
      "parents": [
        "8646da062aef442945d2130b87819ecd36bc63c0"
      ],
      "author": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Mon Oct 23 17:12:31 2017 -0700"
      },
      "committer": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Tue Oct 24 07:03:01 2017 -0700"
      },
      "message": "Check that dir name is a pid before attempting to read\n\nPrevents selinux denials for folders in /proc that do not have the\ndefault /proc label.\n\nBug: 68146208\nTest: no selinux denials for vold attempting to read proc_asound dir.\nChange-Id: I7cdd3bbe8e687e078372012773e9a34a5c76e0f8\n"
    },
    {
      "commit": "56292ef1198fbeb6a12c27c7b4f42e89c933e049",
      "tree": "2d1ecccc68f474dea3c1b0a33ebac63b0a523c63",
      "parents": [
        "4ddf576ca8e6f2cea26f09b995db41c923f40c0f"
      ],
      "author": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Fri Oct 20 08:07:53 2017 -0700"
      },
      "committer": {
        "name": "Paul Crowley",
        "email": "paulcrowley@google.com",
        "time": "Fri Oct 20 10:05:36 2017 -0700"
      },
      "message": "Undo Utils dependency on VolumeManager\n\nI want to use Utils in another executable, so breaking this link.\n\nBug: 25861755\nTest: compiles (and boots, though that doesn\u0027t exercise changed code)\nChange-Id: I6bb447453bb370fefb7f2f3aceb459428bdee6a7\n"
    },
    {
      "commit": "3472e52fc259b6a549acece21d4901d99d6a421f",
      "tree": "12decd0c39011b3469bda1e3490d677d3721b44a",
      "parents": [
        "3b71fc51005ac566fd8120f01b784d5f251ad886"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Oct 06 18:02:53 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Oct 17 12:40:51 2017 -0600"
      },
      "message": "Move to modern utility methods from android::base.\n\nMoves away from crufty char* operations to std::string utility\nmethods, including android::base methods for splitting/parsing.\n\nRewrite of how Process handles scanning procfs for filesystem\nreferences; now uses fts(3) for more sane traversal.\n\nReplace sscanf() with new FindValue() method, also has unit tests.\n\nRemove some unused methods.  Switch almost everyone over to using\nmodern logging library.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsOsTestCases -t android.os.storage.cts.StorageManagerTest\nTest: cts-tradefed run commandAndExit cts-dev --abi armeabi-v7a -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.AdoptableHostTest\nBug: 67041047\nChange-Id: I70dc512f21459d1e25b187f24289002b2c7bc7af\n"
    }
  ],
  "next": "b21add1d79bc5b50cd303d94a24f420f67b23ac8"
}
