Report error OEMCrypto_ERROR_ENTRY_IN_USE

Merge from Widevine repo of http://go/wvgerrit/24311

This CL adds the error OEMCrypto_ERROR_ENTRY_IN_USE to unit tests, the
reference oemcrypto, and the level 3 haystack.

bug: 35879590
Change-Id: Ifbfaf97c0045147aed4498ec0b57d90b26f100d0
This commit is contained in:
Fred Gylys-Colwell
2017-03-01 13:56:35 -08:00
parent 70ffdb1c6a
commit ce535ad21e
2 changed files with 10 additions and 13 deletions

View File

@@ -445,7 +445,7 @@ OEMCryptoResult UsageTable::ShrinkUsageTableHeader(
for (size_t i = new_table_size; i < sessions_.size(); ++i) {
if (sessions_[i]) {
LOGE("ShrinkUsageTableHeader: session open for %d", i);
return OEMCrypto_ERROR_INVALID_CONTEXT;
return OEMCrypto_ERROR_ENTRY_IN_USE;
}
}
generation_numbers_.resize(new_table_size);
@@ -597,7 +597,7 @@ OEMCryptoResult UsageTable::MoveEntry(UsageTableEntry* entry,
}
if (sessions_[new_index]) {
LOGE("MoveEntry: session open for %d", new_index);
return OEMCrypto_ERROR_INVALID_SESSION;
return OEMCrypto_ERROR_ENTRY_IN_USE;
}
if (!entry) {
LOGE("MoveEntry: null entry");

View File

@@ -5148,11 +5148,12 @@ class UsageTableDefragTest : public UsageTableTest {
ASSERT_NO_FATAL_FAILURE(s->close());
}
void ShrinkHeader(uint32_t new_size, bool expect_success = true) {
void ShrinkHeader(uint32_t new_size,
OEMCryptoResult expected_result = OEMCrypto_SUCCESS) {
size_t header_buffer_length = 0;
OEMCryptoResult sts =
OEMCrypto_ShrinkUsageTableHeader(new_size, NULL, &header_buffer_length);
if (expect_success) {
if (expected_result == OEMCrypto_SUCCESS) {
ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts);
} else {
ASSERT_NE(OEMCrypto_SUCCESS, sts);
@@ -5163,11 +5164,7 @@ class UsageTableDefragTest : public UsageTableTest {
sts = OEMCrypto_ShrinkUsageTableHeader(
new_size, &encrypted_usage_header_[0],
&header_buffer_length);
if (expect_success) {
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
} else {
ASSERT_NE(OEMCrypto_SUCCESS, sts);
}
ASSERT_EQ(expected_result, sts);
}
};
@@ -5215,7 +5212,7 @@ TEST_F(UsageTableDefragTest, MoveUsageEntriesToOpenSession) {
ASSERT_NO_FATAL_FAILURE(s0.ReloadUsageEntry());
// s0 currently open on index 0. Expect this to fail:
ASSERT_NO_FATAL_FAILURE(s1.MoveUsageEntry(0, &encrypted_usage_header_,
OEMCrypto_ERROR_INVALID_SESSION));
OEMCrypto_ERROR_ENTRY_IN_USE));
}
TEST_F(UsageTableDefragTest, ShrinkOverOpenSessions) {
@@ -5228,9 +5225,9 @@ TEST_F(UsageTableDefragTest, ShrinkOverOpenSessions) {
s1.open();
ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry());
// Since s0 and s1 are open, we can't shrink.
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(1, /* expect_success */ false));
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(1, OEMCrypto_ERROR_ENTRY_IN_USE));
s1.close(); // Can shrink after closing s1, even if s0 is open.
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(1, /* expect_success */ true));
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(1, OEMCrypto_SUCCESS));
}
TEST_F(UsageTableDefragTest, EnlargeHeader) {
@@ -5239,7 +5236,7 @@ TEST_F(UsageTableDefragTest, EnlargeHeader) {
LoadFirstLicense(&s0, 0);
LoadFirstLicense(&s1, 1);
// Can only shrink the header -- not make it bigger.
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(4, /* expect_success */ false));
ASSERT_NO_FATAL_FAILURE(ShrinkHeader(4, OEMCrypto_ERROR_UNKNOWN_FAILURE));
}
TEST_F(UsageTableDefragTest, CreateNewHeaderWhileUsingOldOne) {