summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKurt Bodiker <kurt.bodiker@braintrust-us.com>2018-05-01 10:05:34 -0400
committerBruce Ashfield <bruce.ashfield@windriver.com>2018-05-01 23:17:29 -0400
commitfda48193e60b22471dd962682faab33e4e721d72 (patch)
tree5e249a70af3de90ec54dec4e8c51d68bee71435e
parent230198a7d1f9d3cc7df986b4fbc4ab1cc4211640 (diff)
downloadmeta-virtualization-fda48193e60b22471dd962682faab33e4e721d72.tar.gz
xen: vTPM and vTPM Manager stubdoms
The vTPM stubdomain allows a virtual TPM to be created and used to provide TPM functionality to Xen guest domains. The vTPM Manager stubdomain seals the secrets of each vTPM to the physical TPM, thereby extending the chain of trust to the virtual machines in Xen. More information on Xen vTPMs found at https://xenbits.xen.org/docs/unstable/man/xen-vtpm.7.html This xen-vtpm recipe uses Xen/stubdom source tree to build the Xen vTPM and vTPM Manager binaries and MiniOS source tree to build the Xen vTPM and vTPM Manager stubdomains. This recipe provides the ability to modify how the vTPM stubdomains are created and the ability to independently patch the vTPM stubdomain source code as necessary. Signed-off-by: Kurt Bodiker <kurt.bodiker@braintrust-us.com> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
-rw-r--r--recipes-extended/xen/xen-vtpm.inc111
-rw-r--r--recipes-extended/xen/xen-vtpm_4.9.0.bb21
2 files changed, 132 insertions, 0 deletions
diff --git a/recipes-extended/xen/xen-vtpm.inc b/recipes-extended/xen/xen-vtpm.inc
new file mode 100644
index 00000000..a94c7503
--- /dev/null
+++ b/recipes-extended/xen/xen-vtpm.inc
@@ -0,0 +1,111 @@
1# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com>
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4require stubdom.inc
5
6DEPENDS = "\
7 newlib \
8 lwip \
9 mini-os \
10 polarssl \
11 stubdom-gmp \
12 tpm-emulator \
13"
14# These were unset by stubdom.inc to allow us to scope them per recipe
15export CC="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT}"
16export CCLD="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT}"
17export CXX="${HOST_PREFIX}g++ --sysroot=${RECIPE_SYSROOT}"
18export CPP="${HOST_PREFIX}gcc -E --sysroot=${RECIPE_SYSROOT}"
19export LD="${HOST_PREFIX}ld --sysroot=${RECIPE_SYSROOT}"
20export LD_LTO="${HOST_PREFIX}ld --sysroot=${RECIPE_SYSROOT}"
21export AS="${HOST_PREFIX}as"
22export AR="${HOST_PREFIX}ar"
23export NM="${HOST_PREFIX}nm"
24export RANLIB="${HOST_PREFIX}ranlib"
25export OBJDUMP="${HOST_PREFIX}objdump"
26export OBJCOPY="${HOST_PREFIX}objcopy"
27export STRIP="${HOST_PREFIX}strip"
28export STRINGS="${HOST_PREFIX}strings"
29export READELF="${HOST_PREFIX}readelf"
30
31
32# Required for some of the config stuff
33export STUBDOM_TARGETS="vtpm vtpmmgr"
34
35VTPM_CPPFLAGS = "\
36 -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator/build \
37 -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator/crypto \
38 -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator/tpm \
39 -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator \
40"
41
42# The includes from this Xen directory are not in the MiniOS repo, although they probably should be.
43STUBDOM_CPPFLAGS += "-isystem ${B}/include/"
44
45do_configure() {
46
47 # GCC 7 fails linking header defined inlines if not declared 'static' or 'extern'
48 # This appears to be fixed in Xen 4.10.0+, so let's look at version of Xen source
49 # to determine if we need to modify inline declarations.
50 #
51 # 'echo -e' to enable interpretation of backslashes
52 # 'sort -V' to natural sort version numbers
53 # 'head -n1' to capture the first line of output from sort command
54
55 if [ "${PV}" = "$(echo "${PV};4.9.999" | sed 's/;/\n/' | sort -V | head -n1)" ]; then
56 sed -i "s/^inline/static inline/g" ${B}/vtpmmgr/*.h
57 fi
58
59 for i in AR AS NM RANLIB OBJDUMP OBJCOPY STRIP STRINGS READELF CXX LD LD_LTO CC CPP; do
60 sed -i "s/^\($i\s\s*\).*=/\1?=/" ${MINIOS_SRCDIR}/Config.mk
61 done
62
63 # replicate the TARGETS_MINIOS target in xen/stubdom/Makefile
64 for i in ${STUBDOM_TARGETS}; do
65 [ -d ${B}/mini-os-${XEN_TARGET_ARCH}-$i ] ||
66 for j in $(cd ${MINIOS_SRCDIR} ; find . -type d) ; do \
67 mkdir -p ${B}/mini-os-${XEN_TARGET_ARCH}-$i/$j; \
68 done
69 done
70}
71
72do_compile() {
73 ${MAKE} MINIOS_CONFIG="${B}/vtpm/minios.cfg" CONFIG_FILE="${B}/vtpm-minios-config.mk" DESTDIR= -C ${MINIOS_SRCDIR} config
74 CPPFLAGS="`cat ${B}/vtpm-minios-config.mk` ${STUBDOM_CPPFLAGS} ${VTPM_CPPFLAGS}" CFLAGS="${STUBDOM_CFLAGS}" ${MAKE} -C ${B}/vtpm
75 DEF_CPPFLAGS="${STUBDOM_CPPFLAGS}" \
76 DEF_CFLAGS="${STUBDOM_CFLAGS}" \
77 DEF_LDFLAGS="${STUBDOM_LDFLAGS}" \
78 MINIOS_CONFIG="${B}/vtpm/minios.cfg" \
79 ${MAKE} -C ${MINIOS_SRCDIR} \
80 OBJ_DIR=${B}/mini-os-${XEN_TARGET_ARCH}-vtpm \
81 APP_OBJS="${B}/vtpm/vtpm.a" \
82 APP_LDLIBS="-ltpm -ltpm_crypto -lgmp -lpolarssl"
83
84 ${MAKE} MINIOS_CONFIG="${B}/vtpmmgr/minios.cfg" CONFIG_FILE="${B}/vtpmmgr-minios-config.mk" DESTDIR= -C ${MINIOS_SRCDIR} config
85 CPPFLAGS="`cat ${B}/vtpmmgr-minios-config.mk` ${STUBDOM_CPPFLAGS}" CFLAGS="${STUBDOM_CFLAGS}" ${MAKE} -C ${B}/vtpmmgr
86 DEF_CPPFLAGS="${STUBDOM_CPPFLAGS}" \
87 DEF_CFLAGS="${STUBDOM_CFLAGS}" \
88 DEF_LDFLAGS="${STUBDOM_LDFLAGS}" \
89 MINIOS_CONFIG="${B}/vtpmmgr/minios.cfg" \
90 ${MAKE} -C ${MINIOS_SRCDIR} \
91 OBJ_DIR=${B}/mini-os-${XEN_TARGET_ARCH}-vtpmmgr \
92 APP_OBJS="${B}/vtpmmgr/vtpmmgr.a" \
93 APP_LDLIBS="-lm -lpolarssl"
94}
95
96PACKAGES = "\
97 ${PN}-vtpm-stubdom \
98 ${PN}-vtpmmgr-stubdom \
99"
100FILES_${PN}-vtpm-stubdom="\
101 ${libdir}/xen/boot/vtpm-stubdom.gz \
102"
103
104FILES_${PN}-vtpmmgr-stubdom="\
105 ${libdir}/xen/boot/vtpmmgr-stubdom.gz \
106"
107
108do_install() {
109 install -m 644 -D ${B}/mini-os-${XEN_TARGET_ARCH}-vtpm/mini-os.gz ${D}${libdir}/xen/boot/vtpm-stubdom.gz
110 install -m 644 -D ${B}/mini-os-${XEN_TARGET_ARCH}-vtpmmgr/mini-os.gz ${D}${libdir}/xen/boot/vtpmmgr-stubdom.gz
111}
diff --git a/recipes-extended/xen/xen-vtpm_4.9.0.bb b/recipes-extended/xen/xen-vtpm_4.9.0.bb
new file mode 100644
index 00000000..c58a02d8
--- /dev/null
+++ b/recipes-extended/xen/xen-vtpm_4.9.0.bb
@@ -0,0 +1,21 @@
1# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com>
2# Released under the MIT license (see COPYING.MIT for the terms)
3
4DESCRIPTION = "MiniOS-based vTPMs for Xen"
5HOMEPAGE = "https://www.xenproject.org"
6LICENSE = "GPLv2 & BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://COPYING;md5=b1ceb1b03a49b202ee6f41ffd1ed0155 \
8 file://vtpm/COPYING;md5=75a98062ab0322ded060d9026a1bda61 \
9"
10
11# git commit hash for Xen's RELEASE-4.9.0 tag
12SRCREV_xen = "c30bf55594a53fae8aae08aabf16fc192faad7da"
13SRC_URI = "\
14 git://xenbits.xen.org/xen.git;protocol=git;nobranch=1;name=xen;subpath=stubdom \
15 git://xenbits.xen.org/xen.git;protocol=git;nobranch=1;name=xen;destsuffix=stubdom/include;subpath=tools/xenstore/include \
16"
17
18S="${WORKDIR}/stubdom"
19B="${S}"
20
21require xen-vtpm.inc