]> xenbits.xensource.com Git - people/andrewcoop/xen-test-framework.git/log
people/andrewcoop/xen-test-framework.git
7 years agopoll console github/console
Andrew Cooper [Tue, 4 Jul 2017 09:05:37 +0000 (09:05 +0000)]
poll

7 years agodocs: Fix up the doxygen formatting for _ASM_TRAP_OK()
Andrew Cooper [Mon, 10 Jul 2017 13:00:09 +0000 (14:00 +0100)]
docs: Fix up the doxygen formatting for _ASM_TRAP_OK()

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agocleanup to nmi-taskswitch-priv
Andrew Cooper [Mon, 10 Jul 2017 13:09:38 +0000 (14:09 +0100)]
cleanup to nmi-taskswitch-priv

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agodocs: Fix the list of changeset in the history section
Andrew Cooper [Mon, 10 Jul 2017 12:58:01 +0000 (13:58 +0100)]
docs: Fix the list of changeset in the history section

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoFunctional test for an NMI-triggered task switch which increases privilege
Andrew Cooper [Thu, 1 Jun 2017 11:15:22 +0000 (12:15 +0100)]
Functional test for an NMI-triggered task switch which increases privilege

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoSplit existing Gate Descriptor infrastructure out into x86-gate.h
Andrew Cooper [Thu, 1 Jun 2017 11:15:22 +0000 (12:15 +0100)]
Split existing Gate Descriptor infrastructure out into x86-gate.h

Following in the style of the TSS work:

 * Rename gate_desc to env_gate
 * Rename seg_gate{32,64} to x86_gate{32,64}

In addition,

 * Expose call gate parameter counts for completeness.
 * Introduce pack_gate() which works on the appropriate type of gate, which
   allows for removal of #ifdef'ary during HVM setup.
 * Introduce pack_task_gate() which wraps pack_gate(), and allows for further
   #ifdef'ary removal in setup_doublefault().

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agohvm32: Fill in tss.cr3 for the default task
Andrew Cooper [Thu, 1 Jun 2017 11:15:22 +0000 (12:15 +0100)]
hvm32: Fill in tss.cr3 for the default task

This is necessary for 32bit tests in, which end up task switching back to the
default task.  %cr3 gets reloaded as part of a task switch, which causes a
triple fault for 32bit paged environments.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoAdd declarations for l?_table_offset() in unpaged environments
Andrew Cooper [Thu, 6 Jul 2017 15:45:32 +0000 (16:45 +0100)]
Add declarations for l?_table_offset() in unpaged environments

This helps with writing code with reduced #ifdef'ary.  Remove stray externs
from other compatibility functions.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoExtend APIC infrastructure with ICR helpers
Andrew Cooper [Thu, 1 Jun 2017 11:15:22 +0000 (12:15 +0100)]
Extend APIC infrastructure with ICR helpers

Abstract away the split MMIO write.  While adding the MSR side, fix the broken
constraints for apic_msr_write().

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoIntroduce locked bt* operations
Andrew Cooper [Tue, 4 Jul 2017 16:51:03 +0000 (16:51 +0000)]
Introduce locked bt* operations

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon in VMX root w/ CPL = 3 and w/ current VMCS
Haozhong Zhang [Fri, 16 Dec 2016 13:43:48 +0000 (21:43 +0800)]
vvmx: Test vmxon in VMX root w/ CPL = 3 and w/ current VMCS

Fault #GP(0) is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon in VMX root w/ CPL = 0 and w/ current VMCS
Haozhong Zhang [Fri, 16 Dec 2016 13:43:47 +0000 (21:43 +0800)]
vvmx: Test vmxon in VMX root w/ CPL = 0 and w/ current VMCS

VMfailvalid() is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon in VMX root w/ CPL = 3 and w/o current VMCS
Haozhong Zhang [Fri, 16 Dec 2016 13:43:46 +0000 (21:43 +0800)]
vvmx: Test vmxon in VMX root w/ CPL = 3 and w/o current VMCS

