- 26 Apr, 2022 2 commits
-
-
Jan Beulich authored
Besides the reporter's issue of hitting a NULL deref when !CONFIG_GDBSX, XEN_DOMCTL_test_assign_device can legitimately end up having NULL passed here, when the domctl was passed DOMID_INVALID. Fixes: 71e617a6 ("use is_iommu_enabled() where appropriate...") Reported-by:
Cheyenne Wills <cheyenne.wills@gmail.com> Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Paul Durrant <paul@xen.org> Reviewed-by:
Juergen Gross <jgross@suse.com>
-
Juergen Gross authored
Today iommu_do_domctl() is being called from arch_do_domctl() in the "default:" case of a switch statement. This has led already to crashes due to unvalidated parameters. Fix that by moving the call of iommu_do_domctl() to the main switch statement of do_domctl(). Signed-off-by:
Juergen Gross <jgross@suse.com> Reviewed-by:
Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> # Arm
-
- 22 Apr, 2022 17 commits
-
-
Juergen Gross authored
Setting errno to a negative value makes no sense. Fixes: e78e8b9b ("libxl: Add interface for querying hypervisor about PCI topology") Signed-off-by:
Juergen Gross <jgross@suse.com> Acked-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
Juergen Gross authored
Setting errno to a negative error value makes no sense. Fixes: cb99a640 ("libxc: arm: allow passing a device tree blob to the guest") Signed-off-by:
Juergen Gross <jgross@suse.com> Acked-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
Juergen Gross authored
The claimed reason for setting errno to -1 is wrong. On x86 xc_domain_pod_target() will set errno to a sane value in the error case. Fixes: ff1745d5 ("tools: libxl: do not set the PoD target on ARM") Signed-off-by:
Juergen Gross <jgross@suse.com> Acked-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
Juergen Gross authored
Setting errno to a negative value makes no sense. Fixes: 6b6500b3 ("tools/libs/evtchn: Add support for restricting a handle") Signed-off-by:
Juergen Gross <jgross@suse.com> Acked-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
Bobby Eshleman authored
With all the non-CONFIG_CRASH_DEBUG functionality moved elsewhere, split x86/debugger.h in two, with the stubs and explanation moved to xen/debugger.h. In particular, this means that arches only need to provide an $arch/debugger.h if they implement CONFIG_CRASH_DEBUG, and ARM's stub can be deleted. Signed-off-by:
Bobby Eshleman <bobby.eshleman@gmail.com> Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Acked-by:
Julien Grall <jgrall@amazon.com> Acked-by:
Jan Beulich <jbeulich@suse.com>
-
Andrew Cooper authored
* Remove inappropriate semicolon from debugger_trap_immediate(). * Try to explain what debugger_trap_fatal() is doing, and write it in a more legible way. * Drop unnecessary includes. This includes common/domain.c which doesn't use any debugger functionality, even prior to this cleanup. Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Acked-by:
Jan Beulich <jbeulich@suse.com>
-
Andrew Cooper authored
common/gdbstub.c wants struct gdb_context but only gets it transitively through asm/debugger.h. None of */gdbstub.c should include asm/debugger.h so include xen/gdbstub.h instead. Forward declare struct cpu_user_regs in xen/gdbstub.h so it doesn't depend on the include order to compile. x86/setup.c doesn't need xen/gdbstub.h at all, so drop it. Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Acked-by:
Jan Beulich <jbeulich@suse.com>
-
Andrew Cooper authored
domain_pause_for_debugger() is guest debugging (CONFIG_GDBSX) not host debugging (CONFIG_CRASH_DEBUG). Move it into the new gdbsx.c to drop the (incorrect) ifdefary, and provide a static inline in the !CONFIG_GDBSX case so callers can optimise away everything rather than having to emit a call to an empty function. Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by:
Jan Beulich <jbeulich@suse.com>
-
Bobby Eshleman authored
debug.c contains only dbg_rw_mem(). Rename it to gdbsx.c. Move gdbsx_guest_mem_io(), and the prior setup of iop->remain, from domctl.c to gdbsx.c, merging it with dbg_rw_mem(). Signed-off-by:
Bobby Eshleman <bobby.eshleman@gmail.com> Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by:
Jan Beulich <jbeulich@suse.com>
-
Bobby Eshleman authored
debugger_trap_entry() is unrelated to the other contents of debugger.h. It is a no-op for everything other than #DB/#BP, and for those it invokes guest debugging (CONFIG_GDBSX) not host debugging (CONFIG_CRASH_DEBUG). The reason it is a no-op for gdbstub is related to the fact that it's description is inappropriate for any kind of useful debugging. In normal debugging, gdb only sees things which manifest as signals; it doesn't see things which the kernel resolves itself (some #PF, #NM, etc). Furthermore, without a mechanism to invoke pv_inject_event(), the current infrastructure will livelock on faults from guest context. As such, there is no plausible future matching it's description. Any work to do something better than the current nothing will have to design something more coherent. Therefore, simplify everything by expanding debugger_trap_entry() into its two non-empty locations, fixing bugs with their positioning (vs early exceptions and curr not being safe to deference) and for #DB, deferring the pause until the changes in %dr6 are saved to v->arch.dr6 so the debugger can actually see which condition triggered. This also removes some logically dead code from do_trap(), where the compiler can't prove that #DB/#BP are handled by different codepaths. Signed-off-by:
Bobby Eshleman <bobby.eshleman@gmail.com> Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Acked-by:
Jan Beulich <jbeulich@suse.com>
-
Andrew Cooper authored
Now that `make MAP` might rebuild $(TARGET), it needs removing from no-dot-config-targets. Otherwise the build eventually fails with: CPP arch/x86/asm-macros.i arch/x86/asm-macros.c:1:10: fatal error: asm/asm-defns.h: No such file or directory 1 | #include <asm/asm-defns.h> | ^~~~~~~~~~~~~~~~~ Fixes: e1e72198 ("xen/build: Fix dependency for the MAP rule") Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Acked-by:
Jan Beulich <jbeulich@suse.com>
-
Jan Beulich authored
The retaining of .note.* in a PT_NOTE segment requires a matching program header to be present in the first place. Drop the respective conditional and adjust mkelf32 to deal with (ignore) the potentially present but empty extra segment (but have the new code be generic by dropping any excess trailing entirely empty segments). Fixes: dedb0aa4 ("x86/build: use --orphan-handling linker option if available") Signed-off-by:
Jan Beulich <jbeulich@suse.com> Acked-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
Jan Beulich authored
I think this flush was overlooked when flushing was moved out of the core (un)mapping functions. The flush the caller is required to invoke anyway will satisfy the needs resulting from the splitting of a superpage. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com>
-
Jan Beulich authored
Generic code will use this information to determine what order values can legitimately be passed to the ->{,un}map_page() hooks. For now all ops structures simply get to announce 4k mappings (as base page size), and there is (and always has been) an assumption that this matches the CPU's MMU base page size (eventually we will want to permit IOMMUs with a base page size smaller than the CPU MMU's). Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com> Acked-by:
Julien Grall <jgrall@amazon.com> Reviewed-by:
Rahul Singh <rahul.singh@arm.com>
-
Jan Beulich authored
I have to admit that I never understood why domain_pgd_maddr() wants to populate all page table levels for DFN 0. I can only assume that despite the comment there what is needed is population just down to the smallest possible nr_pt_levels that the loop later in the function may need to run to. Hence what is needed is the minimum of all possible iommu->nr_pt_levels, to then be passed into addr_to_dma_page_maddr() instead of literal 1. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com>
-
Jan Beulich authored
In order to be able to insert/remove super-pages we need to allow callers of the walking function to specify at which point to stop the walk. For intel_iommu_lookup_page() integrate the last level access into the main walking function. dma_pte_clear_one() gets only partly adjusted for now: Error handling and order parameter get put in place, but the order parameter remains ignored (just like intel_iommu_map_page()'s order part of the flags). Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com>
-
Jan Beulich authored
In order to be able to insert/remove super-pages we need to allow callers of the walking function to specify at which point to stop the walk. (For now at least gcc will instantiate just a variant of the function with the parameter eliminated, so effectively no change to generated code as far as the parameter addition goes.) Instead of merely adjusting a BUG_ON() condition, convert it into an error return - there's no reason to crash the entire host in that case. Leave an assertion though for spotting issues early in debug builds. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com>
-
- 21 Apr, 2022 2 commits
-
-
Stefano Stabellini authored
Add a minimal ARM32 smoke test based on qemu-system-arm, as provided by the test-artifacts qemu container. The minimal test simply boots Xen (built from previous build stages) and Dom0. The test needs a working kernel and minimal initrd for dom0. Instead of building our own kernel and initrd, which would mean maintaining one or two more builting scripts under automation/, we borrow a kernel and initrd from distros. For the kernel we pick the Debian Bullseye kernel, which has everything we need already built-in. However, we cannot use the Debian Bullseye initrd because it is 22MB and the large size causes QEMU to core dump. Instead, use the tiny busybox-based rootfs provided by Alpine Linux, which is really minimal: just 2.5MB. Note that we cannot use the Alpine Linux kernel because that doesn't boot on Xen. Signed-off-by:
Stefano Stabellini <stefano.stabellini@xilinx.com> Reviewed-by:
Michal Orzel <michal.orzel@arm.com>
-
Stefano Stabellini authored
Add qemu-system-arm to the existing test-artifacts qemu container (which doesn't get build for every iteration but only updated once in a while.) With qemu-system-arm available, we'll be able to run ARM32 tests. This patch also bumps the QEMU version to v6.0.0 for both arm32 and arm64 (the test-artifacts container is one, shared for both). Signed-off-by:
Stefano Stabellini <stefano.stabellini@xilinx.com> Reviewed-by:
Anthony PERARD <anthony.perard@citrix.com>
-
- 20 Apr, 2022 11 commits
-
-
Andrew Cooper authored
There is no need to opencode .got.plt size check; it can be done with linker asserts instead. Extend the checking to all dynamic linkage sections, and drop the $(OBJDUMP) pass. Furthermore, instead of removing .got.plt specifically, take only .text when converting to a flat binary. This makes the process invariant of .text's position relative to the start of the binary, which avoids needing to discard all sections, and removes the need to work around sections that certain linkers are unhappy discarding. No functional change. Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by:
Jan Beulich <jbeulich@suse.com>
-
Andrew Cooper authored
Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Acked-by:
Jan Beulich <jbeulich@suse.com>
-
David Vrabel authored
If the direct map is incorrectly modified with interrupts disabled, the required TLB flushes are degraded to flushing the local CPU only. This could lead to very hard to diagnose problems as different CPUs will end up with different views of memory. Although, no such issues have yet been identified. Change the check in the flush_area() macro to look at system_state instead. This defers the switch from local to all later in the boot (see xen/arch/x86/setup.c:__start_xen()). This is fine because additional PCPUs are not brought up until after the system state is SYS_STATE_smp_boot. Signed-off-by:
David Vrabel <dvrabel@amazon.co.uk> Reviewed-by:
Jan Beulich <jbeulich@suse.com>
-
Jan Beulich authored
The field taking the value 7 (resulting in 18-bit DIDs when using the calculation in cap_ndoms(), when the DID fields are only 16 bits wide) is reserved. Instead of misbehaving in case we would encounter such an IOMMU, refuse to use it. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com>
-
Jan Beulich authored
While 97af062b ("IOMMU/x86: maintain a per-device pseudo domain ID") took care of not making things worse, plugging pre-existing leaks wasn't the purpose of that change; they're not security relevant after all. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com>
-
Jan Beulich authored
It's not only misplaced, but entirely unused. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com>
-
Jan Beulich authored
Prior extension of these functions to enable per-device quarantine page tables already didn't add more locking there, but merely left in place what had been there before. But really locking is unnecessary here: We're running with pcidevs_lock held (i.e. multiple invocations of the same function [or their teardown equivalents] are impossible, and hence there are no "local" races), while all consuming of the data being populated here can't race anyway due to happening sequentially afterwards, and unlike ordinary domains' page tables quarantine ones are never modified once fully constructed. See also the comment in struct arch_pci_dev. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com> Reviewed-by:
Kevin Tian <kevin.tian@intel.com>
-
Juergen Gross authored
The result field of struct vscsiif_response is lacking a detailed definition. Today the Linux kernel internal scsi definitions are being used, which is not a sane interface for a PV device driver. Add macros to change that by using today's values in the XEN namespace. Signed-off-by:
Juergen Gross <jgross@suse.com> Reviewed-by:
Luca Fancellu <luca.fancellu@arm.com>
-
Peng Fan authored
Signed-off-by:
Peng Fan <peng.fan@nxp.com> Reviewed-by:
Michal Orzel <michal.orzel@arm.com> Acked-by:
Bertrand Marquis <bertrand.marquis@arm.com> Acked-by:
Stefano Stabellini <sstabellini@kernel.org>
-
Peng Fan authored
The i.MX LPUART Documentation: https://www.nxp.com/webapp/Download?colCode=IMX8QMIEC Chatper 13.6 Low Power Universal Asynchronous Receiver/ Transmitter (LPUART) Tested-by:
Henry Wang <Henry.Wang@arm.com> Signed-off-by:
Peng Fan <peng.fan@nxp.com> Reviewed-by:
Michal Orzel <michal.orzel@arm.com> Acked-by:
Stefano Stabellini <sstabellini@kernel.org>
-
Michal Orzel authored
DT_MATCH_TIMER stores the compatible timer ids and as such should be used in all the places where we need to refer to them. make_timer_node explicitly lists the same ids as the ones defined in DT_MATCH_TIMER so make use of this macro instead. Signed-off-by:
Michal Orzel <michal.orzel@arm.com> Reviewed-by:
Stefano Stabellini <sstabellini@kernel.org>
-
- 19 Apr, 2022 2 commits
-
-
Juergen Gross authored
Modify the gdbsx_guest_mem_io() interface to take the already known domain pointer as parameter instead of the domid. This enables to remove some more code further down the call tree. Suggested-by:
Jan Beulich <jbeulich@suse.com> Signed-off-by:
Juergen Gross <jgross@suse.com> Reviewed-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
Juergen Gross authored
A hypervisor built without CONFIG_GDBSX will crash in case the XEN_DOMCTL_gdbsx_guestmemio domctl is being called, as the call will end up in iommu_do_domctl() with d == NULL: (XEN) CPU: 6 (XEN) RIP: e008:[<ffff82d040269984>] iommu_do_domctl+0x4/0x30 (XEN) RFLAGS: 0000000000010202 CONTEXT: hypervisor (d0v0) (XEN) rax: 00000000000003e8 rbx: ffff830856277ef8 rcx: ffff830856277fff ... (XEN) Xen call trace: (XEN) [<ffff82d040269984>] R iommu_do_domctl+0x4/0x30 (XEN) [<ffff82d04035cd5f>] S arch_do_domctl+0x7f/0x2330 (XEN) [<ffff82d040239e46>] S do_domctl+0xe56/0x1930 (XEN) [<ffff82d040238ff0>] S do_domctl+0/0x1930 (XEN) [<ffff82d0402f8c59>] S pv_hypercall+0x99/0x110 (XEN) [<ffff82d0402f5161>] S arch/x86/pv/domain.c#_toggle_guest_pt+0x11/0x90 (XEN) [<ffff82d040366288>] S lstar_enter+0x128/0x130 (XEN) (XEN) Pagetable walk from 0000000000000144: (XEN) L4[0x000] = 0000000000000000 ffffffffffffffff (XEN) (XEN) **************************************** (XEN) Panic on CPU 6: (XEN) FATAL PAGE FAULT (XEN) [error_code=0000] (XEN) Faulting linear address: 0000000000000144 (XEN) **************************************** It used to be permitted to pass DOMID_IDLE to dbg_rw_mem(), which is why the special case skipping the domid checks exists. Now that it is only permitted to pass proper domids, remove the special case, making 'd' always valid. Reported-by:
Cheyenne Wills <cheyenne.wills@gmail.com> Fixes: e726a82c ("xen: make gdbsx support configurable") Signed-off-by:
Juergen Gross <jgross@suse.com> Reviewed-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Andrew Cooper <andrew.cooper3@citrix.com>
-
- 14 Apr, 2022 1 commit
-
-
Andrew Cooper authored
compile.h changes across incremental builds, but nothing in debug.c uses it. This avoids debug.c getting rebuilt on every incremental build. Signed-off-by:
Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by:
Jan Beulich <jbeulich@suse.com>
-
- 13 Apr, 2022 3 commits
-
-
Jan Beulich authored
To handle phantom devices, several functions are passed separate "devfn" arguments besides a PCI device. In such cases we want to log the phantom device's coordinates instead of the main one's. (Note that not all of the instances being changed are fallout from the referenced commit.) Fixes: 1ee14418 ("print: introduce a format specifier for pci_sbdf_t") Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com>
-
Jan Beulich authored
struct pci_dev has the wanted value directly available; use it. Note that this fixes a - imo benign - mistake in reassign_device(): The unity map removal ought to be based on the passed in devfn (as is the case on the establishing side). This is benign because the mappings would be removed anyway a little later, when the "main" device gets processed. While there also limit the scope of two variables in that function. Signed-off-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Roger Pau Monné <roger.pau@citrix.com>
-
Anthony PERARD authored
This implement out-of-tree support, there's two ways to create an out-of-tree build tree (after that, `make` in that new directory works): make O=build mkdir build; cd build; make -f ../Makefile also works with an absolute path for both. This implementation only works if the source tree is clean, as we use VPATH. This patch copies most new code with handling out-of-tree build from Linux v5.12. Signed-off-by:
Anthony PERARD <anthony.perard@citrix.com> Acked-by:
Jan Beulich <jbeulich@suse.com> Reviewed-by:
Daniel P. Smith <dpsmith@apertussolutions.com> Acked-by:
Julien Grall <jgrall@amazon.com> Tested-by:
Julien Grall <jgrall@amazon.com> Acked-by: Ross Lagerwall <ross.lagerwall@citrix.com> # livepatch
-
- 12 Apr, 2022 1 commit
-
-
Stefano Stabellini authored
I have contributed all the ARM tests to gitlab-ci. After checking with Doug, I am happy to volunteer to co-maintain Continuous Integration. Also take the opportunity to remove the stale travis-ci entries. Signed-off-by:
Stefano Stabellini <sstabellini@kernel.org> Acked-by:
Doug Goldstein <cardoe@cardoe.com> Acked-by:
Anthony PERARD <anthony.perard@citrix.com>
-
- 11 Apr, 2022 1 commit
-
-
Roger Pau Monné authored
Current vif and vcpupin parse tests are out of sync. First of all, xl returns 1 on failure, so replace the expected error code. Secondly fix the expected output from some vif tests, as xl will no longer print the unpopulated fields. Signed-off-by:
Roger Pau Monné <roger.pau@citrix.com> Acked-by:
Anthony PERARD <anthony.perard@citrix.com>
-