Commit graph

43399 commits

Author SHA1 Message Date
Ivan Lozano
df3cec925f Tombstone support for XOM-related SIGSEGVs.
Make XOM related crashes a little less mysterious by adding an abort
cause explaining the crash.

Bug: 77958880
Test: Abort cause in tombstone for a XOM-related crash.

Change-Id: I7af1bc251d9823bc755ad98d8b3b87c12bbaecba
2018-11-27 09:00:54 -08:00
Treehugger Robot
ee9d6382d1 Merge "Switch from dist-for-goals to dist in Android.bp" 2018-11-27 00:59:19 +00:00
David Anderson
66a6d8877c Merge "fastbootd: Support two super partitions for retrofit devices." 2018-11-21 17:40:43 +00:00
David Anderson
8771a95e4c Merge "fastboot: Warn when flashing dynamic partitions in the bootloader." 2018-11-21 17:40:01 +00:00
David Anderson
6900fce913 Merge "liblp: Modify NewForUpdate to accomodate two super partitions." 2018-11-21 17:36:48 +00:00
David Anderson
c15618a2c6 liblp: Modify NewForUpdate to accomodate two super partitions.
This method was designed for a single-super model, and now needs to
change to accomodate two super partitions (system_a and system_b, for
retrofitting).

NewForUpdate is supposed to transition metadata from one block device
to the next for updates. For normal devices this is a no-op, since
metadata only exists on one partition (super). For retrofit devices,
metadata exists on system_a and system_b. This has two implications.

First, any references to the source slot must be rewritten. For example
"vendor_b" must become "vendor_a". However this is not true of partition
names. Partitions/extents are cleared in the updated metadata since they
no longer have any meaning (the block device list has been
rewritten). We also clear groups since they are re-added during OTA.

The reason we have to do this rewriting is that slot suffixes are
automatically applied in ReadMetadata. We do not have access to the
original unsuffixed metadata that was written by the initial OTA.
This was a conscious design decision, since it localizes retrofitting
idiosyncracies to just a few places (ReadMetadata, NewForUpdate, and
fastbootd), minimizing the number of external callers that have to
understand auto-slot-suffixing.

It would be arguably cleaner if retrofit metadata was always serialized
*without* slot suffixes, thereby making NewForUpdate a no-op. However
this would necessitate changes to the API elsewhere. The functions that
read partition names would have to take a slot suffix, and this would
further complicate MetadataBuilder and fastbootd. Another solution would
be to augment LpMetadata to retain unsuffixed information, but this is
probably not worthwhile given that retrofitting is intended to be
surgical, and will have a shorter lifespan than the non-retrofit case.

Bug: 116802789
Test: liblp_test gtest
Change-Id: I33596d92b38c47bc70bc0aa37ed04f6f0b9d4b6f
2018-11-21 17:36:28 +00:00
David Anderson
d25f1c3775 fastbootd: Support two super partitions for retrofit devices.
Retrofit devices will have two super partitions, spanning the A and B
slots separately. By design an OTA will never cause "A" or "B"
partitions to be assigned to the wrong super. However, the same is not
true of fastbootd, where it is possible to flash the inactive slot. We
do not want, for example, logical "system_a" flashing to super_b.

When interacting with partitions, fastbootd now extracts the slot suffix
from a GetSuperSlotSuffix() helper. On retrofit devices, if the partition
name has a slot, that slot will override FastbootDevice::GetCurrentSlot.
This forces partitions in the inactive slot to be assigned to the correct
super.

There are two consequences of this. First, partitions with no slot
suffix will default to the current slot. That means it is possible to
wind up with two "scratch" partitions, if "adb remount" is used on both
the "A" and "B" slots. However, only the active slot's "scratch" will be
visible to the user (either through adb or fastboot).

Second, if one slot does not have dynamic partitions, flashing will
default to fixed partitions. For example, if the A slot is logical and B
is not, flashing "system_a" will be logical and "system_b" will be
fixed. This works no matter which slot is active. We do not try to
upgrade the inactive slot to dynamic partitions.