Fault #GP(0) is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon in VMX root w/ CPL = 0 and w/o current VMCS
Haozhong Zhang [Fri, 16 Dec 2016 13:43:45 +0000 (21:43 +0800)]
vvmx: Test vmxon in VMX root w/ CPL = 0 and w/o current VMCS

VMfailInvalid is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test the correct vmxon
Haozhong Zhang [Fri, 16 Dec 2016 13:43:44 +0000 (21:43 +0800)]
vvmx: Test the correct vmxon

No error is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon with bit 31 of VMCS revision ID set
Haozhong Zhang [Fri, 16 Dec 2016 13:43:43 +0000 (21:43 +0800)]
vvmx: Test vmxon with bit 31 of VMCS revision ID set

VMfailInvalid is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon with mismatched VMCS revision ID
Haozhong Zhang [Fri, 16 Dec 2016 13:43:42 +0000 (21:43 +0800)]
vvmx: Test vmxon with mismatched VMCS revision ID

VMfailInvalid is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon with unaligned VMXON region address
Haozhong Zhang [Fri, 16 Dec 2016 13:43:41 +0000 (21:43 +0800)]
vvmx: Test vmxon with unaligned VMXON region address

VMfailInvalid is expected in this case.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon with invalidly wide VMXON region address
Haozhong Zhang [Fri, 16 Dec 2016 13:43:40 +0000 (21:43 +0800)]
vvmx: Test vmxon with invalidly wide VMXON region address

VMfailInvalid is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon in CPL=3 inside and outside of VMX operation
Haozhong Zhang [Fri, 16 Dec 2016 13:43:39 +0000 (21:43 +0800)]
vvmx: Test vmxon in CPL=3 inside and outside of VMX operation

Faults #UD and #GP(0) are expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Introduce a second test, checking both #UD and #GP(0)

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test vmxon with CR4.VMXE cleared
Haozhong Zhang [Fri, 16 Dec 2016 13:43:38 +0000 (21:43 +0800)]
vvmx: Test vmxon with CR4.VMXE cleared

Fault #UD is expected in this test.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoExtend exinfo_t with test-available bits
Andrew Cooper [Wed, 28 Jun 2017 15:35:48 +0000 (15:35 +0000)]
Extend exinfo_t with test-available bits

VT-x adds two extra logical errors from executing instructions.  Add two new
testa-avaialble bits into the generic infrastructure.

For the vvmx test, introduce XTF-wide helpers for the VMX Instruction Error
ABI, and test-specific helpers for VMX Instruction Error reporting via
extinfo_t, along with logic to decode the errors for printing.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: Test whether MSR_IA32_VMX_BASIC is set correctly
Haozhong Zhang [Fri, 16 Dec 2016 13:43:35 +0000 (21:43 +0800)]
vvmx: Test whether MSR_IA32_VMX_BASIC is set correctly

It tests whether bit 31 and bit 48 are 0, and VMCS size is in the
range (0, 4096].

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoDon't automatically recover from traps
Andrew Cooper [Thu, 1 Jun 2017 11:13:22 +0000 (12:13 +0100)]
Don't automatically recover from traps

While this property is useful for swint-emulation, it is unhelpful in other
situations, as it causes unexpected traps to get swallowed silently.

Reuse the existing extable logic (with fault == fixup) to recover, and
introduce _ASM_TRAP_OK() to introduce such an extable entry.

Adjust the swint-emulation and selftest logic following this behaviour change,
which removes the test_int3_breakpoint() case entirely.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoClean up extable.h
Andrew Cooper [Wed, 28 Jun 2017 14:51:06 +0000 (14:51 +0000)]
Clean up extable.h

Factor _ASM_EXTABLE() out of the C/ASM logic, and implement it in terms of
_ASM_EXTABLE_HANDLER().

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agovvmx: test whether MSR_FEATURE_CONTROL is set correctly
Haozhong Zhang [Fri, 16 Dec 2016 13:43:34 +0000 (21:43 +0800)]
vvmx: test whether MSR_FEATURE_CONTROL is set correctly

