Commit Graph

130 Commits

Author SHA1 Message Date
dhacker29
a3fa75fd66 Allow wiping f2fs to reserve space for a crypto footer
We will convert a -16384 to 16384 if needed because mkfs.f2fs
does not like negative numbers like make_ext4fs does. Also enable
trim by default on f2fs.

Change-Id: I8b41e65d1ff894433665c65d0569a51803c67891
2015-02-02 11:19:51 -06:00
bigbiff
7abc5fe195 Add cancel backup capability.
This will stop the iteration of the partition objects, kill the
current twrpTar thread and remove the backup directory.

Implement TWAtomicInt class to give us a wrapper that automatically
uses mutexes before the read and write to help ensure that the
reads and writes will be atomic based on documentation.

Change-Id: I645b22bc980a292e9c7202acb24ffd22ebe68c63
2015-01-27 15:07:19 +01:00
Ethan Yonker
f66324ffbb Fix restore of images for mtd and bml nand
Change-Id: I843ddf7a5bca3ca7670dd6f19644b37cf017e5b1
2015-01-09 16:46:57 -06:00
Ethan Yonker
96af84a409 Allow flashing of images via the GUI
- Use the Images... button in the lower right of the zip install
  page
- Unify image flashing functions between restore and image flash
- boot and recovery partitions are flashable by default
- use fstab flag flashimg=1 or 0 to override defaults
- file system partitions are currently not flashable

Change-Id: I822dc446030543c55d2153e219d67a1292374ffc
2015-01-09 23:07:07 +01:00
bigbiff
7b4c7a681c Update blkid to 2.25.0
Break libblkid into 4 libraries: libblkid, libuuid, libutil-linux and libfdisk.

This should help in later patch updates.

Change-Id: I680d9a7feb031e5c29a603e9c58aff4b65826262
2015-01-05 04:38:42 +01:00
bigbiff
0c53203efe Fix else if and maxFileSize initializer.
Change-Id: Iac7852a4fb2add5744d5ea424d6ad5a82828f102
2014-12-22 04:52:56 +01:00
that
a3d31fbe38 fixPermissions: simplify code, fix bugs
- avoid parsing permission strings
- fix memory leaks, a fix new/free mismatch and a compiler warning
- fix that only first updated-package was processed
- fix a potential stack overflow if packages.xml is huge
- minor refactoring for reducing duplicated code
- don't process packages without codePath
- fix path for deleting app data (currently unused anyway)
- fix file ownership on libs
- try not to mess up Android 5.0 app permissions

Patch set 4

- make fixing SELinux contexts an option with a check box
- add some notes / text to the themes

Patch set 6

- decouple "fix permissions" from "fix contexts"

Change-Id: Icc77ecc581befc5ce6e419b1f3b8ca189208c234
2014-12-22 04:52:37 +01:00
Ethan Yonker
d79d9bceb3 Allow non datamedia devices to wipe encryption
With 5.0 L, we decrypt automatically if the default_password is
used. Non datamedia devices do not get the format data button so
they cannot wipe encryption off the device. This patch add a wipe
encryption button where the format data button would normally be
located on the Wipe page.

This patch also attempts to remove / delete the dm-crypt block
device before formatting.

Change-Id: I100d5d154d6c49254fd48e23279df973db5f23ae
2014-12-21 23:30:17 +01:00
Ethan Yonker
726a020632 MTP add/remove storage instead of disabling MTP
Implement a pipe between TWRP and MTP to allow TWRP to tell MTP
to remove storage partitions as they become unavailable (e.g.
during a wipe, unmount, etc) instead of disabling MTP completely.
This includes some fixes and improvements in destructors to
properly remove / delete various items. This also means that we
will not be toggling adb off and on quite as often.

I do not like that we had to add another thread, but we were
unable to use select() on the mtp_usb character device because
this device does not support polling. Select always returned
indicating that the mtp file descriptor was ready to be read and
the resulting read would block. The read block prevented us from
being able to include reading of the pipe between TWRP and MTP in
the main MTP thread.

We might want to add a return pipe letting TWRP know if the
removal of the storage device was successful, but I am not sure
how we want to implement this. It would invovle timeouts in both
TWRP and MTP to ensure that we returned a failure indicator in a
timely manner to TWRP and prevent deleting the storage device in
the case of a failure. Right now we make no attempt to ensure that
an MTP operation is underway like a large file transfer, but we
were not doing anything like this in the past. In some respects we
have limited control over what happens. If the user installs a
zip that unmounts a storage partition, we will not know about the
change in storage status anyway. Regular Android does not have
these troubles because partitions rarely get unmounted like in
recovery. At some point, we have to hold the user accountable for
performing actions that may remove a storage partition while they
are using MTP anyway.

