From 152f2144f9f77288a86ae28fc416bf1a8bc4c4a7 Mon Sep 17 00:00:00 2001 From: Vicky Min Date: Tue, 18 Apr 2023 15:21:24 -0700 Subject: [PATCH] Fix ODK warning errors for WV DRM PiperOrigin-RevId: 525266553 Merged from https://widevine-internal-review.googlesource.com/169640 Change-Id: Id92dac068a2b2f767287641170f7b522f54588e4 --- .../odk/src/core_message_serialize.cpp | 50 ++++++++----------- .../odk/test/fuzzing/odk_fuzz_helper.cpp | 29 +++++++---- 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp index 8f28a3f9..035223df 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp @@ -25,14 +25,13 @@ namespace { * computing the API version of the response. * * Template arguments: - * T: struct to be deserialized by odk * S: kdo input struct */ -template +template bool CreateResponseHeader(const CoreMessageFeatures& features, ODK_MessageType message_type, ODK_CoreMessage* response_header, - const S& core_request, T& response) { + const S& core_request) { // Bad major version. if ((features.maximum_major_version > ODK_MAJOR_VERSION) || (features.maximum_major_version == ODK_MAJOR_VERSION && @@ -68,11 +67,10 @@ bool CreateResponseHeader(const CoreMessageFeatures& features, * * Template arguments: * T: struct to be deserialized by odk - * S: kdo input struct * P: auto-generated serializing function for |T| */ -template -bool CreateResponse(ODK_MessageType message_type, const S& core_request, +template +bool CreateResponse(ODK_MessageType message_type, std::string* oemcrypto_core_message, ODK_CoreMessage* response_header, T& response, const P& packer) { @@ -125,8 +123,7 @@ bool CreateCoreLicenseResponse(const CoreMessageFeatures& features, ODK_LicenseResponse license_response{ {}, const_cast(&parsed_lic)}; if (!CreateResponseHeader(features, ODK_License_Response_Type, - &license_response.core_message, core_request, - license_response)) { + &license_response.core_message, core_request)) { return false; } if (ODK_MAX_NUM_KEYS < license_response.parsed_license->key_array_length) { @@ -162,8 +159,7 @@ bool CreateCoreLicenseResponse(const CoreMessageFeatures& features, return false; memcpy(license_response_v16.request_hash, core_request_sha256.data(), sizeof(license_response_v16.request_hash)); - return CreateResponse(ODK_License_Response_Type, core_request, - oemcrypto_core_message, + return CreateResponse(ODK_License_Response_Type, oemcrypto_core_message, &license_response_v16.request.core_message, license_response_v16, Pack_ODK_LicenseResponseV16); } else if (license_response.core_message.nonce_values.api_major_version == @@ -222,14 +218,13 @@ bool CreateCoreLicenseResponse(const CoreMessageFeatures& features, return false; memcpy(license_response_v17.request_hash, core_request_sha256.data(), sizeof(license_response_v17.request_hash)); - return CreateResponse(ODK_License_Response_Type, core_request, - oemcrypto_core_message, + return CreateResponse(ODK_License_Response_Type, oemcrypto_core_message, &license_response_v17.request.core_message, license_response_v17, Pack_ODK_LicenseResponseV17); } - return CreateResponse(ODK_License_Response_Type, core_request, - oemcrypto_core_message, &license_response.core_message, - license_response, Pack_ODK_LicenseResponse); + return CreateResponse(ODK_License_Response_Type, oemcrypto_core_message, + &license_response.core_message, license_response, + Pack_ODK_LicenseResponse); } bool CreateCoreRenewalResponse(const CoreMessageFeatures& features, @@ -241,11 +236,10 @@ bool CreateCoreRenewalResponse(const CoreMessageFeatures& features, renewal_response.renewal_duration_seconds = renewal_duration_seconds; if (!CreateResponseHeader(features, ODK_Renewal_Response_Type, &renewal_response.request.core_message, - core_request, renewal_response)) { + core_request)) { return false; } - return CreateResponse(ODK_Renewal_Response_Type, core_request, - oemcrypto_core_message, + return CreateResponse(ODK_Renewal_Response_Type, oemcrypto_core_message, &renewal_response.request.core_message, renewal_response, Pack_ODK_RenewalResponse); } @@ -257,8 +251,7 @@ bool CreateCoreProvisioningResponse(const CoreMessageFeatures& features, ODK_ProvisioningResponse prov_response{ {}, const_cast(&parsed_prov)}; if (!CreateResponseHeader(features, ODK_Provisioning_Response_Type, - &prov_response.core_message, core_request, - prov_response)) { + &prov_response.core_message, core_request)) { return false; } @@ -269,15 +262,15 @@ bool CreateCoreProvisioningResponse(const CoreMessageFeatures& features, } prov_response_v16.request.core_message = prov_response.core_message; prov_response_v16.parsed_provisioning = prov_response.parsed_provisioning; - return CreateResponse(ODK_Provisioning_Response_Type, core_request, + return CreateResponse(ODK_Provisioning_Response_Type, oemcrypto_core_message, &prov_response_v16.request.core_message, prov_response_v16, Pack_ODK_ProvisioningResponseV16); } - return CreateResponse(ODK_Provisioning_Response_Type, core_request, - oemcrypto_core_message, &prov_response.core_message, - prov_response, Pack_ODK_ProvisioningResponse); + return CreateResponse(ODK_Provisioning_Response_Type, oemcrypto_core_message, + &prov_response.core_message, prov_response, + Pack_ODK_ProvisioningResponse); } bool CreateCoreProvisioning40Response( @@ -286,13 +279,12 @@ bool CreateCoreProvisioning40Response( std::string* oemcrypto_core_message) { ODK_Provisioning40Response prov_response = {}; if (!CreateResponseHeader(features, ODK_Provisioning_Response_Type, - &prov_response.core_message, core_request, - prov_response)) { + &prov_response.core_message, core_request)) { return false; } - return CreateResponse(ODK_Provisioning_Response_Type, core_request, - oemcrypto_core_message, &prov_response.core_message, - prov_response, Pack_ODK_Provisioning40Response); + return CreateResponse(ODK_Provisioning_Response_Type, oemcrypto_core_message, + &prov_response.core_message, prov_response, + Pack_ODK_Provisioning40Response); } } // namespace serialize diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp index ad20cb7f..17c7fac9 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp @@ -5,7 +5,9 @@ #include +#include "core_message_types.h" #include "odk.h" +#include "odk_attributes.h" #include "odk_structs.h" namespace oemcrypto_core_message { @@ -41,7 +43,8 @@ OEMCryptoResult odk_serialize_LicenseRequest( const ODK_LicenseRequest& core_license_request UNUSED, const ODK_NonceValues* nonce_values) { // TODO(mattfedd): hook up counters to fuzzer - const ODK_MessageCounterInfo counter_info = {0}; + const ODK_MessageCounterInfo counter_info = {0, 0, 0, 0, 0, + 0, 0, {0}, {0}, {0}}; return ODK_PrepareCoreLicenseRequest(out, SIZE_MAX, size, nonce_values, &counter_info); } @@ -58,10 +61,11 @@ OEMCryptoResult odk_serialize_RenewalRequest( OEMCryptoResult odk_serialize_ProvisioningRequest( const void* in UNUSED, uint8_t* out, size_t* size, - const ODK_ProvisioningRequest& core_provisioning, + const ODK_ProvisioningRequest& core_provisioning UNUSED, const ODK_NonceValues* nonce_values) { // TODO(mattfedd): hook up counters to fuzzer - const ODK_MessageCounterInfo counter_info = {0}; + const ODK_MessageCounterInfo counter_info = {0, 0, 0, 0, 0, + 0, 0, {0}, {0}, {0}}; return ODK_PrepareCoreProvisioningRequest(out, SIZE_MAX, size, nonce_values, &counter_info); } @@ -123,9 +127,10 @@ bool kdo_serialize_LicenseResponse(const ODK_ParseLicense_Args* args, const ODK_ParsedLicense& parsed_lic, std::string* oemcrypto_core_message) { const auto& nonce_values = args->nonce_values; - ODK_LicenseRequest core_request{nonce_values.api_minor_version, - nonce_values.api_major_version, - nonce_values.nonce, nonce_values.session_id}; + const ODK_MessageCounter counter_info = {0, 0, 0, 0, 0, 0, 0, {0}, {0}, {0}}; + ODK_LicenseRequest core_request{ + nonce_values.api_minor_version, nonce_values.api_major_version, + nonce_values.nonce, nonce_values.session_id, counter_info}; std::string core_request_sha_256( reinterpret_cast(args->request_hash), ODK_SHA256_HASH_SIZE); return serialize::CreateCoreLicenseResponse( @@ -155,11 +160,17 @@ bool kdo_serialize_ProvisioningResponse( if (args->device_id_length > sizeof(args->device_id)) { return false; } + const ODK_MessageCounter counter_info = {0, 0, 0, 0, 0, 0, 0, {0}, {0}, {0}}; ODK_ProvisioningRequest core_request{ - nonce_values.api_minor_version, nonce_values.api_major_version, - nonce_values.nonce, nonce_values.session_id, + nonce_values.api_minor_version, + nonce_values.api_major_version, + nonce_values.nonce, + nonce_values.session_id, std::string(reinterpret_cast(args->device_id), - args->device_id_length)}; + args->device_id_length), + 0, + "", + counter_info}; return serialize::CreateCoreProvisioningResponse( CoreMessageFeatures::kDefaultFeatures, parsed_prov, core_request, oemcrypto_core_message);