Guest MSR_FEATURE_CONTROL is set by Xen hypervisor instead by
guest firmware or hvmloader, so this test instead checks whether bits
in MSR_FEATURE_CONTROL are set correctly, rather than requiring
they are all zeroed.

Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Rebase and cleanup.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoBare-bones in-development test for nested VT-x
Andrew Cooper [Wed, 28 Jun 2017 12:17:41 +0000 (13:17 +0100)]
Bare-bones in-development test for nested VT-x

Based loosely on previous work from Haozhong Zhang, but rebased over
substantial upstream development work, altered to be more consistent with
existing tests, and extended to all HVM environments (rather than just hvm64)
to cover more test scenarios.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoTest basic driver initialisation in the selftests
Andrew Cooper [Wed, 28 Jun 2017 10:24:55 +0000 (11:24 +0100)]
Test basic driver initialisation in the selftests

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoXSA-221 PoC
Andrew Cooper [Tue, 30 May 2017 14:46:50 +0000 (15:46 +0100)]
XSA-221 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoIntroduce some basic APIC infrastructure
Andrew Cooper [Thu, 1 Jun 2017 14:04:15 +0000 (14:04 +0000)]
Introduce some basic APIC infrastructure

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoFix fallthrough typo in XTF common/libc/vsnprintf.c
John Thomson [Sat, 24 Jun 2017 11:46:12 +0000 (21:46 +1000)]
Fix fallthrough typo in XTF common/libc/vsnprintf.c

fallthrough in one case is missing the r.
This fails to suppress -Wimplicit-fallthrough warning with GCC7

common/libc/vsnprintf.c:388:19: error: this statement may fall through [-Werror=implicit-fallthrough=]
             flags |= SIGNED;
                   ^
common/libc/vsnprintf.c:390:9: note: here
         case 'u': /* Unsigned decimal. */
         ^~~~
cc1: all warnings being treated as errors

Signed-off-by: John Thomson <git@johnthomson.fastmail.com.au>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoUse unsigned int in preference to unsigned
Andrew Cooper [Fri, 23 Jun 2017 15:28:16 +0000 (16:28 +0100)]
Use unsigned int in preference to unsigned

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoRearange user_desc structure union to reduce namespacing
Andrew Cooper [Mon, 5 Jun 2017 17:43:28 +0000 (18:43 +0100)]
Rearange user_desc structure union to reduce namespacing

This avoids having identically named fields in different named unions.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoImprovements to, and new TSS infrastructure
Andrew Cooper [Fri, 2 Jun 2017 12:33:58 +0000 (13:33 +0100)]
Improvements to, and new TSS infrastructure

 * Rename hw_tss to env_tss, to highlight that it is the TSS appropriate for
   the current environment
 * Rename hw_tss{32,64} to x86_tss{32,64} to highlight that it is a structure
   specified by x86
 * Replace reserved fields with empty bitfields
 * Remove erroneous link field from x86_tss64
 * Introduce dump_x86_tss{32,64}() to neatly format a TSS.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoSplit existing TSS infrastructure out into x86-tss.h
Andrew Cooper [Fri, 2 Jun 2017 12:13:09 +0000 (13:13 +0100)]
Split existing TSS infrastructure out into x86-tss.h

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoFix the declarations of __builtin_*() string functions
Andrew Cooper [Thu, 4 May 2017 11:29:46 +0000 (11:29 +0000)]
Fix the declarations of __builtin_*() string functions

The underlying function declaration needs to be ahead of the define which
alters the default to its __builtin_*() version

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoFix header files so they can be included in isolation
Andrew Cooper [Fri, 2 Jun 2017 18:25:02 +0000 (18:25 +0000)]
Fix header files so they can be included in isolation

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoCompile using -Winline to identify problematic functions
Andrew Cooper [Thu, 4 May 2017 15:29:35 +0000 (15:29 +0000)]
Compile using -Winline to identify problematic functions