Bug: 116802789
Test: fastboot set_active a
      fastboot flashall # dynamic partitions
      fastboot getvar is-logical:system_a # true
      fastboot getvar is-logical:system_b # false
      fastboot set_active b
      fastboot flashall --skip-secondary
      fastboot getvar is-logical:system_a # true
      fastboot getvar is-logical:system_b # true
      Booting both slots works.

Change-Id: Ib3c91944aaee1a96b2f5ad69c90e215bd6c5a2e8
2018-11-20 13:47:01 -08:00
Treehugger Robot
9c637f3823 Merge "storaged: emplace recent_perf in load_perf_history_proto" 2018-11-20 20:36:19 +00:00
David Anderson
8956964ee2 fastboot: Warn when flashing dynamic partitions in the bootloader.
On retrofit devices, it is easy to accidentally overwrite
system/vendor/product by flashing system in the bootloader. The reason
is that GPT system_a is really the super partition, and the bootloader
doesn't know it.

Addressing this in bootloaders would require two separate commands: one
that rejects flashing system/vendor/product, and another for
expert/factory use that would allow direct flashing.

This patch introduces protection into the host fastboot tool instead.
It's not mutually exclusive with bootloader changes; having protection
in the host tool affords us better and consistent UI. However it does
rely on users having newer builds.

With this change, the following will not work in the bootloader:

    fastboot flash system       # or vendor, product, etc

The message is the same whether or not the device is a retrofit. To
continue anyway, you can do:

    fastboot flash --force system

If we decide on bootloader protection as well, the --force flag can be
re-used.

Bug: 119689480
Test: fastboot flash system # disallowed in bootloader, allowed in fastbootd
      fastboot flash --force system # allowed in bootloader
Change-Id: I0861e3f28a15be925886d5c30c7ebd4b20c477cf
2018-11-20 12:10:16 -08:00
David Anderson
27be9f1ffd Merge "liblp: Enable building on Windows." 2018-11-20 19:30:32 +00:00
Mark Salyzyn
0ade88c83d storaged: emplace recent_perf in load_perf_history_proto
If recent_perf contains existing content, overwrite in method
load_perf_history_proto.  If proto of recent_perf contains a lot of
history, the content would have grown with system_server crashes.

Test: setprop ro.storaged.flush_proto.interval 60
      while true;do sleep 5;stop;sleep 1;start;ps -A|grep storaged;done
      and look at value for rss should remain about 4MB over long term.
Bug: 119798824
Change-Id: I50aae7d61eb791a8fcddbbd829254baf8f708186
2018-11-20 09:00:05 -08:00
Treehugger Robot
630d803dee Merge "llkd: do not crash kernel if llkd stops running" 2018-11-20 16:10:51 +00:00
Dan Willemsen
3f439a7a88 Switch from dist-for-goals to dist in Android.bp
Removes a few more Android.mk files.

Test: check for adb, mkbootfs, and fastboot in the build artifacts
Change-Id: Ie4e50a363a734d0b9207f0d0098c54719f038e76
2018-11-19 23:06:12 -08:00
David Anderson
a3c47e63a6 liblp: Enable building on Windows.
Bug: 119689480
Test: builds when fastboot.exe uses liblp
Change-Id: I8ba2ad51d806c4650a0f35d41e4906b703d4661d
2018-11-19 16:20:51 -08:00
Mark Salyzyn
b3418a2255 llkd: do not crash kernel if llkd stops running
Today, assume llkd is not hardened enough to 100% guarantee that
lack of progress in inspection loops is a direct result of a
livelock condition affecting llkd itself.  Log a fatal alarm to
make init restart llkd instead for the time being.

ToDo: develop trust in llkd regarding sigalarm causes.

Test: compile
Bug: 119781757
Change-Id: I668dc1773898da6c95aad7221724b16f1684b067
2018-11-19 15:26:20 -08:00
David Anderson
eb1213f170 Merge "liblp: Auto-suffix group names." 2018-11-19 22:37:33 +00:00
Treehugger Robot
cfd0b6c19d Merge "Writes cpu variant information to dev/" 2018-11-19 21:37:32 +00:00
David Anderson
7256eaa1b4 liblp: Auto-suffix group names.
This is needed for update_engine to properly clean old partitions on
retrofit devices.

