Skip to content

Commit bdaf063

Browse files
fix: Remove decimal support for CPU templates
Decimal number system not typically used when addressing memory locations or values. Rather remove it to remove code surface area, decimal number support can be added back should a use-case be raised. Signed-off-by: Matthew Schlebusch <[email protected]>
1 parent 2267b59 commit bdaf063

File tree

4 files changed

+36
-27
lines changed

4 files changed

+36
-27
lines changed

src/vmm/src/cpu_config/aarch64/custom_cpu_template.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,13 @@ mod tests {
157157
}"#,
158158
);
159159
assert!(cpu_config_result.is_err());
160-
assert!(cpu_config_result
161-
.unwrap_err()
162-
.to_string()
163-
.contains("Failed to parse string [j] as a number for CPU template"));
160+
let error_msg: String = cpu_config_result.unwrap_err().to_string();
161+
// Formatted error expected clarifying the number system prefix is missing
162+
assert!(
163+
error_msg.contains("No supported number system prefix found in value"),
164+
"{}",
165+
error_msg
166+
);
164167

165168
// Malformed address as binary
166169
let cpu_config_result = serde_json::from_str::<CustomCpuTemplate>(
@@ -184,7 +187,7 @@ mod tests {
184187
r#"{
185188
"reg_modifiers": [
186189
{
187-
"addr": "200",
190+
"addr": "0x200",
188191
"bitmap": "0bx0?1_0_0x_?x1xxxx00xxx1xxxxxxxxxxx1"
189192
},
190193
]
@@ -200,7 +203,7 @@ mod tests {
200203
r#"{
201204
"reg_modifiers": [
202205
{
203-
"addr": "200",
206+
"addr": "0x200",
204207
"bitmap": "0bx00100x0x1xxxx05xxx1xxxxxxxxxxx1"
205208
},
206209
]

src/vmm/src/cpu_config/templates_serde.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
use std::str::FromStr;
5-
64
use serde::de::Error as SerdeError;
75
use serde::{Deserialize, Deserializer, Serializer};
86

@@ -29,7 +27,11 @@ macro_rules! deserialize_from_str {
2927
} else if let Some(s) = number_str.strip_prefix("0x") {
3028
$type::from_str_radix(s, 16)
3129
} else {
32-
$type::from_str(&number_str)
30+
return Err(D::Error::custom(format!(
31+
"No supported number system prefix found in value [{}]. Make sure to prefix \
32+
the number with '0x' for hexadecimal numbers or '0b' for binary numbers.",
33+
number_str,
34+
)));
3335
}
3436
.map_err(|err| {
3537
D::Error::custom(format!(
@@ -54,12 +56,6 @@ mod tests {
5456

5557
#[test]
5658
fn test_deserialize_from_str() {
57-
let valid_string = "69";
58-
let deserializer: StrDeserializer<Error> = valid_string.into_deserializer();
59-
let valid_value = deserialize_from_str_u32(deserializer);
60-
assert!(valid_value.is_ok());
61-
assert_eq!(valid_value.unwrap(), 69);
62-
6359
let valid_string = "0b1000101";
6460
let deserializer: StrDeserializer<Error> = valid_string.into_deserializer();
6561
let valid_value = deserialize_from_str_u32(deserializer);
@@ -76,5 +72,10 @@ mod tests {
7672
let deserializer: StrDeserializer<Error> = invalid_string.into_deserializer();
7773
let invalid_value = deserialize_from_str_u32(deserializer);
7874
assert!(invalid_value.is_err());
75+
76+
let invalid_string = "69";
77+
let deserializer: StrDeserializer<Error> = invalid_string.into_deserializer();
78+
let invalid_value = deserialize_from_str_u32(deserializer);
79+
assert!(invalid_value.is_err());
7980
}
8081
}

src/vmm/src/cpu_config/x86_64/custom_cpu_template.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -390,10 +390,13 @@ mod tests {
390390
}"#,
391391
);
392392
assert!(cpu_template_result.is_err());
393-
assert!(cpu_template_result
394-
.unwrap_err()
395-
.to_string()
396-
.contains("Failed to parse string [0jj0] as a number for CPU template -"));
393+
let error_msg: String = cpu_template_result.unwrap_err().to_string();
394+
// Formatted error expected clarifying the number system prefix is missing
395+
assert!(
396+
error_msg.contains("No supported number system prefix found in value"),
397+
"{}",
398+
error_msg
399+
);
397400

398401
// Malformed CPUID leaf address
399402
let cpu_template_result = serde_json::from_str::<CustomCpuTemplate>(
@@ -414,17 +417,19 @@ mod tests {
414417
}"#,
415418
);
416419
assert!(cpu_template_result.is_err());
417-
assert!(cpu_template_result
418-
.unwrap_err()
419-
.to_string()
420-
.contains("Failed to parse string [k] as a number for CPU template"));
421-
420+
let error_msg: String = cpu_template_result.unwrap_err().to_string();
421+
// Formatted error expected clarifying the number system prefix is missing
422+
assert!(
423+
error_msg.contains("No supported number system prefix found in value"),
424+
"{}",
425+
error_msg
426+
);
422427
// Malformed 64-bit bitmap - filter failed
423428
let cpu_template_result = serde_json::from_str::<CustomCpuTemplate>(
424429
r#"{
425430
"msr_modifiers": [
426431
{
427-
"addr": "200",
432+
"addr": "0x200",
428433
"bitmap": "0bx0?1_0_0x_?x1xxxx00xxx1xxxxxxxxxxx1"
429434
},
430435
]
@@ -439,7 +444,7 @@ mod tests {
439444
r#"{
440445
"msr_modifiers": [
441446
{
442-
"addr": "200",
447+
"addr": "0x200",
443448
"bitmap": "0bx00100x0x1xxxx05xxx1xxxxxxxxxxx1"
444449
},
445450
]

src/vmm/src/cpu_config/x86_64/test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ pub const TEST_TEMPLATE_JSON: &str = r#"{
8888
"bitmap": "0bx00111xxx1xxxx111xxxxx101xxxxxx1"
8989
},
9090
{
91-
"addr": "2",
91+
"addr": "0b11",
9292
"bitmap": "0bx00100xxx1xxxxxx0000000xxxxxxxx1"
9393
},
9494
{

0 commit comments

Comments
 (0)