A static inline function which can't be inlined for whatever reason ends up
being duplicated in all translation units in which it is used.

-Winline identifies why functions weren't inlined; snprintf() for example,
because it is varadic.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoRemove an unnecessary level of directory hierachy
Andrew Cooper [Wed, 31 May 2017 13:40:22 +0000 (13:40 +0000)]
Remove an unnecessary level of directory hierachy

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agodocs: Tweaks to the generated HTML
Andrew Cooper [Fri, 2 Jun 2017 14:59:31 +0000 (14:59 +0000)]
docs: Tweaks to the generated HTML

 * Default to a fully expanded index
 * Hide graphs by default

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoExperimental support for LTO builds, by passing lto=y to make
Andrew Cooper [Fri, 21 Oct 2016 18:16:09 +0000 (19:16 +0100)]
Experimental support for LTO builds, by passing lto=y to make

This works with Clang 4.0.  It is broken with Clang 3.8, as the LTO build
ignore -mno-sse and "optimises" SSE instructions back into the binary.
Unknown with any other compilers.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoFix build with GCC 7
Andrew Cooper [Wed, 31 May 2017 14:21:59 +0000 (15:21 +0100)]
Fix build with GCC 7

c/s e399b894f0 tried to make the function parameter to _ASM_EXTABLE_HANDLER()
visible to the compiler, for the benefit of LTO builds.  Unfortunately, GCC 7
doesn't like the chosen method, citing:

    error: asm operand 4 probably doesn’t match constraints [-Werror]

Instead, revert back to using the function by name, and make it visible to the
compiler by using the "X" constraint.

While making these changes, add a missing reference to
fpu-exception-emulation's probe_avx() and xsa-212's test_main().

Reported-by: Sergey Dyasli <sergey.dyasli@citrix.com>
Reported-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Tested-by: Wei Liu <wei.liu2@citrix.com>
7 years agodocs: Prevent Doxygen from interpreting __page_aligned_{bss,data} as a name
Andrew Cooper [Tue, 30 May 2017 10:47:48 +0000 (11:47 +0100)]
docs: Prevent Doxygen from interpreting __page_aligned_{bss,data} as a name

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agorunner: Introduce a --quiet command line option
Andrew Cooper [Fri, 26 May 2017 15:24:40 +0000 (15:24 +0000)]
runner: Introduce a --quiet command line option

Particularly useful when running lots of tests, in the expectation that they
will all pass, where the full console logging isn't wanted.

One necessary adjustment is to switch run_test_console()'s `xl create` from
using subprocess.call() to Popen(), so stderr can be captured and ignored if
quiet, but printed back unconditionally if there is a problem.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agorunner: Distinguish clean and unclean exits
Andrew Cooper [Thu, 6 Apr 2017 13:22:00 +0000 (14:22 +0100)]
runner: Distinguish clean and unclean exits

Defaulting to ERROR turns out to be unhelpful, as it merges clean and unclean
exits of the test.  Switch instead to using a new CRASH result which more
accurately describes the typical reason for an unclean exit.

Factor out the logic to interpret the guests final log line into a helper,
rather than duplicating in both run_test_*() functions.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoCorrect linear/virtual address terminology
Andrew Cooper [Fri, 26 May 2017 16:29:11 +0000 (16:29 +0000)]
Correct linear/virtual address terminology

As XTF uses a flat segmentation model, virtual address == linear address.
However, the terminology should be kept correct.

As a rule of thumb, a C pointer is a virtual address, while `unsigned long va`
is actually a linear address.  All pagetables are indexed in terms of linear
addresses, including the (misnamed) update_va_mapping() hypercall.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoMap the domains shared_info at boot
Andrew Cooper [Sun, 1 May 2016 13:47:11 +0000 (14:47 +0100)]
Map the domains shared_info at boot

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoImport the Xen ABI for shared_info
Andrew Cooper [Sun, 1 May 2016 13:47:11 +0000 (14:47 +0100)]
Import the Xen ABI for shared_info

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoMove head_{pv,hvm}.s to {pv,hvm}/head.S
Andrew Cooper [Thu, 16 Feb 2017 13:58:34 +0000 (13:58 +0000)]
Move head_{pv,hvm}.s to {pv,hvm}/head.S