Bug: 119687874
Test: liblp_test gtest
Change-Id: Ida9483ad3c127e357f45789540ebbedc9d3d3883
2018-11-19 11:20:09 -08:00
Haibo Huang
d60a19b184 Writes cpu variant information to dev/
This change adds a command to init.rc to write cpu variant information to a file under dev/

Test: sync to device and make sure corresponding files are created.
Change-Id: Ibf90967f13f72af925c82ff79bd973ef4cdc4068
2018-11-19 18:57:50 +00:00
Treehugger Robot
8995970ce3 Merge "fs_mgr: remove by_name_symlinks_map_ from AvpOps" 2018-11-19 05:56:36 +00:00
Treehugger Robot
87a0865648 Merge "Convert libpixelflinger to Android.bp" 2018-11-17 06:06:34 +00:00
Dan Willemsen
596e2217e2 Convert libpixelflinger to Android.bp
See build/soong/README.md for more information.

Test: cd system/core/libpixelflinger; mma
Change-Id: I2354e5bc6b0b8a10d598e3677bc63962f70bf7bc
2018-11-16 19:15:38 -08:00
Treehugger Robot
e04aa9e03a Merge "Don't fail when no glob match" 2018-11-17 00:54:39 +00:00
Treehugger Robot
10654730a4 Merge "logical -> dynamic partitions." 2018-11-16 23:47:45 +00:00
Yifan Hong
6af857f21d Merge "liblp: MetadataBuilder::HasBlockDevice" 2018-11-16 23:14:38 +00:00
Yifan Hong
0e0f818c8a logical -> dynamic partitions.
Reflect a name change.
Test: boots
Bug: 119286600

Change-Id: I076071be18be521eeee4ebae10491b9f3e8ef857
2018-11-16 12:53:18 -08:00
Josh Gao
3a2bd498f8 Merge "Fix double closes in ziparchive tests." 2018-11-16 19:58:27 +00:00
Josh Gao
5db84229e1 Fix double closes in ziparchive tests.
Bug: http://b/119632446
Test: setprop debug.fdsan fatal && /data/native64/ziparchive-tests/ziparchive-tests
Change-Id: I3a9e6f3823ba49c56602041779cb085a6971ca6d
2018-11-16 19:54:41 +00:00
Mark Salyzyn
5d4f420c8c Merge changes Iffbd6261,Ic7382a61
* changes:
  fs_mgr: overlayfs: test: adding diagnostic value
  fs_mgr: overlayfs: test: skip apex mounts
2018-11-16 15:17:44 +00:00
Jiyong Park
f169f72fba Don't fail when no glob match
There can be no match when there is no APEX installed or no APEX is
providing *.rc file. Don't fail in that case.

Bug: 117403679
Test: m apex.test; m; device is is bootable

Change-Id: Ib1c607ee2c156dc236da1df7df0c6663e8d899b2
2018-11-16 18:08:46 +09:00
Christopher Ferris
78bde50e21 Merge "Remove overly restrictive check for memory." 2018-11-16 06:30:49 +00:00
Elliott Hughes
a59ecfd940 Merge "Stop using __STRING unnecessarily." 2018-11-15 23:04:41 +00:00
Mark Salyzyn
271485feba fs_mgr: overlayfs: test: adding diagnostic value
Add a test report df before overlay applied to make it clearer what
the device looked like before applying for remount.  Check error
code from adb disable-verity and use that to terminate test if bad.
Collect a sliced logcat for failures to help diagnose problems.
If the device does not come back after flashing, timeout and fail
when waiting.  Fix some issues that result when running script under
set -x when diagnosing the tests logistics.

Test: adb-remount-test.sh
Bug: 109821005
Change-Id: Iffbd6261703393417cb6ec3a12042d59523c348d
2018-11-15 23:02:29 +00:00
Mark Salyzyn
0733a86990 fs_mgr: overlayfs: test: skip apex mounts
Strip out /dev/block/loop* devices to filter out apex mounts.  Deal
with scale of skip_administrative_mounts function to make for easier
maintenance.

