Emil Velikov [Tue, 3 Sep 2024 21:31:04 +0000 (22:31 +0100)]
testsuite/path: wrap 64 variants for _GLIBC_
Since musl v1.2.4 and Alpine 3.18, circa May 2023, the LFS64 variants
are no longer exported by libc.so.
In addition musl headers provide relevant "#define foo64 foo" macros,
when _LARGEFILE64_SOURCE is defined and symbol resolution is deferred to
the runtime linker. See musl commit 246f1c811448 ("remove LFS64 symbol
aliases; replace with dynamic linker remapping") more details.
Earlier versions of musl had the symbols exposed by libc, although the
^^ macros were also available when _GNU_SOURCE is set, as our build
does.
Most importantly, we do not explicitly use the 64 variants and musl
doesn't implicitly pull them either. So in practise building with musl,
the binaries do not have any 64 references, thus there is no need to
wrap them.
AFAICT there is no obvious way of detecting musl, apart from the lack of
of __GLIBC__, so pull features.h (which defines it) and check on that.
There is a small chance the __GLIBC__ check will miss-fire on other
implementations like bionic, dietlibc or ulibc(-ng). We don't run the
tests on those platforms (although we could) so it should be fine.
With that we can install tar (for make distcheck) and enable the tests
in CI \o/
Closes: https://github.com/kmod-project/kmod/issues/65 Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/97 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
The other KMOD_EXPORT'ed functions protect against ctx being NULL.
Add this to kmod_get_dirname purely for consistency reasons.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/102 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
During signature parser validation it is not enough to cast the end
result to 64 bit, because on 32 bit systems size_t is an unsigned 32 bit
integer, which implies that this will be the data type used to evaluate
the expression BEFORE casting it due to C standard.
Since the unsigned 32 bit calculation can overflow, cast the size_t
to int64_t, which makes the whole calculation safe.
This has no negative impact on 64 bit systems because the size_t
value is read as an unsigned 32 bit value from module.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/95 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
ci: add meson build permutation
Note that we cannot use conditionals within the run actions, because
coreutils (for [ and test) are not installed on Debian/Ubuntu. Even
after doing so, the script consistently fails.
For meson dist to work, we need a full git repo, git and safe
directories setup, otherwise it fails as below. Meson issue was
reported ~2 years ago and we're about to get a fix soon (tm).
Dist currently only works with Git or Mercurial repos
v2:
- split git/checkout to separate patch
- use build-dev.ini instead of meson.sh
v3:
- use matrix for setting 'test' variable
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
ci: install git and checkout using it
Atm the checkout action pulls the whole repo as tarball, since git is
missing. Since we install packages via local actions, we need to first
do an initial sparse checkout, install the packages (git including) and
do a proper second checkout.
At which point, the second checkout action claims to set safe.directory
(it's the default) although in practise we need to do it again. Perhaps
it's getting tripped by our initial sparse checkout?
Either way, explicitly set the option so that git just works.
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
ci: remove no longer set matrix.configure
... and it doesn't seem like we'll need it in the future.
Fixes: fdcb656 ("testsuite: remove cached modules and --disable-test-modules") Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
meson: add support for the testsuite
Currently the stale tracking of modules/rootfs is non-existent and I
cannot quite find a way to fix that.
In addition, there is a long standing meson bug where the tests and by
extension their dependencies are always build even when annotated as
`build_by_default : false`. To workaround that, a new option is
introduced `build-tests`, defaulting to false.
Apart from that, all tests run and pass \o/
v2:
- split from top-level meson.build to subdir one
- add to EXTRA_DIST
- scripts are in scripts/
- add option to enable building tests
- error out if building without tools
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
meson: add support for the tools
Nothing too spectacular, apart from a few meson quirks:
- one can use both_libraries() alas, "install: true" will also install
the static library, which we do not want
- need to workaround kmod.pc empty variables, introduced in 1.4.0
- wrapper script is needed for the symlink creation - see wrapper
script for details
- resulting binary exports optarg/optind/stderr/stdout and more
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
meson: introduce meson, covering libkmod.so
The meson build system has been getting popularity, but for us that
means coverage and sanitisers OOTB et al.
The current patch, handles only libkmod.so and libkmod.pc. The rest will
follow-up.
Notable changes comparing against the autoconf:
- more consistent dirnames
- omit printing bash completion dir and compiler flags from summary
- debug toggle is renamed to debug-messages
- a few [C,LD]FLAGS were omitted - they're provided by meson itself
- libkmod.pc has the more complete Requires.private over Libs.private
- use the symver for libkmod.so, omit the version-info magic
Note: The minimal meson version is 0.60.0 akin to systemd and mesa.
v2:
- use gnu11, list both LGPL and GPL licenses
- add meson files to EXTRA_DIST
- add temporary stdndupa workaround
- move kmod bash-completion to later patch
v3:
- switch to meson 0.60.0
- remove stdndupa workaround
Loosely based on the work by: Dave Reisner <dreisner@archlinux.org>
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
testsuite: split-out Kbuild from Makefile
The former is used by the kernel build system, while the latter is our
convenience wrapper. Split the two to indicate the distinction and make
things easier to parse.
Emil Velikov [Mon, 2 Sep 2024 17:58:35 +0000 (18:58 +0100)]
testsuite: temporary drop cross compilation test, remove binaries
The idea behind the test is that modinfo should work with foreign
modules - be that CPU architecture, endianess, bit width or otherwise.
On the other hand, having binary modules baked into the repo isn't great
since they can may be outdated wrt their in-tree source code, may
trigger warnings by various tools (the Debian linter flags them as
"source-not-available") and in general it's better if they're actually
generated via the in-tree Makefile.arch file.
Remove the binaries and temporarily drop the tests. We'll add proper
cross-compilation and re-enable them at a later stage.
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
shared: use memdup over stdndupa
The stdndupa has a couple of gotchas:
- allocates memory on stack via alloca(3)... where we pass it a
user-provided string in at least one instance
- it's a GNU extension missing on musl and bionic
The mkdir_p() function is not a hot path, so using heap allocation is
perfectly fine. Swap the stdndupa for our local helper memdup.
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
testsuite: use bash strict mode for setup-rootfs.sh
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: swap ABS_TOP_BUILDDIR for TOOLS_DIR
All the remaining instances are used to track the tools directory (aka
the local symlinks to kmod). Rename accordingly and include the tools
sub-directory.
Similar to the OVERRIDE_LIBDIR change earlier, this is build system
specific layout, which shouldn't be in the tests.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
testsuite/path: match the full rootpath
Our expectation is that the (full) rootpath is present, otherwise we
prepend it ourselves. Drop the ABS_TOP_BUILDDIR instance.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: set OVERRIDE_LIBDIR in the build system
The path is build-system specific, so set it there. Shortly we'll be
adding a meson build, where the value will be different.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: pass MODULE_DIRECTORY as arg to setup-rootfs.sh
... just like the other 5 args passed to the script.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: fixup testsuite LDFLAGS
Add the leading '-' for avoid-version, otherwise the module gets
versioned.
Drop the -export-dynamic, since the modules are built with
-fvisibility=hidden everything but the explicitly exported symbol is not
exported.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: alphabetically sort tests
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: alphabetically sort sources
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: remove linux/module.h check
We include the header for the UAPI MODULE_INIT_* constants, while we
also provide them locally.
At a glance, at least Arch and Alpine build kmod without the uapi
header, so just drop the check and ifndef guards all together.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
build: remove finit_module() check
For over 10 years, init_module(2) has been pretty clear - glibc does not
provide a wrapper for the function. AFAICT musl never provided one
either.
Remove the always failing check.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
missing.h: remove be32toh wrapper
As the inline comment says, it is applicable for older distributions
like RHEL 5. The extended support for RHEL 5 ended in 2020 (4 years ago)
so we're safe to drop this.
According to the Alpine build logs - the symbol has been present in musl
for years.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:21 +0000 (17:04 +0100)]
missing.h: warn on missing __NR_finit_module
Complain (somewhat) loudly if we don't have the syscall number, as the
default cannot work.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:20 +0000 (17:04 +0100)]
testsuite: set-but-unused variable KVER
As far as I can see, nothing ever used the variable - be that within
kmod itself, or the Kbuild itself.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:20 +0000 (17:04 +0100)]
testsuite: remove cached modules and --disable-test-modules
The option was added for distributions/maintainers lacking the linux
headers, while running the test-suite. It also aimed to resolve
licensing and "source-not-included" issues around the cached modules.
At a glance, it seems like only Debian is using the option these days,
Arch is using "any" linux headers available, while Fedora and Gentoo do
not run `make check` all together.
Debian's linter is complaining about "source-is-missing" and
"source-contains-prebuilt-binary", where the maintainer had to disable
those.
Removing the cache will make ^^ obsolete, while also simplifying the
check target. A nice side effect is making the (compressed) release
tarball 20% smaller.
Distributions are welcome to do something like Arch or not run the
target all together.
We are already running it in CI for Arch, Debian, Fedora and Ubuntu,
where more can be added as needed.
Cc: Marco d'Itri <md@linux.it> Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86
[ Fixup flag being passed in CI ] Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Thu, 22 Aug 2024 16:04:20 +0000 (17:04 +0100)]
build: remove --with-rootlibdir toggle
At a glance this option was introduced with distributions migrating from
/lib to /usr/lib.
Checking with Debian, Arch, Alpine, Fedora and Gentoo - only Debian and
Alpine set it. In the former - it's explicitly set to the default
(libdir), while the latter uses /lib and /usr/lib respectively.
Looking at the implementation itself, we don't adjust the libkmod.pc
which lists libdir, while libkmod.so is installed in rootlibdir.
Considering the negligible user base and somewhat broken state, drop the
option.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
The file modules.builtin.modinfo is supposed to consist of NUL
terminated strings. If the file contains a string which is not
properly NUL terminated, treat it as error.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/83 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Make sure that errors never end up with errno being 0. These code paths
negate the errno value to get a negative value to propagate the fact
that an error occurred. -0 would be 0 again so errors are not detected.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/83 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
If realloc fails, do not override the still valid pointer with NULL.
Otherwise freeing the iterator won't free the previously allocated
buffer.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/82 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
shared: use proper data types in freadline_wrapped
Do not use signed data types if unsigned arithmetic is expected,
i.e. use size_t if processing sizes and unsigned int for line numbers
due to given API of freadline_wrapped.
This fixes a possible signed integer overflow on 64 bit systems.
Signed-off-by: dependabot[bot] <support@github.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/80 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Calling free(NULL) is valid. No need for previous if-check.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/79 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
If a relative path is supplied, the conversion to an absolute path can
fail, e.g. if current working directory does not exist anymore.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/79 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Lucas De Marchi [Fri, 16 Aug 2024 19:01:22 +0000 (14:01 -0500)]
build: Set AM_DISTCHECK_CONFIGURE_FLAGS
Follow the usual approach for flags in autotools: Set the AM_ variant
so the user may set the non-AM variant that is appended. This is needed
to pass additional flags from the configure to the configure call done
while creating the dist tarball if something doesn't match the default.
Lucas De Marchi [Fri, 16 Aug 2024 13:41:11 +0000 (08:41 -0500)]
build: Add mod-weakdep.ko to cache
A long forgotten feature of the build system: we commit the built
modules from playground so distros can build without linux-headers
available.
Cc: Marco d'Itri <md@linux.it> Closes: https://lore.kernel.org/linux-modules/Zr3A96SfR21UjdL1@bongo.bofh.it Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/78
Emil Velikov [Fri, 16 Aug 2024 15:19:38 +0000 (16:19 +0100)]
ci: use hash-pinned workflow actions, update checkout
The tags are mutable and groups like Google Open Source Security Team
(GOSST) are suggesting use of hash-pinned (alongside the tag as comment)
actions.
The dependabot just introduced, can handle the format automatically.
Ref: https://github.com/libarchive/libarchive/issues/1959 Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/76 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Fri, 16 Aug 2024 13:48:35 +0000 (14:48 +0100)]
ci: add dependabot.yml
It's a scheduled action, which checks if any of the actions used are out
of date. If so, it will open a PR with a summary of the changes in the
new version.
Emil Velikov [Fri, 16 Aug 2024 13:39:57 +0000 (14:39 +0100)]
.editorconfig: add initial config file
Most editors support the config format out of the box and with some
upcoming new yml files, I think it's great to have something in-tree to
avoid miss-matched style.
Copy-pasted from Mesa, with minor changes - tab for indent (C), remove
irrelevant sections. Keep the meson section - meson patches will be
comings shortly.
Lucas De Marchi [Fri, 16 Aug 2024 04:17:11 +0000 (23:17 -0500)]
testsuite: Rename test-user
First version of the patches implementing weakdep called them "user
dep", hence the name of the test. That doesn't make sense anymore after
the rename. Rename the test accordingly.
An error during array_realloc is always ignored if the idea
was to save memory by trimming an array.
Move two occurrences of same code into a single function for
easier reviewing.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/68 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
- Make sure that SIZE_MAX boundaries are never crossed
- Clear pointer address in struct during array_free_array
- Do nothing if array_pop is called with empty array
Also added test case for pop behavior and extended tests with
more checks.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/68 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
The position in array_remove_at could be theoretically larger
than unsigned int. Switch to size_t to stay in sync with all
other such arguments in array context.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/68 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
If array operations fail, forward the error instead of silently
ignoring it and continuing the operation.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Link: https://github.com/kmod-project/kmod/pull/68 Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
The command line option P takes one argument, which is supposed to
contain exactly one character. The current check performs an out
of boundary read if an empty string is supplied.
If a root path is specified which is PATH_MAX - 1 characters long
and option -A is specified, then depfile_up_to_date_dir triggers
an out of boundary write during slash addition.
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Christian Hesse [Wed, 14 Aug 2024 07:58:16 +0000 (09:58 +0200)]
testsuite: fix path for test-user
... as this just does not find its paths.
Closes: https://github.com/kmod-project/kmod/issues/69 Fixes: 9d1fb31 ("libkmod, depmod, modprobe: Make directory for kernel modules configurable") Signed-off-by: Christian Hesse <mail@eworm.de> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
libkmod: avoid undefined behaviour in libkmod-builtin.c:get_string
Static analysis has reported a potential UB:
kmod-31/libkmod/libkmod-builtin.c:125: use_invalid: Using "nullp", which points to an out-of-scope variable "buf".
# 123| size_t linesz = 0;
# 124|
# 125|-> while (!nullp) {
# 126| char buf[BUFSIZ];
# 127| ssize_t sz;
It seems to be indeed an UB, as nullp is getting assined an address
inside object buf, which has a lifetime of the while loop body,
and is not available outside of it (specifically, in the while
condition, where nullp is checked for NULL). Fix it by putting
buf definition in the outer block.
Emil Velikov [Sat, 10 Aug 2024 12:25:16 +0000 (13:25 +0100)]
m4: remove verbose license exception clause
It is already encoded in the SPDX license identifier.
Cc: Lucas De Marchi <lucas.de.marchi@gmail.com> Fixes: b5a2cd0 ("Use SPDX header for license") Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Sat, 10 Aug 2024 12:25:15 +0000 (13:25 +0100)]
m4: reinstate CC_CHECK_FLAG_APPEND summary
Earlier commit was reducing the license boilerplate to SPDX license
identifiers and erroneously dropped the function summary section.
Cc: Lucas De Marchi <lucas.de.marchi@gmail.com> Fixes: b5a2cd0 ("Use SPDX header for license") Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Lucas De Marchi [Tue, 23 Jul 2024 18:59:21 +0000 (13:59 -0500)]
depmod: Remove license/copyright from the middle
The top license is enough as it's the same. Just move the copyright to
the top and remove notice about code that was copied and modified: that
comment doesn't age well as source is updated.
Lucas De Marchi [Tue, 23 Jul 2024 18:59:19 +0000 (13:59 -0500)]
Use SPDX header for license
Drop the lengthy license from each file and just use SPDX like most
projects nowadays. This doesn't have any change to license, just how
they are recorded in each file.
This follows the kernel approach: header files use '/*' for comments
while .c files use '//'. For .m4, use "#".
Emil Velikov [Fri, 19 Jul 2024 16:12:43 +0000 (17:12 +0100)]
libkmod: move new weak API to separate section
Add the new weak API, to a separate section in the version script. These
will be exposed with the upcoming v33 release and not with v5 as the
symbol tag implies.
Cc: Jose Ignacio Tornos Martinez <jtornosm@redhat.com> Fixes: 05828b4 ("libkmod: add weak dependecies") Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://lore.kernel.org/r/20240719-abi-fixes-v1-3-1e6d99a2846b@gmail.com
Emil Velikov [Fri, 19 Jul 2024 16:12:42 +0000 (17:12 +0100)]
libkmod: correctly tag kmod_module_new_from_name_lookup
The symbol was introduced with v30, yet was erroneously added in the v5
section. Move it to the correct place.
In theory this might cause an issue - severity depends on how the
runtime linker is setup. From a harmless warning (on stderr/stdout) to
failure to load the library.
In practise this shouldn't be a problem, since there are seemingly no
external users of the API.
Emil Velikov [Fri, 19 Jul 2024 16:12:41 +0000 (17:12 +0100)]
libkmod: document KMOD_INDEX_MODULES_BUILTIN_ALIAS in kmod_dump_index()
The extra enum was introduced a few years ago, although the (only)
function using it did not have it's documentation updated.
The commit itself has caused an ABI break with kmod v27, since the
KMOD_INDEX_MODULES_BUILTIN value has changed.
A search through Google, Github and Arch packages have shown one user of
kmod_dump_index() - the only API that uses the enum.
In that case and all others, no projects referencing the changed enum
were found. Although since recent and/or supported distros use kmod v27
or later we've decided to only update the documentation.
Cc: Alexey Gladkov <gladkov.alexey@gmail.com> Fixes: b866b21 ("Lookup aliases in the modules.builtin.modinfo") Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://lore.kernel.org/r/20240719-abi-fixes-v1-1-1e6d99a2846b@gmail.com
Emil Velikov [Wed, 17 Jul 2024 17:26:45 +0000 (18:26 +0100)]
kmod: remove .alias config files for modprobe.d
The use of .alias (alongside .conf) was added for compatibility with the
original module-init-tools project and has been living in kmod ever
since.
In practise, all the linux distributions that I can see are using .conf
files alone, as instructed by modprobe.d(5) and the only instance of an
.alias file is the modules.alias as shipped in the kernel.
The latter is already handled by other parts of the kmod project, so
let's enforce what our documentation says.
Lucas De Marchi [Fri, 12 Jul 2024 18:12:10 +0000 (13:12 -0500)]
ci: Add Fedora
Add an action to setup latest Fedora and use it for the initial setup.
Add hack on /usr/lib/modules so /usr/lib/modules/*/build can still be
used in the rest of the workflow as the KDIR.
Lucas De Marchi [Fri, 12 Jul 2024 17:06:42 +0000 (12:06 -0500)]
ci: Add Archlinux
Add an action to setup Archlinux and use it for the initial setup.
The rest of the workflow can stay the same.
Currently the Arch container in docker hub is not very up-to-date with
some expired keys and other keys not yet in the package. Workaround
that by wiping the current db and reinstalling the keyring. As requested
by Emil, add a comment in this part of the github-action about why
that is done.
Lucas De Marchi [Fri, 12 Jul 2024 16:06:07 +0000 (11:06 -0500)]
ci: Use a container and expand versions
Use containers to build/test so it's not restricted to the OS versions
supported by Github runners. A few changes are needed to the workflow to
support using containers:
1) No need for sudo, so remove it
2) Explicitly install missing zlib
3) Explicitly pass KDIR= while building kernel modules, since it
won't match `uname -r`. This assumes the container has just
one kernel installed and so /usr/lib/modules/*/build can be
used as the single symlink to the kernel headers. This should
be common to other distros to be added, too.
Lucas De Marchi [Fri, 12 Jul 2024 13:24:49 +0000 (08:24 -0500)]
README: update to a decade+ later
- State support for clang and other libc's
- Fix typos
- Reword the compatibility with module-init-tools section,
removing most of the specific examples as we didn't keep
track of all of them, and they are not important anymore
in year 2024
q66 [Mon, 17 Jun 2024 23:22:06 +0000 (01:22 +0200)]
libkmod: improve realloc behavior for zstd outbuffer
The allocator in glibc has a particular quirk that successive
reallocs on the same pointer are cheap, at the cost of excess
memory fragmentation. Other allocators generally do not do this,
so excessive reallocs become relatively expensive.
Reducing the number of reallocations by using a more agressive
strategy for buffer size increase makes performance better on
those setups, e.g. musl libc, or generally any other allocator;
on my Chimera Linux setup with Scudo allocator (LLVM) it doubles
to triples the performance of running e.g. depmod.
Signed-off-by: q66 <q66@chimera-linux.org> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Lucas De Marchi [Tue, 9 Jul 2024 04:47:57 +0000 (23:47 -0500)]
build: Add mod-weakdep.c to EXTRA_DIST
Fix distcheck failure:
make[5]: *** No rule to make target
'/home/runner/work/kmod/kmod/build/kmod-32/_build/sub/testsuite/module-playground/mod-weakdep.o',
needed by
'/home/runner/work/kmod/kmod/build/kmod-32/_build/sub/testsuite/module-playground/'.
Stop.
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Emil Velikov [Mon, 8 Jul 2024 13:43:25 +0000 (14:43 +0100)]
man: list options one per line
Somewhat inspired by my selfish use of VIM as man pager. Namely, when
there are multiple options on the same line, only the first one gets
properly rendered.
A good bonus point is that very long instances, like modinfo's legacy
"--author, --description ..." look a bit neater now.
With this is also more consistently handle short/long options which take
an argument.
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>