Commit graph

61 commits

Author SHA1 Message Date
Tianjie Xu
7d5c341962 Start adbd in user mode if bootloader is unlocked
During automatic tests, we sometimes want to reboot the device out of
the rescue party remotely. And per http://go/recovery-adb-access, one
option is to start adbd in user build if the device has an unlocked
bootloader. This should not add more surface of attack. Because verified
boot is off with the unlocked bootloader, and the user can always flash
a custom recovery image that always starts adbd.

Bug: 141247819
Test: check adbd doesn't start in user build, unlock bootloader, and
check adbd starts.

Change-Id: I851746245f862cb4dfb01e6c3ad035f2c9f9ccec
2019-10-30 10:26:56 -07:00
Tao Bao
a89c21c9e5 Start charger at /system/bin/charger.
Bug: 114042635
Test: Boot into recovery mode on walleye. Check that charger keeps
      working.
Change-Id: I818536a6d261c860dd6f6c08774c2355e14f4236
2018-09-14 15:52:29 -07:00
Hridya Valsaraju
e4ef453914 Fix sideload for user devices by adding a new sideload config
Bug: 113563995
Test: Tested the 'adb sideload' command on marlin user/userdebug builds
and walleye user/userdebug builds

Change-Id: I00d565547b85f2db87012e4a08316609e03395ac
2018-09-07 15:02:43 -07:00
Elliott Hughes
a4495b5ee2 Add /dev/stdin, /dev/stdout, and /dev/stderr in recovery too.
Now these are in the main image, there's some chance of code assuming
they're present in recovery too (or command-line users using them out
of habit).

Bug: http://b/31824379
Test: builds
Change-Id: Ia19272cd1959685765099f3e15d1d1e63babd279
2018-08-23 08:31:59 -07:00
Hridya Valsaraju
20c81b308d Add fastboot mode to recovery
Add a fastboot mode to recovery that can be
entered with command line args or with the ui.

Add usb property triggers to switch between
fastboot and adb configurations.

Allow switching between fastboot and adb through
usb commands by opening a unix socket. adbd/fastbootd
writes to this socket, which interrupts the ui and
switches to the new mode.

Test: Use fastboot mode
Bug: 78793464
Change-Id: I7891bb84427ec734a21a872036629b95ab3fb13c
2018-08-13 21:18:18 -07:00
Tom Cherry
aceb244401 Merge "ueventd is now at /system/bin/ueventd" 2018-08-07 16:08:55 +00:00
Hridya Valsaraju
cfb3c92302 Move recovery from /sbin to /system/bin
Executables should be in /system/bin
rather than sbin.

Bug: 78793464
Test: boot into recovery, try adb sideload
Change-Id: I194589119a099d29e56b0648f0906a5ae2aa6770
2018-07-26 17:12:40 -07:00
Tom Cherry
b2fd16841a ueventd is now at /system/bin/ueventd
Bug: 79758715
Test: boot into recovery
Change-Id: I9bf47b2487993e275419befdc9718cc0ac8d3ea7
2018-07-24 15:58:29 -07:00
Jiyong Park
8b7af4c0ee Recovery image is self-contained
Now recovery mode is self-contained, which means we don't need to mount
system.img to run shell, etc. What is needed in recovery mode is all in
the recovery ramdisk image.

Since we no longer use /system as the mount point for the system.img,
this allows us to have identical filesystem layout as the system.img.
Executables and libs are installed to /system/bin and /system/lib.
Right now, we only have adbd, sh, toybox in /system/bin but will move
static executables from /sbin to /system/bin as soon as they are
converted to dynamic executables.

system.img is mounted to /mnt/system instead.

Bug: 63673171
Test: `adb reboot recovery; adb devices` shows the device ID
Test: `adb root && adb shell` and then
$ lsof -p `pidof adbd` shows that libm.so, libc.so, etc. are loaded from
the /lib directory.

Change-Id: I801ebd18f3e0a112db3d9a11e4fbb4e49181652a
2018-06-07 23:24:33 +09:00
Elliott Hughes
4dca6f12db Add a /bin symlink for consistency.
Bug: http://b/63142920
Test: builds
Change-Id: I1f96935daca4d79f753e172067e07f8e27ea819e
2017-12-06 08:41:50 -08:00
Tom Cherry
c58e03ec23 Merge "init.rc: Remove sys.powerctl action" am: 9848209088 am: 9fcc7c8253
am: 6e575ccd0f

Change-Id: Iec1eb05ea5ec85c035d6ae7e232699ab3a6f6878
2017-04-18 18:33:09 +00:00
Tom Cherry
4608daf0fe init.rc: Remove sys.powerctl action
Init now handles this property change directly.

