From fa711485374b22186bc7199ea52da077f1e0acf5 Mon Sep 17 00:00:00 2001 From: Deezzir Date: Thu, 15 Dec 2022 18:31:29 -0500 Subject: [PATCH] fix: improved validatation for ram_reserved in anvil.conf --- Anvil/Tools/Get.pm | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/Anvil/Tools/Get.pm b/Anvil/Tools/Get.pm index 08dab70a..dfaeef30 100644 --- a/Anvil/Tools/Get.pm +++ b/Anvil/Tools/Get.pm @@ -717,27 +717,29 @@ ORDER BY }}); } - # Check if the reserved RAM is overriden by the config - my $ram_reserved = $anvil->data->{anvil_resources}{ram}{reserved}; - if (not $ram_reserved or $ram_reserved < 0 or $ram_reserved > $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{hardware}) - { - $ram_reserved = 0; - } + # Check if the reserved RAM is overriden by the config + my $ram_reserved = $anvil->Convert->human_readable_to_bytes({ + base2 => 1, + size => $anvil->data->{anvil_resources}{ram}{reserved}, + }); + if (($ram_reserved eq "!!error!!") or + (not $ram_reserved) or + ($ram_reserved < (2**30)) or + ($ram_reserved > $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{hardware})) + { + # The reserved RAM is invalid, so reset it. + $ram_reserved = 0; + } - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { - "anvil_resources::ram::reserved" => $ram_reserved." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $ram_reserved}).")", - }}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + "anvil_resources::ram::reserved" => $ram_reserved." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $ram_reserved}).")", + }}); # Take 4 GiB or what was provided by the config off the available RAM for the host - $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{reserved} = $ram_reserved ? $ram_reserved : (4*(2**30)); # Reserve 4 GiB by default or what's set in the config file. + $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{reserved} = $ram_reserved ? $ram_reserved : (4*(2**30)); # Reserve 4 GiB by default or what's set in the config file. $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{available} -= $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{reserved}; $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{available} -= $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{allocated}; - if ($anvil->data->{anvil_resources}{$anvil_uuid}{ram}{available} < 0) - { - $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{available} = 0; - } - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "anvil_resources::${anvil_uuid}::ram::allocated" => $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{allocated}." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{allocated}}).")", "anvil_resources::${anvil_uuid}::ram::reserved" => $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{reserved}." (".$anvil->Convert->bytes_to_human_readable({'bytes' => $anvil->data->{anvil_resources}{$anvil_uuid}{ram}{reserved}}).")",