mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-06-16 02:15:47 +00:00
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>
This commit is contained in:
committed by
Will Deacon
parent
0837fbe242
commit
cdce942c1a
@@ -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 " $@
|
||||
|
||||
+1
-28
@@ -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=")) {
|
||||
|
||||
+14
-5
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user