AMT Manager crash fixes.

Ylian Saint-Hilaire committed Oct 23, 2020 at 09:45 UTC 46f1cad3be9151f1ef5f3e163d694ab6321e211f
1 file changed +30 -18
amtmanager.js
+30 -18
@@ -504,8 +504,10 @@ module.exports.CreateAmtManager = function (parent) {
504 dev.state = 1;
505 if (dev.aquired == null) { dev.aquired = {}; }
506 dev.aquired.controlMode = responses['IPS_HostBasedSetupService'].response.CurrentControlMode; // 1 = CCM, 2 = ACM
507 - var verSplit = stack.wsman.comm.amtVersion.split('.');
508 - if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
507 + if (typeof stack.wsman.comm.amtVersion == 'string') { // Set the Intel AMT version using the HTTP header if present
508 + var verSplit = stack.wsman.comm.amtVersion.split('.');
509 + if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
510 + }
511 dev.aquired.realm = stack.wsman.comm.digestRealm;
512 dev.aquired.user = dev.intelamt.user = stack.wsman.comm.user;
513 dev.aquired.pass = dev.intelamt.pass = stack.wsman.comm.pass;
@@ -690,7 +692,7 @@ module.exports.CreateAmtManager = function (parent) {
692
693 if ((status != 200) || (responses['CIM_ServiceAvailableToElement'] == null) || (responses['CIM_ServiceAvailableToElement'].responses == null) || (responses['CIM_ServiceAvailableToElement'].responses.length < 1)) return; // If the polling fails, just skip it.
694 var powerstate = responses['CIM_ServiceAvailableToElement'].responses[0].PowerState;
693 - if ((powerstate == 2) && (dev.aquired.majorver > 9)) {
695 + if ((powerstate == 2) && (dev.aquired.majorver != null) && (dev.aquired.majorver > 9)) {
696 // Device is powered on and Intel AMT 10+, poll the OS power state.
697 dev.amtstack.Get('IPS_PowerManagementService', function (stack, name, response, status) {
698 const dev = stack.dev;
@@ -1100,13 +1102,13 @@ module.exports.CreateAmtManager = function (parent) {
1102 dev.taskCount = 1;
1103 dev.taskCompleted = func;
1104 var requests = ['*AMT_EnvironmentDetectionSettingData', 'AMT_ManagementPresenceRemoteSAP', 'AMT_RemoteAccessCredentialContext', 'AMT_RemoteAccessPolicyAppliesToMPS', 'AMT_RemoteAccessPolicyRule', '*AMT_UserInitiatedConnectionService', 'AMT_MPSUsernamePassword'];
1103 - if (dev.aquired.majorver > 11) { requests.push('*IPS_HTTPProxyService', 'IPS_HTTPProxyAccessPoint'); }
1105 + if ((dev.aquired.majorver != null) && (dev.aquired.majorver > 11)) { requests.push('*IPS_HTTPProxyService', 'IPS_HTTPProxyAccessPoint'); }
1106 dev.amtstack.BatchEnum(null, requests, function (stack, name, responses, status) {
1107 const dev = stack.dev;
1108 if (isAmtDeviceValid(dev) == false) return; // Device no longer exists, ignore this request.
1109 //dev.consoleMsg("Added server root certificate.");
1110
1109 - if ((dev.aquired.majorver > 11) && (status == 400)) {
1111 + if ((dev.aquired.majorver != null) && (dev.aquired.majorver > 11) && (status == 400)) {
1112 // Check if only the HTTP proxy objects failed
1113 status = 200;
1114 if (responses['IPS_HTTPProxyAccessPoint'].status == 400) { delete responses['IPS_HTTPProxyAccessPoint']; }
@@ -1206,7 +1208,7 @@ module.exports.CreateAmtManager = function (parent) {
1208
1209 function addMpsPolicy(dev) {
1210 if (dev.cira.mpsPolicy == false) {
1209 - var cilaSupport = ((dev.aquired.majorver > 11) || ((dev.aquired.majorver == 11) && (dev.aquired.minorver >= 6)));
1211 + var cilaSupport = ((dev.aquired.majorver != null) && (dev.aquired.minorver != null)) && ((dev.aquired.majorver > 11) || ((dev.aquired.majorver == 11) && (dev.aquired.minorver >= 6)));
1212 var trigger = 2; // 1 = Alert, 2 = Periodic
1213
1214 // Setup extended data
@@ -1297,7 +1299,7 @@ module.exports.CreateAmtManager = function (parent) {
1299
1300 // Query the things we are going to be checking
1301 var query = ['*AMT_GeneralSettings', '*AMT_RedirectionService'];
1300 - if (dev.aquired.majorver > 5) { query.push('*CIM_KVMRedirectionSAP', '*IPS_OptInService'); }
1302 + if ((dev.aquired.majorver != null) && (dev.aquired.majorver > 5)) { query.push('*CIM_KVMRedirectionSAP', '*IPS_OptInService'); }
1303 dev.amtstack.BatchEnum('', query, attemptSettingsSyncResponse);
1304 }
1305
@@ -1342,7 +1344,7 @@ module.exports.CreateAmtManager = function (parent) {
1344 }
1345
1346 // Check KVM state
1345 - if ((dev.aquired.majorver > 5) && (responses['CIM_KVMRedirectionSAP'] != null)) {
1347 + if ((dev.aquired.majorver != null) && (dev.aquired.majorver > 5) && (responses['CIM_KVMRedirectionSAP'] != null)) {
1348 var kvm = (((responses['CIM_KVMRedirectionSAP'].response['EnabledState'] == 6) && (responses['CIM_KVMRedirectionSAP'].response['RequestedState'] == 2)) || (responses['CIM_KVMRedirectionSAP'].response['EnabledState'] == 2) || (responses['CIM_KVMRedirectionSAP'].response['EnabledState'] == 6));
1349 if (kvm == false) {
1350 // Enable KVM
@@ -1500,7 +1502,8 @@ module.exports.CreateAmtManager = function (parent) {
1502 var m2 = {}, m = hw.PhysicalMemory[i];
1503 m2.BankLabel = m.BankLabel;
1504 m2.Capacity = m.Capacity;
1503 - if (m.PartNumber) { m2.PartNumber = m.PartNumber.trim(); }
1505 + if (typeof m.PartNumber == 'string') { m2.PartNumber = m.PartNumber.trim(); }
1506 + if (typeof m.PartNumber == 'number') { m2.PartNumber = m.PartNumber; }
1507 if (typeof m.SerialNumber == 'string') { m2.SerialNumber = m.SerialNumber.trim(); }
1508 if (typeof m.SerialNumber == 'number') { m2.SerialNumber = m.SerialNumber; }
1509 if (typeof m.Manufacturer == 'string') { m2.Manufacturer = m.Manufacturer.trim(); }
@@ -1520,15 +1523,20 @@ module.exports.CreateAmtManager = function (parent) {
1523 hw2.hardware.identifiers.storage_devices = drives;
1524 }
1525 if (hw.Bios != null) {
1523 - if (hw.Bios.Manufacturer) { hw2.hardware.identifiers.bios_vendor = hw.Bios.Manufacturer.trim(); }
1526 + if (typeof hw.Bios.Manufacturer == 'string') { hw2.hardware.identifiers.bios_vendor = hw.Bios.Manufacturer.trim(); }
1527 + if (typeof hw.Bios.Manufacturer == 'number') { hw2.hardware.identifiers.bios_vendor = hw.Bios.Manufacturer; }
1528 hw2.hardware.identifiers.bios_version = hw.Bios.Version;
1529 if (hw.Bios.ReleaseDate && hw.Bios.ReleaseDate.Datetime) { hw2.hardware.identifiers.bios_date = hw.Bios.ReleaseDate.Datetime; }
1530 }
1531 if (hw.PhysicalPackage != null) {
1528 - if (hw.Card.Model) { hw2.hardware.identifiers.board_name = hw.Card.Model.trim(); }
1529 - if (hw.Card.Manufacturer) { hw2.hardware.identifiers.board_vendor = hw.Card.Manufacturer.trim(); }
1530 - if (hw.Card.Version) { hw2.hardware.identifiers.board_version = hw.Card.Version.trim(); }
1531 - if (hw.Card.SerialNumber) { hw2.hardware.identifiers.board_serial = hw.Card.SerialNumber.trim(); }
1532 + if (typeof hw.Card.Model == 'string') { hw2.hardware.identifiers.board_name = hw.Card.Model.trim(); }
1533 + if (typeof hw.Card.Model == 'number') { hw2.hardware.identifiers.board_name = hw.Card.Model; }
1534 + if (typeof hw.Card.Manufacturer == 'string') { hw2.hardware.identifiers.board_vendor = hw.Card.Manufacturer.trim(); }
1535 + if (typeof hw.Card.Manufacturer == 'number') { hw2.hardware.identifiers.board_vendor = hw.Card.Manufacturer; }
1536 + if (typeof hw.Card.Version == 'string') { hw2.hardware.identifiers.board_version = hw.Card.Version.trim(); }
1537 + if (typeof hw.Card.Version == 'number') { hw2.hardware.identifiers.board_version = hw.Card.Version; }
1538 + if (typeof hw.Card.SerialNumber == 'string') { hw2.hardware.identifiers.board_serial = hw.Card.SerialNumber.trim(); }
1539 + if (typeof hw.Card.SerialNumber == 'number') { hw2.hardware.identifiers.board_serial = hw.Card.SerialNumber; }
1540 }
1541 if ((hw.Chips != null) && (hw.Chips.length > 0)) {
1542 for (var i in hw.Chips) {
@@ -1633,8 +1641,10 @@ module.exports.CreateAmtManager = function (parent) {
1641 // Update the device
1642 dev.aquired = {};
1643 dev.aquired.controlMode = 1; // 1 = CCM, 2 = ACM
1636 - var verSplit = dev.amtstack.wsman.comm.amtVersion.split('.');
1637 - if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
1644 + if (typeof dev.amtstack.wsman.comm.amtVersion == 'string') {
1645 + var verSplit = dev.amtstack.wsman.comm.amtVersion.split('.');
1646 + if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
1647 + }
1648 if ((typeof dev.mpsConnection.tag.meiState.OsHostname == 'string') && (typeof dev.mpsConnection.tag.meiState.OsDnsSuffix == 'string')) {
1649 dev.aquired.host = dev.mpsConnection.tag.meiState.OsHostname + '.' + dev.mpsConnection.tag.meiState.OsDnsSuffix;
1650 }
@@ -1757,8 +1767,10 @@ module.exports.CreateAmtManager = function (parent) {
1767 // Update the device
1768 dev.aquired = {};
1769 dev.aquired.controlMode = 2; // 1 = CCM, 2 = ACM
1760 - var verSplit = dev.amtstack.wsman.comm.amtVersion.split('.');
1761 - if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
1770 + if (typeof dev.amtstack.wsman.comm.amtVersion == 'string') {
1771 + var verSplit = dev.amtstack.wsman.comm.amtVersion.split('.');
1772 + if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
1773 + }
1774 if ((typeof dev.mpsConnection.tag.meiState.OsHostname == 'string') && (typeof dev.mpsConnection.tag.meiState.OsDnsSuffix == 'string')) {
1775 dev.aquired.host = dev.mpsConnection.tag.meiState.OsHostname + '.' + dev.mpsConnection.tag.meiState.OsDnsSuffix;
1776 }