They can also be built with the normal rules, rather than using special logic.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoGenerate $(env)_{arch,guest} mappings automatically
Andrew Cooper [Thu, 16 Feb 2017 14:23:55 +0000 (14:23 +0000)]
Generate $(env)_{arch,guest} mappings automatically

Rather than opencoding them.  Drop the defcfg-$(env) mapping entirely and
reimplement its user in terms of $(env)_guest.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoSeparate page aligned data/bss into separate sections
Andrew Cooper [Tue, 18 Oct 2016 13:08:00 +0000 (13:08 +0000)]
Separate page aligned data/bss into separate sections

This alone drops the size of HVM tests by 8k.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoExtend %p vsprintf() handling to include hex buffers
Andrew Cooper [Fri, 19 May 2017 15:10:13 +0000 (15:10 +0000)]
Extend %p vsprintf() handling to include hex buffers

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoConvert cpu_regs_{sp,ss}() to being static inlines
Andrew Cooper [Wed, 17 May 2017 16:45:08 +0000 (17:45 +0100)]
Convert cpu_regs_{sp,ss}() to being static inlines

The 64bit case decomposes to a straight reads.  The 32bit case is likely less
overhead for the caller when inlined, but the compiler can always chose to
out-of-line the functions if it wants.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoIntroduce xtf_exit()
Andrew Cooper [Wed, 17 May 2017 13:41:28 +0000 (14:41 +0100)]
Introduce xtf_exit()

This is more convenient for tests which want to terminate cleanly from the
middle of their logic, rather than needing to arrange for execution to return
from test_main().

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agodocs: Fix the See Also cross-reference for livepatch-priv-check
Andrew Cooper [Thu, 18 May 2017 17:06:43 +0000 (18:06 +0100)]
docs: Fix the See Also cross-reference for livepatch-priv-check

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoIntroduce an 'in-development' category for tests which don't want automating yet
Andrew Cooper [Thu, 11 May 2017 15:54:44 +0000 (16:54 +0100)]
Introduce an 'in-development' category for tests which don't want automating yet

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoxtf/vpmu: Add Intel PMU MSR addresses
Mohit Gambhir [Thu, 4 May 2017 21:32:59 +0000 (17:32 -0400)]
xtf/vpmu: Add Intel PMU MSR addresses

This patch adds Intel PMU MSR addresses as macros for VPMU testing

Signed-off-by: Mohit Gambhir <mohit.gambhir@oracle.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoXSA-213 PoC
Andrew Cooper [Wed, 5 Apr 2017 18:04:56 +0000 (19:04 +0100)]
XSA-213 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
7 years agoXSA-212 PoC
Andrew Cooper [Fri, 17 Mar 2017 13:28:14 +0000 (13:28 +0000)]
XSA-212 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoIntroduce _u() to compliement _p()
Andrew Cooper [Thu, 16 Jun 2016 10:28:07 +0000 (11:28 +0100)]
Introduce _u() to compliement _p()

This wraps (unsigned long) casts when pointers are needed to be handled as
integers.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agocpuid: Collect and expose max_{,extd_}leaf with other cpuid information
Andrew Cooper [Tue, 25 Apr 2017 17:33:25 +0000 (18:33 +0100)]
cpuid: Collect and expose max_{,extd_}leaf with other cpuid information

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agomake-new-test: Add a placeholder to docs/all-tests.dox
Andrew Cooper [Tue, 25 Apr 2017 16:40:34 +0000 (17:40 +0100)]
make-new-test: Add a placeholder to docs/all-tests.dox

