Fix test harness mode
There's legacy request that when OEM unlock is enabled, PDB service format the PDB in the onStart to make sure the fastboot -w can wipe the PDB for devices that do not have recovery OS. In the past, only the header is cleaned up so test harness can still peek the data in the PDB. b/185369514 is an issue due to the incomplete format so an explicit clean up is required. This CL makes it half-format to support both use cases. Bug: 192268220 Bug: 18644051 Bug: 185369514 Test: Test harness Change-Id: I290c5b2fde9f1337b41337795e4c2fbcb9e95f6e
This commit is contained in:
@@ -375,15 +375,38 @@ public class PersistentDataBlockService extends SystemService {
|
||||
|
||||
try {
|
||||
FileChannel channel = getBlockOutputChannel();
|
||||
// Format the data selectively.
|
||||
//
|
||||
// 1. write header, set length = 0
|
||||
int header_size = DIGEST_SIZE_BYTES + HEADER_SIZE;
|
||||
ByteBuffer buf = ByteBuffer.allocate(header_size);
|
||||
buf.put(new byte[DIGEST_SIZE_BYTES]);
|
||||
buf.putInt(PARTITION_TYPE_MARKER);
|
||||
buf.putInt(0);
|
||||
buf.flip();
|
||||
channel.write(buf);
|
||||
// corrupt the payload explicitly
|
||||
channel.force(true);
|
||||
|
||||
// 2. corrupt the legacy FRP data explicitly
|
||||
int payload_size = (int) getBlockDeviceSize() - header_size;
|
||||
buf = ByteBuffer.allocate(payload_size);
|
||||
buf = ByteBuffer.allocate(payload_size
|
||||
- TEST_MODE_RESERVED_SIZE - FRP_CREDENTIAL_RESERVED_SIZE - 1);
|
||||
channel.write(buf);
|
||||
channel.force(true);
|
||||
|
||||
// 3. skip the test mode data and leave it unformat
|
||||
// This is for a feature that enables testing.
|
||||
channel.position(channel.position() + TEST_MODE_RESERVED_SIZE);
|
||||
|
||||
// 4. wipe the FRP_CREDENTIAL explicitly
|
||||
buf = ByteBuffer.allocate(FRP_CREDENTIAL_RESERVED_SIZE);
|
||||
channel.write(buf);
|
||||
channel.force(true);
|
||||
|
||||
// 5. set unlock = 0 because it's a formatPartitionLocked
|
||||
buf = ByteBuffer.allocate(FRP_CREDENTIAL_RESERVED_SIZE);
|
||||
buf.put((byte)0);
|
||||
buf.flip();
|
||||
channel.write(buf);
|
||||
channel.force(true);
|
||||
} catch (IOException e) {
|
||||
|
||||
Reference in New Issue
Block a user