Validate program type in ebpf_program_create (#2628)
* Validate program type in ebpf_program_create * Fixed unit_test for EBPF_OPERATION_GET_PROGRAM_INFO return for invalid program type * Add trace for EBPF_EXTENSION_FAILED_TO_LOAD * Updated the retval in ebpf_program.h
This commit is contained in:
Родитель
352067110b
Коммит
6544208724
|
@ -648,13 +648,23 @@ ebpf_program_create(_In_ const ebpf_program_parameters_t* program_parameters, _O
|
|||
{
|
||||
EBPF_LOG_ENTRY();
|
||||
ebpf_result_t retval;
|
||||
ebpf_program_t* local_program;
|
||||
ebpf_program_t* local_program = NULL;
|
||||
ebpf_utf8_string_t local_program_name = {NULL, 0};
|
||||
ebpf_utf8_string_t local_section_name = {NULL, 0};
|
||||
ebpf_utf8_string_t local_file_name = {NULL, 0};
|
||||
ebpf_utf8_string_t local_hash_type_name = {NULL, 0};
|
||||
uint8_t* local_program_info_hash = NULL;
|
||||
|
||||
if (IsEqualGUID(&program_parameters->program_type, &EBPF_PROGRAM_TYPE_UNSPECIFIED)) {
|
||||
EBPF_LOG_MESSAGE_GUID(
|
||||
EBPF_TRACELOG_LEVEL_ERROR,
|
||||
EBPF_TRACELOG_KEYWORD_PROGRAM,
|
||||
"Program type must be specified.",
|
||||
&program_parameters->program_type);
|
||||
retval = EBPF_INVALID_ARGUMENT;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
local_program = (ebpf_program_t*)ebpf_allocate_with_tag(sizeof(ebpf_program_t), EBPF_POOL_TAG_PROGRAM);
|
||||
if (!local_program) {
|
||||
retval = EBPF_NO_MEMORY;
|
||||
|
@ -781,6 +791,12 @@ ebpf_program_create(_In_ const ebpf_program_parameters_t* program_parameters, _O
|
|||
}
|
||||
|
||||
if (local_program->general_helper_provider_data == NULL || local_program->info_extension_provider_data == NULL) {
|
||||
EBPF_LOG_MESSAGE_GUID_GUID(
|
||||
EBPF_TRACELOG_LEVEL_INFO,
|
||||
EBPF_TRACELOG_KEYWORD_PROGRAM,
|
||||
"Program type and Attach type:",
|
||||
&program_parameters->program_type,
|
||||
&program_parameters->expected_attach_type);
|
||||
retval = EBPF_EXTENSION_FAILED_TO_LOAD;
|
||||
goto Done;
|
||||
}
|
||||
|
|
|
@ -68,6 +68,8 @@ extern "C"
|
|||
* @retval EBPF_SUCCESS The operation was successful.
|
||||
* @retval EBPF_NO_MEMORY Unable to allocate resources for this
|
||||
* program instance.
|
||||
* @retval EBPF_INVALID_ARGUMENT Program type was not set or Program name length was greater than BPF_OBJ_NAME_LEN.
|
||||
* @retval EBPF_EXTENSION_FAILED_TO_LOAD The program extension failed to load.
|
||||
*/
|
||||
_Must_inspect_result_ ebpf_result_t
|
||||
ebpf_program_create(_In_ const ebpf_program_parameters_t* program_parameters, _Outptr_ ebpf_program_t** program);
|
||||
|
|
|
@ -1680,7 +1680,7 @@ TEST_CASE("EBPF_OPERATION_GET_PROGRAM_INFO", "[execution_context][negative]")
|
|||
// Invalid program handle and type.
|
||||
request.program_handle = ebpf_handle_invalid;
|
||||
request.program_type = {0};
|
||||
REQUIRE(invoke_protocol(EBPF_OPERATION_GET_PROGRAM_INFO, request, reply) == EBPF_EXTENSION_FAILED_TO_LOAD);
|
||||
REQUIRE(invoke_protocol(EBPF_OPERATION_GET_PROGRAM_INFO, request, reply) == EBPF_INVALID_ARGUMENT);
|
||||
|
||||
// Reply too small.
|
||||
request.program_handle = program_handles[0];
|
||||
|
|
Загрузка…
Ссылка в новой задаче