Bug: 37209359
Bug: 37415192

Test: Init reboots normally.
Change-Id: I9a4925897fb83bed180d12c871d9a71126fa4aa8
2017-04-17 16:55:54 -07:00
Jerry Zhang
a61a672674 Write aliases before ffs mount in recovery
This is necessary to support kernel changes
that allow for multiple ffs functions. Some
kernels require aliases in order to name
function instances before mount time.

Test: Reboot into recovery, verify adb works
Bug: 34070894
Change-Id: I8376304d92af9b3e8c734fdb8cc77f0dc8bc4850
2017-01-04 11:20:19 -08:00
Jerry Zhang
e66f861a7c Write aliases before ffs mount in recovery
This is necessary to support kernel changes
that allow for multiple ffs functions. Some
kernels require aliases in order to name
function instances before mount time.

Test: Reboot into recovery, verify adb works
Bug: 34070894
Change-Id: I8376304d92af9b3e8c734fdb8cc77f0dc8bc4850
2017-01-04 11:16:02 -08:00
Sandeep Patil
c4b381c44b healthd: change how charger is launched in recovery.
This is triggered by changes in healthd which spits out 2 binaries.
Recovery needs to use static binary which is now renamed to 'charger'.
So, change the .rc file to match the rename.

Update the seclable according to new healthd-charger split

Test: Tested recovery on angler using 'reboot recovery' to ensure
healthd is working as before

Change-Id: I9e6018156e677e7224dd2e5894941ed2a7cac1d0
Signed-off-by: Sandeep Patil <sspatil@google.com>
2016-11-01 14:27:23 -07:00
Andriy Naborskyy
544a1562d9 init: move healthd to late-init
Starting healthd in early-init is not needed and can delay coldboot done
Now healthd is starting at boot as usual service.

Test: check kmsg that healthd starting after /dev/.coldboot_done

Bug: 30292927
Change-Id: I367d022f5885122da49181db3db536012e83f564
2016-10-10 17:29:11 -07:00
Elliott Hughes
48ebb07211 init now uses libprocessgroup, so set up /acct.
Change-Id: Iec1492dfaf2ceae6f4d8618dd725d07316ee960b
2016-06-15 15:15:15 -07:00
Elliott Hughes
ad29b10c00 Remove etc/META-INF/com/google/android/update-script.
Bug: http://b/29250988
Change-Id: I61f8c6717b38de2242e4ea8e0913237c1ce5bfea
2016-06-09 18:03:05 -07:00
Alex Deymo
6bcc8af6e5 Restore labels on /postinstall during recovery.
This patch mirrors what was done in the main init.rc to relabel
/postinstall.

Bug: 27178350
Bug: 27177071
Change-Id: I39cd03f3c55a42c03367957e8c259c9a3155203c
2016-03-02 14:35:51 -08:00
Paul Lawrence
a91335aedc am 90c75b0b: Change init sequence to support file level encryption
* commit '90c75b0beb375b8d261e2df92292e9b542470f6e':
  Change init sequence to support file level encryption
2015-07-13 17:53:14 +00:00
Paul Lawrence
90c75b0beb Change init sequence to support file level encryption
File level encryption must get the key between mounting userdata and
calling post_fs_data when the directories are created. This requires
access to keymaster, which in turn is found from a system property.

Split property loaded into system and data, and load in right order.

Bug: 22233063
Change-Id: I409c12e3f4a8cef474eb48818e96760fe292cc49
2015-07-07 13:26:17 -07:00
Paul Lawrence
b6b31549df am 10cf0942: Merge "Revert "Change init sequence to support file level encryption"" into mnc-dev
* commit '10cf0942a7f4b2bfd539416e4767aaaf866a6527':
  Revert "Change init sequence to support file level encryption"
2015-07-07 18:20:23 +00:00
Paul Lawrence
392879eec0 Revert "Change init sequence to support file level encryption"
This reverts commit 98c1a3de23.

Change-Id: I524060418de18f97c3865ebc4435f501015e92ee
2015-07-07 17:05:39 +00:00
Paul Lawrence
3cc5148007 am d6b2b65d: Merge "Change init sequence to support file level encryption" into mnc-dev
* commit 'd6b2b65dc40c5af7feecf634b8ae55bf14fe8e6c':
  Change init sequence to support file level encryption
2015-07-06 20:22:20 +00:00
Paul Lawrence
98c1a3de23 Change init sequence to support file level encryption
File level encryption must get the key between mounting userdata and
calling post_fs_data when the directories are created. This requires
access to keymaster, which in turn is found from a system property.