Test: adb-remount-test.sh
Bug: 109821005
Bug: 112455435
Change-Id: Ic7382a613db8f3ac7cdc10721194042378d136b9
2018-11-15 23:01:27 +00:00
Yifan Hong
dca3b3bb2c liblp: MetadataBuilder::HasBlockDevice
Query whether a block device is used in the metadata.

Test: pass
Bug: 118506262
Change-Id: I67196b68918ac232e735b10a850299f8653e4d3f
2018-11-15 14:45:41 -08:00
Christopher Ferris
5565906732 Remove overly restrictive check for memory.
Remove unit test that is not needed any more.

Slightly reorganize the code around the changed check.

Bug: 77958880

Test: Ran backtrace tests with new linker options.
Test: Ran libunwindstack unit tests.
Change-Id: Ie95707323fb51616a093cafb83e0343fa24e7e61
2018-11-15 14:06:26 -08:00
Treehugger Robot
5729cff611 Merge "liblp: partition_opener: fix log; more logs" 2018-11-15 02:01:34 +00:00
Janis Danisevskis
2fda3db108 Merge "Multi-threaded Keystore" 2018-11-15 01:19:10 +00:00
Treehugger Robot
2979d385cb Merge "base: TemporaryDir add DoNotRemove() method" 2018-11-15 00:37:03 +00:00
Treehugger Robot
baa4818925 Merge changes from topic "TemporaryDir rm -rf"
* changes:
  base: TemporaryDir rm -rf directory in destructor
  liblp: Use TMPDIR instead of P_tmpdir.
2018-11-14 23:21:09 +00:00
Treehugger Robot
01acb70e80 Merge "base: Add sensitivity to TMPDIR environment for TemporaryDir and TemporaryFile" 2018-11-14 23:03:32 +00:00
Yifan Hong
098cc974de liblp: partition_opener: fix log; more logs
Test: manual
Change-Id: I48777a479651dbd389e0a4420505342cb272b9f2
2018-11-14 22:45:20 +00:00
Elliott Hughes
da94ca4d28 Stop using __STRING unnecessarily.
Bug: N/A
Test: builds
Change-Id: I8748abf834ec3a808eb2fc6ee0f288562fb0b4ea
2018-11-14 14:27:22 -08:00
Mark Salyzyn
d2f5888894 base: TemporaryDir add DoNotRemove() method
Recursively delete all contents in a temporary directory in the
destructor.  If the caller wants the contents preserved, then
call DoNotRemove().

Test: compile
Bug: 119313545
Change-Id: I3601c06334920055a60dd3074b249824f4d6f510
2018-11-14 12:54:08 -08:00
Mark Salyzyn
46c2df5812 base: TemporaryDir rm -rf directory in destructor
Recursively delete all contents in a temporary directory in the
destructor.

Test: compile
Bug: 119313545
Change-Id: I9570a8591f4e51f8f4f1157e75ccc1b781f8a19d
2018-11-14 12:52:42 -08:00
David Anderson
a14f111377 liblp: Use TMPDIR instead of P_tmpdir.
lpmake should be using the intermediates directory for temporary work
rather than /tmp.  Add ability to respect TMPDIR environment as
inherited from TemporaryFile.

Bug: 119313545
Test: manual test
Change-Id: I1a0317538875ee37fb4066602ff7a75e4658d74b
2018-11-14 12:52:23 -08:00
Mark Salyzyn
6009a2debc base: Add sensitivity to TMPDIR environment for TemporaryDir and TemporaryFile
Test: compile
Bug: 119313545
Change-Id: I2917847f0e90df94d74f4bfc0b13fbc6a5f243c3
2018-11-14 12:52:13 -08:00
Treehugger Robot
b9cb149441 Merge "switch to using android-base/file.h instead of android-base/test_utils.h" 2018-11-14 20:27:23 +00:00
Mark Salyzyn
9f1cf25332 switch to using android-base/file.h instead of android-base/test_utils.h
Test: compile
Bug: 119313545
Change-Id: I4f7ad84743e974b4b4d1d7256088f6c8b749a237
2018-11-14 09:35:34 -08:00
Treehugger Robot
e77298ce9f Merge "base: move TemporaryFile and TemporaryDir to android-base/file.h" 2018-11-14 15:20:47 +00:00