1 /*
2 * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8 #include "variable_checker.h"
9
variable_checker_set_constraints(struct variable_constraints * constraints,bool is_update,const VAR_CHECK_VARIABLE_PROPERTY * check_var_property)10 efi_status_t variable_checker_set_constraints(struct variable_constraints *constraints,
11 bool is_update,
12 const VAR_CHECK_VARIABLE_PROPERTY *check_var_property)
13 {
14 /* Sanity check input parameters */
15 if (check_var_property->Revision != VAR_CHECK_VARIABLE_PROPERTY_REVISION)
16 return EFI_INVALID_PARAMETER;
17
18 if (check_var_property->MinSize > check_var_property->MaxSize)
19 return EFI_INVALID_PARAMETER;
20
21 /* New check constraints accepted */
22 constraints->revision = check_var_property->Revision;
23 constraints->attributes = check_var_property->Attributes;
24 constraints->property = check_var_property->Property;
25 constraints->min_size = check_var_property->MinSize;
26 constraints->max_size = check_var_property->MaxSize;
27
28 return EFI_SUCCESS;
29 }
30
variable_checker_get_constraints(const struct variable_constraints * constraints,VAR_CHECK_VARIABLE_PROPERTY * check_var_property)31 void variable_checker_get_constraints(const struct variable_constraints *constraints,
32 VAR_CHECK_VARIABLE_PROPERTY *check_var_property)
33 {
34 check_var_property->Revision = constraints->revision;
35 check_var_property->Attributes = constraints->attributes;
36 check_var_property->Property = constraints->property;
37 check_var_property->MinSize = constraints->min_size;
38 check_var_property->MaxSize = constraints->max_size;
39 }
40
variable_checker_check_on_set(const struct variable_constraints * constraints,uint32_t attributes,size_t data_size)41 efi_status_t variable_checker_check_on_set(const struct variable_constraints *constraints,
42 uint32_t attributes, size_t data_size)
43 {
44 (void)attributes;
45
46 if (constraints->property & VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY)
47 return EFI_WRITE_PROTECTED;
48
49 if (data_size < constraints->min_size)
50 return EFI_INVALID_PARAMETER;
51
52 if (data_size > constraints->max_size)
53 return EFI_INVALID_PARAMETER;
54
55 return EFI_SUCCESS;
56 }
57