Merge "Fix test harness mode" into sc-dev

This commit is contained in:
Howard Chen
2021-07-24 00:31:19 +00:00
committed by Android (Google) Code Review

View File

@@ -375,15 +375,38 @@ public class PersistentDataBlockService extends SystemService {
try { try {
FileChannel channel = getBlockOutputChannel(); FileChannel channel = getBlockOutputChannel();
// Format the data selectively.
//
// 1. write header, set length = 0
int header_size = DIGEST_SIZE_BYTES + HEADER_SIZE; int header_size = DIGEST_SIZE_BYTES + HEADER_SIZE;
ByteBuffer buf = ByteBuffer.allocate(header_size); ByteBuffer buf = ByteBuffer.allocate(header_size);
buf.put(new byte[DIGEST_SIZE_BYTES]); buf.put(new byte[DIGEST_SIZE_BYTES]);
buf.putInt(PARTITION_TYPE_MARKER); buf.putInt(PARTITION_TYPE_MARKER);
buf.putInt(0); buf.putInt(0);
buf.flip();
channel.write(buf); channel.write(buf);
// corrupt the payload explicitly channel.force(true);
// 2. corrupt the legacy FRP data explicitly
int payload_size = (int) getBlockDeviceSize() - header_size; 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.write(buf);
channel.force(true); channel.force(true);
} catch (IOException e) { } catch (IOException e) {