initial buildability of full libwolfssl.ko loadable kernel module for Linux via ./configure --enable-linuxkm && make.

This commit is contained in:
Daniel Pouzzner
2020-08-18 14:17:44 -05:00
parent 0e480d1a14
commit 1aa15632ce
10 changed files with 140 additions and 71 deletions

29
linuxkm/Kbuild Normal file
View File

@@ -0,0 +1,29 @@
# libwolfssl Kbuild
# wolfcrypto asm provokes many objtool complaints:
# "call without frame pointer save/setup",
# "BP used as a scratch register",
# "indirect jump found in RETPOLINE build",
# and "is missing an ELF size annotation"
# see /usr/src/linux/tools/objtool/Documentation/stack-validation.txt
OBJECT_FILES_NON_STANDARD := y
obj-m := libwolfssl.o
ifeq "$(WOLFSSL_OBJ_FILES)" ""
$(error $$WOLFSSL_OBJ_FILES is unset.)
endif
ifeq "$(WOLFSSL_CFLAGS)" ""
$(error $$WOLFSSL_CFLAGS is unset.)
endif
ifeq "$(WOLFSSL_ASFLAGS)" ""
$(error $$WOLFSSL_ASFLAGS is unset.)
endif
libwolfssl-y := $(WOLFSSL_OBJ_FILES)
ccflags-y := $(WOLFSSL_CFLAGS)
asflags-y := $(WOLFSSL_ASFLAGS)

38
linuxkm/Makefile Normal file
View File

@@ -0,0 +1,38 @@
all: libwolfssl.ko
.PHONY: libwolfssl.ko
ifndef MODULE_TOP
MODULE_TOP=$(CURDIR)
endif
ifndef SRC_TOP
SRC_TOP=$(shell dirname $(MODULE_TOP))
endif
ifeq "$(KROOT)" ""
$(error $$KROOT is unset.)
endif
ifeq "$(AM_CFLAGS)$(CFLAGS)" ""
$(error $$AM_CFLAGS and $$CFLAGS are both unset.)
endif
ifeq "$(AM_CCASFLAGS)$(CCASFLAGS)" ""
$(error $$AM_CCASFLAGS and $$CCASFLAGS are both unset.)
endif
ifeq "$(src_libwolfssl_la_OBJECTS)" ""
$(error $$src_libwolfssl_la_OBJECTS is unset.)
endif
WOLFSSL_CFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CFLAGS) $(CFLAGS) -Wframe-larger-than=262144
WOLFSSL_ASFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CCASFLAGS) $(CCASFLAGS)
WOLFSSL_OBJ_FILES=linuxkm/module_hooks.o $(patsubst %.lo, %.o, $(patsubst src/libwolfssl_la-%, src/%, $(patsubst wolfcrypt/src/src_libwolfssl_la-%, wolfcrypt/src/%, $(src_libwolfssl_la_OBJECTS))))
export WOLFSSL_CFLAGS WOLFSSL_ASFLAGS WOLFSSL_OBJ_FILES
libwolfssl.ko:
@mkdir -p linuxkm src wolfcrypt/src
@if [[ ! -h $(SRC_TOP)/Kbuild ]]; then ln -s $(MODULE_TOP)/Kbuild $(SRC_TOP)/Kbuild; fi
make -C $(KROOT) M=$(MODULE_TOP) src=$(SRC_TOP)

View File

@@ -1,5 +0,0 @@
EXTRA_PROGRAMS = automake_dummy
automake_dummy_SOURCES = wolfssl_linuxkm.c
module_DATA = wolfssl_linuxkm.o
#include ../Makefile.common
include Makefile.common

View File

@@ -1,20 +0,0 @@
# Makefile.common
moduledir = @moduledir@
KERNEL_LOCATION=@kerneldir@
KBUILD_VERBOSE = 1
MOD_DEVDIR = $(PWD)
export module_DATA
$(module_DATA): $(automake_dummy_SOURCES)
echo "not building kernel module yet"
# mv Makefile Makefile.automake
# cp $(srcdir)/../Makefile.kernel Makefile
# CPPFLAGS="" CFLAGS="" LDFLAGS="" \
# $(MAKE) -C $(KROOT) \
# ARCH="$KARCH" CC="gcc" M=$(PWD) modules\
# KBUILD_VERBOSE=$(KBUILD_VERBOSE)
# mv Makefile.automake Makefile
CLEANFILES = $(module_DATA) .$(module_DATA).flags $(module_DATA:.o=.mod.c) $(module_DATA:.o=.@kernelext@) *~

43
linuxkm/module_hooks.c Normal file
View File

@@ -0,0 +1,43 @@
/* http://h-wrt.com/en/mini-how-to/autotoolsSimpleModule */
/* src/module_hello.c */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/wolfcrypt/error-crypt.h>
#include <wolfssl/ssl.h>
static int __init wolfssl_init(void)
{
int ret = wolfSSL_Init();
if (ret != WOLFSSL_SUCCESS) {
pr_err("wolfSSL_Init() failed: %s", wc_GetErrorString(ret));
return -ENOTRECOVERABLE;
}
pr_info("wolfSSL " LIBWOLFSSL_VERSION_STRING " loaded. See https://www.wolfssl.com/ for information.\n");
pr_info("Copyright (C) 2006-2020 wolfSSL Inc. All Rights Reserved.\n");
return 0;
}
module_init(wolfssl_init);
static void __exit wolfssl_exit(void)
{
int ret = wolfSSL_Cleanup();
if (ret != WOLFSSL_SUCCESS)
pr_err("wolfSSL_Cleanup() failed: %s", wc_GetErrorString(ret));
return;
}
module_exit(wolfssl_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("https://www.wolfssl.com/");
MODULE_DESCRIPTION("libwolfssl cryptographic and protocol facilities");
MODULE_VERSION(LIBWOLFSSL_VERSION_STRING);

View File

@@ -1,28 +0,0 @@
/* http://h-wrt.com/en/mini-how-to/autotoolsSimpleModule */
/* src/module_hello.c */
#include <linux/init.h>
#include <linux/module.h>
static int __init
hello_init(void)
{
printk("Hello, world!\n");
return 0;
}
module_init(hello_init);
static void __exit
hello_exit(void)
{
printk("Goodbye, world!\n");
}
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("noname ");
MODULE_DESCRIPTION("\"Hello, world!\" test module");
MODULE_VERSION("printk");