The work to fix MISRA rule 7.4 (using mutable pointers to string literals)
identifies that string literals do indeed get passed into
hvm_copy_to_guest_linear() by way of the PVH dom0 command line.
This higlights that the copy_to_* helpers really ought to take a const
source. Update the function types to match, and cast away constness in the
wrappers around __hvm_copy() where HVMCOPY_to_guest is used.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Wei Liu <wl@xen.org>
---
xen/arch/x86/hvm/hvm.c | 11 ++++++-----
xen/arch/x86/include/asm/hvm/support.h | 4 ++--
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 57363c2ae124..32dcd34f678c 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -3401,9 +3401,10 @@ static enum hvm_translation_result __hvm_copy(
}
enum hvm_translation_result hvm_copy_to_guest_phys(
- paddr_t paddr, void *buf, unsigned int size, struct vcpu *v)
+ paddr_t paddr, const void *buf, unsigned int size, struct vcpu *v)
{
- return __hvm_copy(buf, paddr, size, v,
+ return __hvm_copy((void *)buf /* HVMCOPY_to_guest doesn't modify */,
+ paddr, size, v,
HVMCOPY_to_guest | HVMCOPY_phys, 0, NULL);
}
@@ -3415,11 +3416,11 @@ enum hvm_translation_result hvm_copy_from_guest_phys(
}
enum hvm_translation_result hvm_copy_to_guest_linear(
- unsigned long addr, void *buf, unsigned int size, uint32_t pfec,
+ unsigned long addr, const void *buf, unsigned int size, uint32_t pfec,
pagefault_info_t *pfinfo)
{
- return __hvm_copy(buf, addr, size, current,
- HVMCOPY_to_guest | HVMCOPY_linear,
+ return __hvm_copy((void *)buf /* HVMCOPY_to_guest doesn't modify */,
+ addr, size, current, HVMCOPY_to_guest | HVMCOPY_linear,
PFEC_page_present | PFEC_write_access | pfec, pfinfo);
}
diff --git a/xen/arch/x86/include/asm/hvm/support.h b/xen/arch/x86/include/asm/hvm/support.h
index 8d4707e58c9c..142e5985642d 100644
--- a/xen/arch/x86/include/asm/hvm/support.h
+++ b/xen/arch/x86/include/asm/hvm/support.h
@@ -59,7 +59,7 @@ enum hvm_translation_result {
* address range does not map entirely onto ordinary machine memory.
*/
enum hvm_translation_result hvm_copy_to_guest_phys(
- paddr_t paddr, void *buf, unsigned int size, struct vcpu *v);
+ paddr_t paddr, const void *buf, unsigned int size, struct vcpu *v);
enum hvm_translation_result hvm_copy_from_guest_phys(
void *buf, paddr_t paddr, unsigned int size);
@@ -85,7 +85,7 @@ typedef struct pagefault_info
} pagefault_info_t;
enum hvm_translation_result hvm_copy_to_guest_linear(
- unsigned long addr, void *buf, unsigned int size, uint32_t pfec,
+ unsigned long addr, const void *buf, unsigned int size, uint32_t pfec,
pagefault_info_t *pfinfo);
enum hvm_translation_result hvm_copy_from_guest_linear(
void *buf, unsigned long addr, unsigned int size, uint32_t pfec,
--
2.30.2
On 19.07.2023 14:24, Andrew Cooper wrote: > The work to fix MISRA rule 7.4 (using mutable pointers to string literals) > identifies that string literals do indeed get passed into > hvm_copy_to_guest_linear() by way of the PVH dom0 command line. > > This higlights that the copy_to_* helpers really ought to take a const > source. Update the function types to match, and cast away constness in the > wrappers around __hvm_copy() where HVMCOPY_to_guest is used. > > No functional change. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Well, yes, what do you do. Reviewed-by: Jan Beulich <jbeulich@suse.com> Jan
© 2016 - 2024 Red Hat, Inc.