aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri John Ledkov <dimitri.j.ledkov@intel.com>2015-09-11 15:40:00 +0100
committerWill Deacon <will.deacon@arm.com>2015-09-15 18:18:58 +0100
commitcdce942c1a3a04635065a7972ca4e21386664756 (patch)
tree13341bca16a21ef8fc610bcc5de6951ff72af78e
parent0837fbe24248af000b9aa2e3101eed52188e54a5 (diff)
downloadkvmtool-cdce942c1a3a04635065a7972ca4e21386664756.tar.gz
Make static libc and guest-init functionality optional.
If one typically only boots full disk-images, one wouldn't necessaraly want to statically link glibc, for the guest-init feature of the kvmtool. As statically linked glibc triggers haevy security maintainance. Signed-off-by: Dimitri John Ledkov <dimitri.j.ledkov@intel.com> [will: moved all the guest_init handling into builtin_setup.c] Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--Makefile12
-rw-r--r--builtin-run.c29
-rw-r--r--builtin-setup.c19
-rw-r--r--include/kvm/builtin-setup.h1
4 files changed, 23 insertions, 38 deletions
diff --git a/Makefile b/Makefile
index 7b17d529..f1701aa7 100644
--- a/Makefile
+++ b/Makefile
@@ -34,8 +34,6 @@ bindir_SQ = $(subst ','\'',$(bindir))
PROGRAM := lkvm
PROGRAM_ALIAS := vm
-GUEST_INIT := guest/init
-
OBJS += builtin-balloon.o
OBJS += builtin-debug.o
OBJS += builtin-help.o
@@ -279,8 +277,13 @@ ifeq ($(LTO),1)
endif
endif
-ifneq ($(call try-build,$(SOURCE_STATIC),,-static),y)
- $(error No static libc found. Please install glibc-static package.)
+ifeq ($(call try-build,$(SOURCE_STATIC),,-static),y)
+ CFLAGS += -DCONFIG_GUEST_INIT
+ GUEST_INIT := guest/init
+ GUEST_OBJS = guest/guest_init.o
+else
+ $(warning No static libc found. Skipping guest init)
+ NOTFOUND += static-libc
endif
ifeq (y,$(ARCH_WANT_LIBFDT))
@@ -356,7 +359,6 @@ c_flags = -Wp,-MD,$(depfile) $(CFLAGS)
# $(OTHEROBJS) are things that do not get substituted like this.
#
STATIC_OBJS = $(patsubst %.o,%.static.o,$(OBJS) $(OBJS_STATOPT))
-GUEST_OBJS = guest/guest_init.o
$(PROGRAM)-static: $(STATIC_OBJS) $(OTHEROBJS) $(GUEST_INIT)
$(E) " LINK " $@
diff --git a/builtin-run.c b/builtin-run.c
index 1ee75ad3..e0c87329 100644
--- a/builtin-run.c
+++ b/builtin-run.c
@@ -59,9 +59,6 @@ static int kvm_run_wrapper;
bool do_debug_print = false;
-extern char _binary_guest_init_start;
-extern char _binary_guest_init_size;
-
static const char * const run_usage[] = {
"lkvm run [<options>] [<kernel image>]",
NULL
@@ -345,30 +342,6 @@ void kvm_run_help(void)
usage_with_options(run_usage, options);
}
-static int kvm_setup_guest_init(struct kvm *kvm)
-{
- const char *rootfs = kvm->cfg.custom_rootfs_name;
- char tmp[PATH_MAX];
- size_t size;
- int fd, ret;
- char *data;
-
- /* Setup /virt/init */
- size = (size_t)&_binary_guest_init_size;
- data = (char *)&_binary_guest_init_start;
- snprintf(tmp, PATH_MAX, "%s%s/virt/init", kvm__get_dir(), rootfs);
- remove(tmp);
- fd = open(tmp, O_CREAT | O_WRONLY, 0755);
- if (fd < 0)
- die("Fail to setup %s", tmp);
- ret = xwrite(fd, data, size);
- if (ret < 0)
- die("Fail to setup %s", tmp);
- close(fd);
-
- return 0;
-}
-
static int kvm_run_set_sandbox(struct kvm *kvm)
{
const char *guestfs_name = kvm->cfg.custom_rootfs_name;
@@ -631,7 +604,7 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv)
if (!kvm->cfg.no_dhcp)
strcat(real_cmdline, " ip=dhcp");
- if (kvm_setup_guest_init(kvm))
+ if (kvm_setup_guest_init(kvm->cfg.custom_rootfs_name))
die("Failed to setup init for guest.");
}
} else if (!strstr(real_cmdline, "root=")) {
diff --git a/builtin-setup.c b/builtin-setup.c
index 8b45c564..40fef15d 100644
--- a/builtin-setup.c
+++ b/builtin-setup.c
@@ -16,9 +16,6 @@
#include <sys/mman.h>
#include <fcntl.h>
-extern char _binary_guest_init_start;
-extern char _binary_guest_init_size;
-
static const char *instance_name;
static const char * const setup_usage[] = {
@@ -124,7 +121,11 @@ static const char *guestfs_symlinks[] = {
"/etc/ld.so.conf",
};
-static int copy_init(const char *guestfs_name)
+#ifdef CONFIG_GUEST_INIT
+extern char _binary_guest_init_start;
+extern char _binary_guest_init_size;
+
+int kvm_setup_guest_init(const char *guestfs_name)
{
char path[PATH_MAX];
size_t size;
@@ -144,7 +145,15 @@ static int copy_init(const char *guestfs_name)
close(fd);
return 0;
+
+}
+#else
+int kvm_setup_guest_init(const char *guestfs_name)
+{
+ die("Guest init image not compiled in");
+ return 0;
}
+#endif
static int copy_passwd(const char *guestfs_name)
{
@@ -222,7 +231,7 @@ static int do_setup(const char *guestfs_name)
make_guestfs_symlink(guestfs_name, guestfs_symlinks[i]);
}
- ret = copy_init(guestfs_name);
+ ret = kvm_setup_guest_init(guestfs_name);
if (ret < 0)
return ret;
diff --git a/include/kvm/builtin-setup.h b/include/kvm/builtin-setup.h
index 4a8d7ee3..239bbbdc 100644
--- a/include/kvm/builtin-setup.h
+++ b/include/kvm/builtin-setup.h
@@ -7,5 +7,6 @@ int kvm_cmd_setup(int argc, const char **argv, const char *prefix);
void kvm_setup_help(void) NORETURN;
int kvm_setup_create_new(const char *guestfs_name);
void kvm_setup_resolv(const char *guestfs_name);
+int kvm_setup_guest_init(const char *guestfs_name);
#endif