)]}'
{
  "commit": "10fbe40f88df3b49d70d1c21b347712c9b0f6204",
  "tree": "f3e7f3ec0542869ec489d9712bcd782546b22dab",
  "parents": [
    "191707d220145726ff4df40071091d979d1e6cc0"
  ],
  "author": {
    "name": "Dhruv Rathi",
    "email": "dhruvr@nvidia.com",
    "time": "Fri Jun 26 10:00:21 2026 +0530"
  },
  "committer": {
    "name": "Dhruv Rathi",
    "email": "rathidhruv04@gmail.com",
    "time": "Mon Jul 27 09:33:40 2026 +0000"
  },
  "message": "fw-update: reject mismatched EID in ItemUpdateManager dispatch\n\nItemUpdateManager::handleRequest declared its eid parameter as\nmctp_eid_t /*eid*/ and dispatched purely on command. Combined with\nAggregateUpdateManager iterating updateManagers in SoftwareIdentifier\n(i.e. eid-then-component) order, whichever active ItemUpdateManager\ncame first claimed every FW-update response regardless of the inbound\nEID. Two concurrent target updates on different EIDs would have all\nresponses funneled to the lower-EID manager.\n\nConcretely: with an update on EID 12 in flight, starting an update\non EID 10 created ItemUpdateManager(10). EID 12\u0027s apply_complete was\nthen consumed by deviceUpdater10 and logged as if it belonged to EID\n10 (device_updater.cpp:858 uses the deviceUpdater\u0027s own eid member).\nEID 10 timed out on ActivateFirmware while EID 12\u0027s deviceUpdater\nstate was corrupted by the misrouted messages.\n\nThe per-ItemUpdateManager state (deviceUpdater, packageMap, dupFd,\ninProgressActivation, ...) is already independent, and the shared\nHandler\u003cRequest\u003e/InstanceIdDb demux BMC-\u003eFD responses by\n(eid, instanceId), so concurrent multi-EID target updates work\ncorrectly once the responder path stops the cross-EID misrouting.\n\nAdd an explicit eid !\u003d this-\u003eeid early-return that yields\nPLDM_FWUP_COMMAND_NOT_EXPECTED, letting AggregateUpdateManager fall\nthrough to the next manager. Fold the !deviceUpdater branch into the\nsame early-return since it returns the same encoded response, and\nconvert the placement-new calls to std::start_lifetime_as\u003c\u003e to match\nthe rest of the codebase.\n\nTested on nvl32-obmc:\n- Full bundle multipart update.\n- Single target update.\n- Back to back single-target updates.\n- Full bundle update followed by a target update (previously flooded\n  the journal with \"invalid state when updating progress\" and served\n  data from the stale bundle DeviceUpdater; now routed correctly).\n- Target update on a second PLDM device while an update on another\n  device is in progress: both complete successfully.\n- Target update on the same device while its update is in progress:\n  rejected as expected.\n\nSigned-off-by: Dhruv Rathi \u003crathidhruv04@gmail.com\u003e\nChange-Id: I390c54c82fc6405de37a06af6a8d0e80d31735d3\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4e5def485b11b064dbdf4b4f6d5686cd18afdf1f",
      "old_mode": 33188,
      "old_path": "fw-update/item_update_manager.cpp",
      "new_id": "2d014dd052a0753c83ea48e8fccce1cfcfeeb363",
      "new_mode": 33188,
      "new_path": "fw-update/item_update_manager.cpp"
    }
  ]
}