Ideally we do not want to toggle the USB IDs and thus toggle adb
off and on during early boot, but I am not sure what the best way
to handle that at this time.

Change-Id: I9343e5396bf6023d3b994de1bf01ed91d129bc14
2014-12-19 16:27:34 -06:00
Ethan Yonker
4b94cfd391 Attempt to set the proper uid/gid/contexts on new files and dirs
Files and folders that we create during backups, copy log, or MTP
operations often do not have the proper uid/gid/contexts assigned.
We will attempt to read the proper contexts from the settings
storage path and assign those same contexts to any files or dirs
that we create.

Change-Id: I769f9479854122b49b499de2175e6e2d026f8afd
2014-12-12 09:20:42 -06:00
Ethan Yonker
448c8dc4c1 Fix png graphics load / display on AArch64
This is mostly kang from AOSP resources.c for loading png files
into RAM, but for ease of compatibility we retained the older
gr_surface data types throughout and ensured that we retain
support for alpha blended png files.

Change-Id: Ieea552173d3bfe885460407be73088bbad75663f
2014-12-09 04:46:00 +01:00
bigbiff
7cb4c3322b add function to partition.cpp to return max file size to mtp responder
Change-Id: If8114b5eac741db6c512fb35cb48e3825c2ff098
2014-12-04 17:32:27 +01:00
Ethan Yonker
253368a072 Reduce libs needed for decrypt and clean up old decypt files
Trim cryptfs.c to remove functions that TWRP does not use for
decrypt and remove the need for libfs_mgr from cryptfs.c by
passing some items to cryptfs.c from the partition manager.

Add support for new fstab flags:
encryptable and forceencrypt=/path/to/cryptokey
For example:
flags=forceencrypt=/dev/block/platform/sdhci-tegra.3/by-name/MD1
Note that "footer" is the default, so you do not need to set this
flag on devices that use the footer for the crypto key.
Also add mounttodecrypt if you need to mount a partition during
the decrypt cycle for firmware of proprietary libs.

Clean up decrypt and only support one version

Android 5.0 lollipop decrypt should be backwards compatible with
older versions so we will only support one version, 1.3 that came
with 5.0 lollipop.

Remove support for Samsung TouchWiz decrypt. It does not work with
the latest versions of Samsung encryption anyway and it has not
been updated to work with any AOSP decryption higher than 1.1

Change-Id: I2d9c6e31df50268c91ee642c2fa090f901d9d5c9
2014-12-04 17:30:16 +01:00
Ethan Yonker
cceebb8189 Tweak 5.0 L decrypt
Mount the vendor partition if it exists so we can use any
proprietary files we may need.
Relocate auto decrypt when default_password is in use to after all
partitions are added so that we can mount the vendor partition.

Change-Id: I93455a35695779f53ef57a82d3d45c7216c13639
2014-11-18 10:18:14 -06:00
Ethan Yonker
4eca40d7d8 Add lollipop decrypt support
Kang in cryptfs.c and cryptfs.h from vold.
Use TW_INCLUDE_L_CRYPTO := true to enable.
Ramdisk must contain the normal fstab file in the root in the
usual format of:
fstab.{ro.hardware}
For examble for Nexus 5:
fstab.hammerhead
Or on many Qualcomm devices:
fstab.qcom

Tested against Android 5.0 lollipop on Nexus 7 2012 grouper. Not
sure if or how this will work when we are dealing with a device
with a hardware keystore. Long term we need to add a GUI element
to allow entering a pattern. For now you can decrypt a pattern
unlock by converting the dots to numbers in the following format:
123
456
789

So an upper-case L would translate to 14789 as a password entered
on the keyboard.

Change-Id: I02c29e1f1c2eb29bf002c9fe0fc118357300b5b3
2014-11-12 18:07:24 +01:00
that
d43bf2dc77 fix some compiler warnings
Change-Id: I23c490e6228b0fcf656c76ac314c69508ba2329d
2014-11-04 15:33:04 +01:00
Ethan Yonker
5ef301ec95 Do not set contexts during a factory reset
We should not need to set or change the contexts of the media
folder when doing a factory reset. We should only do this when
we need to recreate the media folder.

Change-Id: I9f9918743d687b0aa0eb1e50747677f883037047
2014-10-20 14:42:47 +02:00
Ethan Yonker
25f20c1928 Fix wiping crash when block device is not present
Especially with /sd-ext, trying to wipe when the device is not
present causes a seg fault in the make_ext4fs function. Check to
make sure that the block device is present before trying to wipe.

