mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
When finalizing a transaction, any error occurring after checking for conflicts will result in the transaction being performed only partially today. Additionally accounting data will not be updated at the end of the transaction, which might result in further problems later. Avoid those problems by multiple modifications: - free any transaction specific nodes which don't need to be committed as they haven't been written during the transaction as soon as their generation count has been verified, this will reduce the risk of out-of-memory situations - store the transaction specific node name in struct accessed_node in order to avoid the need to allocate additional memory for it when finalizing the transaction - don't stop the transaction finalization when hitting an error condition, but try to continue to handle all modified nodes - in case of a detected error do the accounting update as needed and call the data base checking only after that - if writing a node in a transaction is failing (e.g. due to a failed quota check), fail the transaction, as prior changes to struct accessed_node can't easily be undone in that case This is part of XSA-421 / CVE-2022-42326. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Tested-by: Julien Grall <jgrall@amazon.com>