Split property loaded into system and data, and load in right order.

Bug: 22233063
Change-Id: I409c12e3f4a8cef474eb48818e96760fe292cc49
2015-07-06 10:44:33 -07:00
Elliott Hughes
4fd3446b4e init sets the default PATH itself, better.
This fixes 'su' and 'strace' in the recovery image.

Change-Id: I83c2664d32a15da92bb6092fbdfc772184013c88
2015-05-12 14:35:31 -07:00
Elliott Hughes
6f76dd58f4 Revert "Revert "init re-execs to set its security context now.""
This reverts commit c819dbe95b.

Bug: http://b/19702273
Change-Id: I5c75b148a12e644dd247a4df4f67dc9b4b9ff8cf
2015-04-24 12:42:46 -07:00
Nick Kralevich
c819dbe95b Revert "init re-execs to set its security context now."
shamu isn't booting now

This reverts commit c57453d537.

Change-Id: I8efbf6260f5fcf983e5056fac6d03916415b944e
2015-04-24 16:58:33 +00:00
Elliott Hughes
c57453d537 init re-execs to set its security context now.
Change-Id: I0a014f8dddfe775159903b5d6fa632733fef692c
2015-04-23 20:26:56 -07:00
Jesse Zhao
5bf74b238b Bump up max_map_count value.
Change-Id: Id3e2c0795b817db9a85bc84cba2aa05d20179d39
Bug: 18503789
2015-01-08 16:02:46 -08:00
JP Abgrall
9eb8c8bdbe init.rc: Inidicate that booting is complete wrt firwmare requests
ueventd will wait for /dev/.booting to go away before giving up
on loading firmware.
The issue was introduced in Ifdd5dd1e95d7e064dde5c80b70198882d949a710
which forgot to update recovery's init.rc

Bug: 17993625
Change-Id: I91205fe6eea50aaef9b401d650ec8d6843a92a57
2014-10-20 20:02:57 -07:00
Doug Zongker
075ad800c5 sideload without holding the whole package in RAM
Implement a new method of sideloading over ADB that does not require
the entire package to be held in RAM (useful for low-RAM devices and
devices using block OTA where we'd rather have more RAM available for
binary patching).

We communicate with the host using a new adb service called
"sideload-host", which makes the host act as a server, sending us
different parts of the package file on request.

We create a FUSE filesystem that creates a virtual file
"/sideload/package.zip" that is backed by the ADB connection -- users
see a normal file, but when they read from the file we're actually
fetching the data from the adb host.  This file is then passed to the
verification and installation systems like any other.

To prevent a malicious adb host implementation from serving different
data to the verification and installation phases of sideloading, the
FUSE filesystem verifies that the contents of the file don't change
between reads -- every time we fetch a block from the host we compare
its hash to the previous hash for that block (if it was read before)
and cause the read to fail if it changes.

One necessary change is that the minadbd started by recovery in
sideload mode no longer drops its root privileges (they're needed to
mount the FUSE filesystem).  We rely on SELinux enforcement to
restrict the set of things that can be accessed.

Change-Id: Ida7dbd3b04c1d4e27a2779d88c1da0c7c81fb114
2014-07-02 12:16:36 -07:00
Riley Andrews
e8d7dd4ed1 am 3e0fc39e: am 974fe112: Merge "Fix recovery mode."
* commit '3e0fc39ec27c0ed96ffd2a617f1841fe3bf3c8f6':
  Fix recovery mode.
2014-06-25 00:44:02 +00:00
Colin Cross
22bcf97a59 recovery: enable panic_on_oops
Set panic_on_oops=1 to reboot if the kernel panics.

Change-Id: Id9e8689a570229db2ea2a3d72b52784f8a1ed107
2014-06-24 13:43:39 -07:00
Riley Andrews
e739d7e6cd Fix recovery mode.
Duplicate changes made to init.rc for https://android-review.googlesource.com/98852
in the init.rc used for recovery mode.

Bug 15849856

Change-Id: Ia376ddf6373a28718653f7fb1435bf7ecb33d813
2014-06-24 17:11:10 -07:00
Benoit Goby
0d372a553e am ed75be6d: am ac189bf6: Merge "recovery: Fix adb with linux 3.10"
* commit 'ed75be6de9d883a2524065940d732593fa26ac19':
  recovery: Fix adb with linux 3.10
