On 2026-09-02 08:33, Jan Beulich wrote:
Like x86/HVM's __hvm_copy(), Arm's copy_guest() is used for both
to-guest
and from-guest copying. Naturally in the latter case the hypervisor
buffer
needs writing to, hence the function parameter cannot be
pointer-to-const.
No functional change intended.
Signed-off-by: Jan Beulich <[email protected]>
Reviewed-by: Nicola Vetrini <[email protected]>
See comment below, but I can do as a follow-up if you'd like.
---
Of course for both the pre-existing x86 deviation and the new Arm one
it
might be more robust if the deviation was also limited to the
respective
source file. Can this be expressed together with the needed regex?
Yes, e.g.
-config=MC3A2.R11.8,reports+={safe,"any_area(any_loc(file(^xen/arch/arm/...$)&&text(^.*copy_guest.*COPY_to_guest
doesn't modify.*$)))"}
not compile-tested, so YMMV.
--- a/automation/eclair_analysis/ECLAIR/deviations.ecl
+++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
@@ -433,6 +433,12 @@ Fixing this violation would require to i
-config=MC3A2.R11.8,reports+={safe,"any_area(any_loc(any_exp(macro(^container_of$))))"}
-doc_end
+-doc_begin="Function copy_guest() in xen/arch/arm/guestcopy.c is a
double-use
+function, where the parameter needs to not be const because it can be
set for
+write or not"
+-config=MC3A2.R11.8,reports+={safe,"any_area(any_loc(text(^.*copy_guest.*COPY_to_guest
doesn't modify.*$)))"}
+-doc_end
+
-doc_begin="Function __hvm_copy in xen/arch/x86/hvm/hvm.c is a
double-use
function, where the parameter needs to not be const because it can be
set for
write or not"
--- a/xen/arch/arm/guestcopy.c
+++ b/xen/arch/arm/guestcopy.c
@@ -109,14 +109,16 @@ static unsigned long copy_guest(void *bu
unsigned long raw_copy_to_guest(void *to, const void *from, unsigned
int len)
{
- return copy_guest((void *)from, (vaddr_t)to, len,
- GVA_INFO(current), COPY_to_guest | COPY_linear);
+ return copy_guest((void *)from, /* COPY_to_guest doesn't modify */
+ (vaddr_t)to, len, GVA_INFO(current),
+ COPY_to_guest | COPY_linear);
}
unsigned long raw_copy_to_guest_flush_dcache(void *to, const void
*from,
unsigned int len)
{
- return copy_guest((void *)from, (vaddr_t)to, len,
GVA_INFO(current),
+ return copy_guest((void *)from, /* COPY_to_guest doesn't modify */
+ (vaddr_t)to, len, GVA_INFO(current),
COPY_to_guest | COPY_flush_dcache |
COPY_linear);
}
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253