Change-Id: I91973b5b832c9edbce81d61a271e84363c19e6c5
2014-10-14 09:04:54 -05:00
that
9e0593eaf6 mtp: cleanup, fixes and performance improvements
- use std::map instead of linked list
- read directories on demand
- fix writing zip files to storage root
- fix creating directories
- lots of minor fixes
- simplify generation of storage IDs and make them spec compliant

Change-Id: I2137c27549ddbdc58466f2e3aeda464fac70a3c5
2014-10-08 18:34:39 +02:00
Captain Throwback
ff5935f7ef Attempt to fix md5 issue with backups
thanks @bigbiff for the suggestion

Change-Id: Ie9b55537b7fa300461b015d2b9523d4250e755a9
2014-10-08 18:22:08 +02:00
Ethan Yonker
6277c79727 Attempt to automatically identify data/media devices
Change-Id: Ia3007fbced9ce3bc94efdb3dacc582a5e68a49a4
2014-09-19 22:34:09 -05:00
bigbiff bigbiff
c7eee6fef0 add mtp responder to TWRP.
Big thanks to Dees_Troy for helping with the implementation.

Change-Id: I6c9c522b9c9de5dc139e2ecb0141008182ba07f0
2014-09-02 21:44:49 -04:00
Ethan Yonker
1b7a31bd65 Track backup and restore progress
Track backup and restore progress based on the sizes of the files
as they are being added to the tar backup file. Update the
progress bar based on the sizes of the files.

Change-Id: Idf649efa1db3e91830b4b2add86203a3f30042ff
2014-07-09 08:52:18 -05:00
Ethan Yonker
5eac222cfe Do not restore file system on data/media devices
Change-Id: I600e7e9ce89621400531bceb472387aafc0d6ed8
2014-06-13 08:57:48 -05:00
Matt Mower
fb1c4ffaaf Whitespace and minor code cleanup
This is by no means comprehensive, but is quite a bit better already.

Change-Id: Ibc8654a5dfb0eec39cbd0b64bdb52bb4fbfe2f7e
2014-06-04 09:13:37 -05:00
Ethan Yonker
87c7bac9c9 Add options to repair or change file system
Change-Id: I9043e98e1e1ed4722f05c13a60b43d2d0bf739f6
2014-06-04 15:46:32 +02:00
Matt Mower
bf4efa39e4 Support alternative .android_secure location
Some devices (jewel, m8) have .android_secure at a non-standard
location. Allow a different partition to be specified as the home of
.android_secure using the fstab flag 'andsec'.

Using the /data/media variant of jewel as an example, recovery.fstab or
twrp.fstab could be edited like follows:

/external_sd  vfat  /dev/block/mmcblk1p1  flags=display="MicroSD";andsec

Note, this is NOT a method to move .android_secure in your ROM. Your ROM
must already write to this alternative location.

Change-Id: I3a6e4e63aaddb35870b79e80938b0f9c2c902443
2014-04-16 17:30:26 +02:00
Ethan Yonker
83e82578af Allow building of an OEM friendly TWRP
Disable theming
Disable creating the TWRP folder for the settings file
Change factory reset on data/media devices to a full wipe

Change-Id: I3104282b5dd3f55dfff7c8cf39c72750af08563d
2014-04-04 10:59:52 -05:00
bigbiff bigbiff
26774a02f9 Stop printing Unable to mount to console if storage is removable. We will still print to
recovery.log

Change-Id: I19e3df2e977e09e222733f13324051334982b05d
2014-04-02 20:22:31 -04:00
Matt Mower
bb81e5d02d Remove deprecated tar exclude functionality
twrpDU::check_skip_dirs() handles skipped folders now. Everywhere
twrpTar::setexcl() is being used to exclude files eventually calls
createTarFork(), which in turn calls Generate_TarList(), which checks
check_skip_dirs().