This should help to avoid it being forgotten.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoHYPERCALL_callback infrastructure for PV guests
Andrew Cooper [Thu, 13 Apr 2017 16:40:26 +0000 (17:40 +0100)]
HYPERCALL_callback infrastructure for PV guests

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoLBR/TSX VMentry failure test
Andrew Cooper [Wed, 12 Oct 2016 17:23:42 +0000 (18:23 +0100)]
LBR/TSX VMentry failure test

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoPass _ASM_EXTABLE_HANDLER() references by asm() parameter
Andrew Cooper [Tue, 11 Apr 2017 10:38:50 +0000 (11:38 +0100)]
Pass _ASM_EXTABLE_HANDLER() references by asm() parameter

... rather than embedding a reference directly.  This makes LTO aware of the
reference (rather than finding no C-level references, dropping the functions
and subsequently failing to link), and allows local fault handlers to be
static.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoReorganise the extable helpers to export their declarations
Andrew Cooper [Tue, 11 Apr 2017 10:37:32 +0000 (11:37 +0100)]
Reorganise the extable helpers to export their declarations

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agodocs: Fix Getting Started instructions
Andrew Cooper [Mon, 10 Apr 2017 16:03:39 +0000 (17:03 +0100)]
docs: Fix Getting Started instructions

This correction was accidentally omitted from c/s 4945bd69498e72

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoproperly parenthesize BUILD_BUG_ON()'s parameter use
Jan Beulich [Thu, 6 Apr 2017 14:26:16 +0000 (15:26 +0100)]
properly parenthesize BUILD_BUG_ON()'s parameter use

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoXSA-204 PoC
Andrew Cooper [Sun, 18 Dec 2016 13:54:13 +0000 (13:54 +0000)]
XSA-204 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoRevert "Drop test_wants_user_mappings infrastructure" and "Switch tests over to using...
Andrew Cooper [Mon, 6 Mar 2017 18:54:23 +0000 (18:54 +0000)]
Revert "Drop test_wants_user_mappings infrastructure" and "Switch tests over to using .text.user"

It turns out not to be safe without fixes to Xen's pagetable walk.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoDrop test_wants_user_mappings infrastructure
Andrew Cooper [Mon, 6 Mar 2017 11:58:05 +0000 (11:58 +0000)]
Drop test_wants_user_mappings infrastructure

As noted in Errata, the test_wants_user_mappings infrastructure has problems
for pv32pae environments on Xen 4.6 and earlier, if Xen leaks SMEP/SMAP
settings into the guest.

Now that all tests have moved to the new .text.user infrastructure, drop
test_wants_user_mappings.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoSwitch tests over to using .text.user
Andrew Cooper [Mon, 6 Mar 2017 11:41:10 +0000 (11:41 +0000)]
Switch tests over to using .text.user

... in preference to test_wants_user_mappings.  This involves duplicating the
stubs which need to be executed in user context, and moving them into
.text.user.

As a result, the tests become SMEP/SMAP-safe, even in cases were such settings
are leaked from Xen.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoFix x{get,set}bv() build with Clang 3.9
Andrew Cooper [Mon, 6 Mar 2017 13:31:42 +0000 (13:31 +0000)]
Fix x{get,set}bv() build with Clang 3.9

