Merge "Fix test harness mode" into sc-dev
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user