Change-Id: Ibbc4eb2eb89863ccb2a15f5a3b5092fb10fcbcc0
2014-03-31 16:10:28 -05:00
Matt Mower
f77994d270 Fix /data backup size if contains media subdirs
/data/*/media directories are mistakenly being excluded from the size
calculation. Change to absolute dir exclude so that only /data/media is
excluded.

Change-Id: I6e97604d44e6ea2bdf7dfd8c68a2f90ba6d44415
2014-03-30 14:27:28 -04:00
Dees Troy
99c8dbf215 Check to ensure that selinux_handle is populated before using
Change-Id: I6de4c5db3e3183229d7029fc72b957c7ef61f23a
2014-03-10 16:54:21 +00:00
Dees Troy
4159aedfaa Restore capabilities to run-as binary
Change-Id: I9e2b8e9b69c94b94c57143c04b950530490ec33e
2014-02-28 17:59:04 +00:00
Ethan Yonker
71413f4ee9 Check crypto footer before offering to decrypt
Verify that we have a valid footer with proper magic before
setting things up for decryption to help prevent user confusion
when dealing with data partitions that fail to mount. Also check
to make sure that the block device for /data is present.

Change-Id: Ie87818fe4505a8bf71df7d3934c114e7328ef3ca
2014-02-26 13:37:35 -06:00
Ethan Yonker
c62b34c3ba Remove unneeded logging
Change-Id: I5c7d104689ed2b578b463a6be55b3688dcc4c01a
2014-02-25 11:19:56 -06:00
Ethan Yonker
374cd713d4 Merge "Move DataManager functions out of twrpTar.cpp" into android-4.4 2014-02-12 15:56:02 +01:00
Ethan Yonker
87af56369b Move DataManager functions out of twrpTar.cpp
Change-Id: I943318afe787ff4ede724fa0bc77ebc6a3ba0c8b
2014-02-10 11:56:35 -06:00
Ethan Yonker
f27497f0cc Fix ext4 wiping when no SELinux contexts are defined
Change-Id: I900f42892d47f54b573cc1dbfb551ed2a8f9e8b9
2014-02-09 11:48:33 -06:00
Dees Troy
175cb7b25d Merge "Additional mount function call without mount options" into android-4.4 2014-02-07 19:49:11 +01:00
Dees Troy
216e042be8 Additional mount function call without mount options
Example: f2fs on Moto G needs fsflags="inline_xattr" in the stock
ROM but the Google Edition uses ext4 which fails to mount with that
option.

Change-Id: I01bce214e7f15e43e66ac35729fd3521609ffad3
2014-02-07 03:46:46 +00:00
bigbiff bigbiff
6b600f9644 Restore contexts when doing mkdierhier in libtar
Do a restore of loaded file contexts to /data/media directory. This will help denials to be prevented when internal storage is wiped.

Change-Id: Ie49bbfa48d2f3ee4f08376d9c1877b92c051017c
2014-02-06 19:56:25 -05:00
Ethan Yonker
a21b052589 Merge "Improve android secure handling" into android-4.4 2014-02-06 20:05:30 +01:00
Ethan Yonker
a1aad1bd8c Fix error message on split backups
Change-Id: I9effd57c2b4d28c3bd9ca1045a0bb0ac8c958245
2014-02-04 21:58:14 -06:00
Ethan Yonker
d4d107388c Improve android secure handling
Change-Id: I9e1c7f4a8353b7be51e1a54bf5d506c9dce70da2
2014-02-03 15:27:52 -06:00
Dees Troy
e0a433a94d Refactor twrpTar to use TarList
Eliminate the use of tarDirs and Generate_MultipleArcives in
favor of Generate_TarList so that we have one method for backup
creation instead of three.

Change-Id: I267937b6e40b32d43fbac8b4cca82f7468d4f94c
2014-02-03 19:13:26 +01:00
bigbiff bigbiff
c7360dd263 Clear the relative directory before passing on to twrpTar with the static du object. Otherwise we will not backup /system/media etc
Change-Id: Ib62af6ad8596aa18bf48cb750e2ecf442dadc627
2014-02-03 19:00:58 +01:00
Ethan Yonker
06c3f93d69 Add option to set flag for storage=0
Change-Id: I46b94d55fc649a2abf27569ccf99aabb2822d663
2014-02-03 16:09:33 +01:00
Dees Troy
c4bc30ec43 ifdef some file system options that are not available in older trees
Change-Id: I11a7e441f7fe4e556a5349822150493de90095f1
2014-02-03 15:04:19 +00:00
bigbiff bigbiff
34684ff313 Create a TWRP Disk Usage Class to retain state about a directory and whether we should skip it in other classes like twrpTar.
Moved Get_Folder_Size to this new class.

Change-Id: If0a0220f900eb109581f2eeaf7b76e3f7d6886f1
2013-12-19 18:02:44 +00:00
Hashcode
62bd9e04c7 add support for fsflags= option in twrp.fstab file
example userdata line (as needed by MotoX):
/data         f2fs      /dev/block/platform/msm_sdcc.1/by-name/userdata       flags=fsflags="inline_xattr"

Code for parsing flags/options originally based on AOSP fs_mgr sources.

Change-Id: I5fb2b5d5cdd08137e6bf71f0085a3f8aebd889a8
2013-12-19 17:04:02 +00:00