In 32bit builds, Clang objects to using uint64_t's with 32bit asm operands.

  In file included from /local/xen-test-framework.git/arch/x86/pv/traps.c:7:
  /local/xen-test-framework.git/arch/x86/include/arch/lib.h:404:52: error:
  invalid output size for constraint '=d'
      asm volatile ("xgetbv" : "=a" (feat_lo), "=d" (feat_hi)
                                                     ^

  /local/xen-test-framework.git/arch/x86/include/arch/lib.h:412:59: error:
  invalid input size for constraint 'd'
      asm volatile ("xsetbv" :: "a" ((uint32_t)value), "d" (value >> 32),
                                                            ^

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoAlter selftest to test the SMEP/SMAP safety of exec_user()
Andrew Cooper [Thu, 2 Mar 2017 18:01:00 +0000 (18:01 +0000)]
Alter selftest to test the SMEP/SMAP safety of exec_user()

Drop the test_wants_user_mappings setting and place test_exec_user_cpl3() in
.text.user.  Enable CR4.{SMEP,SMAP} whenever available.

While adding __section(s) to compiler.h, take the opportunity to clean it up.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoMake exec_user_param() safe with SMEP and SMAP active
Andrew Cooper [Thu, 2 Mar 2017 18:20:31 +0000 (18:20 +0000)]
Make exec_user_param() safe with SMEP and SMAP active

To make this safe, the iret must move straight from supervisor code/stack to
user code/stack.  Therefore, the stack cannot be shared any more.

The existing user_stack[] can be used as the separate stack.  This make the
exec_user_param() infrastructure no longer reentrant, but this isn't expected
to be a problem for tests.

A new .text.user section is introduced, which is automatically mapped as user
during setup.

The behaviour of exec_user_param() and X86_VEC_RET2KERN are altered to match.
exec_user_param() stores the supervisor stack in %rbp across the user
execution, and fakes up a return address as if it had simply called the user
code.  X86_VEC_RET2KERN restores the stack from %rbp and follows the fake
return address to reenter exec_user_param()'s context.

Invocation of the user function call moves into exec_user_stub() which is
located inside .text.user.  The 32bit version must pass all parameters in
registers, rather than on the stack.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoProvide a common user_stack[] for tests
Andrew Cooper [Thu, 2 Mar 2017 16:04:49 +0000 (16:04 +0000)]
Provide a common user_stack[] for tests

Automatically remap this frame as _PAGE_USER.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoImplement exec_user() in C rather than asm
Andrew Cooper [Fri, 3 Mar 2017 16:23:18 +0000 (16:23 +0000)]
Implement exec_user() in C rather than asm

It is trivial to implement as a static inline wrapper around
exec_user_param(), and avoids unnecessary stack manipulation in 32bit builds.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoUse zeroes for filling holes in .text
Andrew Cooper [Thu, 2 Mar 2017 16:03:04 +0000 (16:03 +0000)]
Use zeroes for filling holes in .text

In paged environments, this is more likely to cause a fault than using nops,
and the resulting disassembly is shorter.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoIntroduce _ASM_{{A,C,D,B}X,{B,S}P,{S,D}I} to aid common asm code
Andrew Cooper [Fri, 3 Mar 2017 14:35:49 +0000 (14:35 +0000)]
Introduce _ASM_{{A,C,D,B}X,{B,S}P,{S,D}I} to aid common asm code

This removes the need to #ifdef around code requiring a word-sized register.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoMove arch-specific headers to arch/$arch/include/
Andrew Cooper [Fri, 3 Mar 2017 16:50:05 +0000 (16:50 +0000)]
Move arch-specific headers to arch/$arch/include/

This avoids having common code/headers referring to an arch-specific header by
its arch-specific name.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agox86: add UMIP feature bit
Wei Liu [Thu, 2 Mar 2017 08:42:31 +0000 (08:42 +0000)]
x86: add UMIP feature bit

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoDocs: Add a build note about glibc-devel.i686 on RHEL-based distros
Andrew Cooper [Wed, 1 Mar 2017 11:58:54 +0000 (11:58 +0000)]
Docs: Add a build note about glibc-devel.i686 on RHEL-based distros

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoDeclare environment_description as an array
Andrew Cooper [Tue, 21 Feb 2017 15:03:53 +0000 (15:03 +0000)]
Declare environment_description as an array

There is no point following a pointer into the string section when a direct
reference will do.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoXSA-203 PoC
Andrew Cooper [Fri, 9 Dec 2016 16:20:04 +0000 (16:20 +0000)]
XSA-203 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoalso test AVX exceptions
Jan Beulich [Wed, 15 Feb 2017 16:21:34 +0000 (16:21 +0000)]
also test AVX exceptions

... as they're different from SSE and FPU ones.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Update documentation in line with the changes.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agobuild: disable PIE during linking if necessary
Wei Liu [Wed, 1 Feb 2017 16:21:14 +0000 (16:21 +0000)]
build: disable PIE during linking if necessary

Starting from ee3e265688, $(CC) is used for linking. That means all
default $(CC) flags coming from distro takes effect.

On Debian Stretch, gcc contains -pie by default, which makes the final
object fail to link. We need to explicitly disable PIE when linking.
Since not all versions of gcc support -no-pie, test its availability
before adding.

Example error message:

/usr/bin/ld: /local/work/xtf.git/arch/x86/boot/head_pv64.o: relocation R_X86_64_32S against symbol `start_info' can not be used when making a shared object;
recompile with -fPIC
/usr/bin/ld: /local/work/xtf.git/arch/x86/entry_64-pv64.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with
-fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoImprove documentation and error handling around FEP
Andrew Cooper [Mon, 30 Jan 2017 13:54:33 +0000 (13:54 +0000)]
Improve documentation and error handling around FEP

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoCollect max{phys,virt}addr along with other CPUID information
Andrew Cooper [Mon, 30 Jan 2017 11:20:56 +0000 (11:20 +0000)]
Collect max{phys,virt}addr along with other CPUID information

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agodon't overrun memory object
Jan Beulich [Mon, 23 Jan 2017 10:45:49 +0000 (10:45 +0000)]
don't overrun memory object

Using MOVUPS on an 8-byte quantity is wrong. There's no need for memory
accesses in any of the probe_*() functions anyway - switch them all to
insns without any operands or with register ones.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Switch PXOR for MOVQ in the MMX case to avoid regression on older hypervisors
which lack an emulation of PXOR.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoBuild: Use $(CC) for linking
Andrew Cooper [Fri, 21 Oct 2016 17:53:29 +0000 (18:53 +0100)]
Build: Use $(CC) for linking

This is a prerequisite for using LTO.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoBuild: Disable implicit make variables
Andrew Cooper [Tue, 13 Dec 2016 15:15:16 +0000 (15:15 +0000)]
Build: Disable implicit make variables

Perform immediate expansion variables

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoXSA-200 PoC
Andrew Cooper [Fri, 9 Dec 2016 15:16:31 +0000 (15:16 +0000)]
XSA-200 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoDocs: Fix the generated advisory links
Andrew Cooper [Mon, 19 Dec 2016 17:47:17 +0000 (17:47 +0000)]
Docs: Fix the generated advisory links

The ./make-new-test.sh script was failing to write the correct URL.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoImplement exec_user_param()
Andrew Cooper [Tue, 23 Aug 2016 14:55:22 +0000 (15:55 +0100)]
Implement exec_user_param()

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoDocument the interaction of x32 ABI support and hvm64 tests
Andrew Cooper [Wed, 14 Dec 2016 13:41:15 +0000 (13:41 +0000)]
Document the interaction of x32 ABI support and hvm64 tests

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agodon't require x32 support in binutils
Jan Beulich [Wed, 14 Dec 2016 13:31:25 +0000 (13:31 +0000)]
don't require x32 support in binutils

Older binutils don't have this at all, and newer may not have it
configured in.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
8 years agoXSA-196 PoC
Andrew Cooper [Thu, 27 Oct 2016 10:33:32 +0000 (11:33 +0100)]
XSA-196 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoXSA-195 PoC
Andrew Cooper [Wed, 2 Nov 2016 18:44:43 +0000 (18:44 +0000)]
XSA-195 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoXSA-194 PoC
Andrew Cooper [Tue, 15 Nov 2016 17:40:45 +0000 (17:40 +0000)]
XSA-194 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
8 years agoXSA-193 PoC
Andrew Cooper [Tue, 25 Oct 2016 11:00:45 +0000 (12:00 +0100)]
XSA-193 PoC

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>