2014-02-21 04:21:03 +00:00
Benoit Goby
1b9641127c recovery: Fix adb with linux 3.10
In kernel 3.10, f_adb has been removed and adbd can use functionfs
instead. Mount functionfs on boot for adbd. On older kernels, mount
will fail silently and adbd will revert to f_adb.

Change-Id: I5db57aaf35b35859ea88c7d0e0661d8c553e5811
2014-02-19 17:48:49 -08:00
Nick Kralevich
4d1b0903ff am f4641299: am 295e74aa: Merge "adbd: switch to su domain when running as root"
* commit 'f464129950eaea49b1234fdcfd04ec8723e3c672':
  adbd: switch to su domain when running as root
2014-01-24 18:14:50 +00:00
Nick Kralevich
c52c5b8e3d adbd: switch to su domain when running as root
When adbd runs as root, it should transition into the
su domain. This is needed to run the adbd and shell
domains in enforcing on userdebug / eng devices without
breaking developer workflows.

Use the new device_banner command line option.

Change-Id: Ib33c0dd2dd6172035230514ac84fcaed2ecf44d6
2014-01-18 09:22:50 -08:00
Doug Zongker
0708239c00 am a01b6467: am 772f6e2a: Merge "correctly mount tmpfs as /tmp in recovery"
* commit 'a01b646794fc207da657d7b8ef779c9d842acfde':
  correctly mount tmpfs as /tmp in recovery
2014-01-14 18:28:35 +00:00
Doug Zongker
075ef327d4 correctly mount tmpfs as /tmp in recovery
The syntax of init's mount command changed in April 2008 but
recovery's init.rc was never updated, so recovery's /tmp has been on
the root fs all this time.  Fix.

Also add /system/bin to the PATH in recovery, which is handy for
debugging.

Change-Id: I39f7ae435a8ce3bad691e4b7c307db0bd8de1302
2014-01-14 09:50:35 -08:00
Nick Kralevich
c22a444cdd am 7e0d3066: am fc729512: Merge "Set SELinux security contexts correctly for init and services."
* commit '7e0d30667cf53a182525f87dd0c8cb0e2628a1ed':
  Set SELinux security contexts correctly for init and services.
2014-01-13 19:59:15 +00:00
Stephen Smalley
2c9d5b2839 Set SELinux security contexts correctly for init and services.
Otherwise everything is left running in the kernel domain when
booting recovery.

Change-Id: Ie3d86547d5be0b68dd1875a97afe1e00fc3e4da1
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
2014-01-13 14:00:36 -05:00
Todd Poynor
be96809d18 start healthd in recovery mode
Change-Id: I431ece69b6856fd1ea6079c38cdeb593c15d7385
2013-09-13 16:34:12 -07:00
Doug Zongker
cc2958fd7f fix secure adb in recovery
Recovery's init.rc was missing a line (added to the main system's
init.rc in change Ic97fd464440ff4a29fc9da7ad15949ac5215ade3) is
required for secure adb to work.

Change-Id: Id79b94d2abb4cbe3cca7cabeb4bc5faf7205e56b
2013-09-11 13:24:32 -07:00
Doug Zongker
77ea71d6a8 recovery: fix rebooting
Change I84c0513acb549720cb0e8c9fcbda0050f5c396f5 moved reboot
functionality into init but did not update the recovery partition; so
"adb reboot" and /system/bin/reboot in recovery are both broken.

Change-Id: Ie2d14627a686ffb5064256b6c399723636dff116
2013-08-30 12:20:16 -07:00
Todd Poynor
2f2c98869b start healthd in recovery
Change-Id: I16e3e0ddb8ca062431deb4be83c5be5eb786d76f
2013-06-18 17:51:13 -07:00
Colin Cross
f510f069fd recovery: import init.recovery.${ro.hardware}.rc
Some devices need hardware specific services started in recovery, for
example watchdogd.  Import init.recovery.${ro.hardware}.rc from the
recovery init.rc.

Bug: 6953625
Change-Id: I4a4cee210238150ffaabe774a44340ec3c8ff78c
2012-08-08 13:06:26 -07:00
Doug Zongker
703ed15214 run minadbd as shell user
Make minadbd drop its root privileges after initializing.  We need to
make the /tmp directory writable by the shell group so that it can
drop the sideloaded file there.

Change-Id: I67b292cf769383f0f67fb934e5a80d408a4c131d
2012-03-19 16:24:28 -07:00
Doug Zongker
6639248d02 always initialize usb product, vendor, etc. for adb in recovery
Set these values even on non-debuggable builds, so that the mini-adb
now in recovery can work.

Change-Id: If4c915403e6f43bfe922aa347e350a8982443106
2012-01-10 12:16:04 -08:00