|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/oprofile: remove compat accessors usage from backtrace
On 23.04.2021 14:35, Roger Pau Monne wrote:
> Remove the unneeded usage of the compat layer to copy frame pointers
> from guest address space. Instead just use raw_copy_from_guest.
>
> Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> ---
> Just build tested. Note sure I'm missing something, since using the
> compat layer here was IMO much more complicated than just using the
> raw accessors.
The main reason, I suppose, was that raw_copy_*() aren't supposed to
be used directly.
> @@ -59,34 +56,17 @@ dump_guest_backtrace(struct vcpu *vcpu, const struct
> frame_head *head,
> {
> frame_head_t bufhead;
>
> -#ifdef CONFIG_COMPAT
> if ( is_32bit_vcpu(vcpu) )
> {
> - DEFINE_COMPAT_HANDLE(frame_head32_t);
> - __compat_handle_const_frame_head32_t guest_head =
> - { .c = (unsigned long)head };
You're losing the truncation to 32 bits here.
> frame_head32_t bufhead32;
>
> - /* Also check accessibility of one struct frame_head beyond */
> - if (!compat_handle_okay(guest_head, 2))
> - return 0;
If you intentionally remove this and ...
> - if (__copy_from_compat(&bufhead32, guest_head, 1))
> + if (raw_copy_from_guest(&bufhead32, head, sizeof(bufhead32)))
> return 0;
> bufhead.ebp = (struct frame_head *)(unsigned long)bufhead32.ebp;
> bufhead.ret = bufhead32.ret;
> }
> - else
> -#endif
> - {
> - XEN_GUEST_HANDLE_PARAM(const_frame_head_t) guest_head =
> - const_guest_handle_from_ptr(head, frame_head_t);
> -
> - /* Also check accessibility of one struct frame_head beyond */
> - if (!guest_handle_okay(guest_head, 2))
> - return 0;
... this, then you should justify why these aren't needed anymore
(or maybe were never really needed). They've been put there for a
purpose, I'm sure, even if I'm unclear about what one it was/is.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |