History log of /bootable/recovery/minadbd/adb.c
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
075ad800c539503d0515e5e0b4af160eccedead9 27-Jun-2014 Doug Zongker <dougz@google.com> 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
65ad928602479379187d6fbe1d924f0fd60bea0e 17-Jan-2014 Da Zhou <dza@broadcom.com> ADB sideload command not work

In kernel(3.10) USB ADB gadget driver is removed.
Using Functionfs for USB adb gadget.

Android recovery uses a stripped down version
of adb command for sideload only. It's missing
the ffs function support, so add the ffs
support to allow sideload command to work


Change-Id: I4ad024723dfc5bdb544548391f99637c390b171e
Signed-off-by: Pierre Couillaud <pierre@broadcom.com>
05aa743493279f9637cf52581b9b4729c7141f1e 01-Mar-2013 Nick Kralevich <nnk@google.com> minadbd: remove unnecessary header files.

Change-Id: Iff2b53d9e63b279d0262cd2e9cfb11e0ca4d6b42
098d1f63c64cdc0975ce8cd650e82e4043fc2600 20-Mar-2012 Doug Zongker <dougz@android.com> remove unused code from minadbd

Change-Id: I2f192c67ef425a53a1dba65d3e0544c1d5a567bd
703ed152147d90a549a2fee7cda5771703e502a0 19-Mar-2012 Doug Zongker <dougz@android.com> 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
9270a20a801403c9f60d6a701b39eae70d380403 10-Jan-2012 Doug Zongker <dougz@android.com> support "sideload over ADB" mode

Rather than depending on the existence of some place to store a file
that is accessible to users on an an unbootable device (eg, a physical
sdcard, external USB drive, etc.), add support for sideloading
packages sent to the device with adb.

This change adds a "minimal adbd" which supports nothing but receiving
a package over adb (with the "adb sideload" command) and storing it to
a fixed filename in the /tmp ramdisk, from where it can be verified
and sideloaded in the usual way. This should be leave available even
on locked user-build devices.

The user can select "apply package from ADB" from the recovery menu,
which starts minimal-adb mode (shutting down any real adbd that may be
running). Once minimal-adb has received a package it exits
(restarting real adbd if appropriate) and then verification and
installation of the received package proceeds.

Change-Id: I6fe13161ca064a98d06fa32104e1f432826582f5