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