mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
tpm: mark correct memory region range dirty when clearing RAM
We might not start at the beginning of the memory region. Let's
calculate the offset into the memory region via the difference in the
host addresses.
Acked-by: Stefan Berger <stefanb@linux.ibm.com>
Fixes: ffab1be706
("tpm: clear RAM when "memory overwrite" requested")
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Claudio Fontana <cfontana@suse.de>
Cc: Thomas Huth <thuth@redhat.com>
Cc: "Alex Bennée" <alex.bennee@linaro.org>
Cc: Peter Xu <peterx@redhat.com>
Cc: Laurent Vivier <lvivier@redhat.com>
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Message-Id: <20210727082545.17934-2-david@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
77ae2302ae
commit
45e576c745
1 changed files with 4 additions and 1 deletions
|
@ -30,11 +30,14 @@ void tpm_ppi_reset(TPMPPI *tpmppi)
|
||||||
guest_phys_blocks_init(&guest_phys_blocks);
|
guest_phys_blocks_init(&guest_phys_blocks);
|
||||||
guest_phys_blocks_append(&guest_phys_blocks);
|
guest_phys_blocks_append(&guest_phys_blocks);
|
||||||
QTAILQ_FOREACH(block, &guest_phys_blocks.head, next) {
|
QTAILQ_FOREACH(block, &guest_phys_blocks.head, next) {
|
||||||
|
hwaddr mr_offs = block->host_addr -
|
||||||
|
(uint8_t *)memory_region_get_ram_ptr(block->mr);
|
||||||
|
|
||||||
trace_tpm_ppi_memset(block->host_addr,
|
trace_tpm_ppi_memset(block->host_addr,
|
||||||
block->target_end - block->target_start);
|
block->target_end - block->target_start);
|
||||||
memset(block->host_addr, 0,
|
memset(block->host_addr, 0,
|
||||||
block->target_end - block->target_start);
|
block->target_end - block->target_start);
|
||||||
memory_region_set_dirty(block->mr, 0,
|
memory_region_set_dirty(block->mr, mr_offs,
|
||||||
block->target_end - block->target_start);
|
block->target_end - block->target_start);
|
||||||
}
|
}
|
||||||
guest_phys_blocks_free(&guest_phys_blocks);
|
guest_phys_blocks_free(&guest_phys_blocks);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue