]> git.ipfire.org Git - thirdparty/kmod.git/log
thirdparty/kmod.git
8 months agoshared: Move cleanup attribute
Lucas De Marchi [Sat, 9 Nov 2024 22:20:18 +0000 (16:20 -0600)] 
shared: Move cleanup attribute

Move to macro.h where other attributes are located. The inline helper
function can also move along as we don't need to keep it separate.

Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/233
8 months agoman: add modprobe.conf.5 manpage link
Emil Velikov [Thu, 7 Nov 2024 15:44:30 +0000 (15:44 +0000)] 
man: add modprobe.conf.5 manpage link

Seemingly Fedora and friends have been carrying this one for years. Just
add it to kmod itself so that people using multiple distros have
consistent experience.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/231
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agomeson: install the configuration directories
Emil Velikov [Thu, 7 Nov 2024 15:28:28 +0000 (15:28 +0000)] 
meson: install the configuration directories

Install the /{etc,usr/lib}/{depmod,modprobe}.d/ configuration
directories as part of out install action.

Currently a handful of distros (Debian, Gentoo, Fedora, Arch) do that
manually, where we can have it in the upstream project instead.

As a pie in the sky idea, in the future we may choose to enforce
particular permissions, ownership, etc and this should make it a little
less fragile across the ecosystem.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/231
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agomeson.build: install kmod symlinks to /usr/sbin/
Emil Velikov [Thu, 7 Nov 2024 14:17:28 +0000 (14:17 +0000)] 
meson.build: install kmod symlinks to /usr/sbin/

With earlier commit we added support for kmod itself to install the
symlinks to kmod. While it works across the board, some distributions
still support (to varying degree) split /usr/bin and /usr/sbin.

This commit changes the location where those are created and bears no
functional change for merged bin-sbin users. While for split ones, it
follows what distributions are doing to a varying extend:

 - Fedora, Alpine - this commit matches exactly what they do
 - Debian, Yocto - they have an extra /bin/lsmod -> ../sbin/kmod symlink
 - Gentoo - as Debian plus an extra /bin/modinfo -> ../sbin/kmod symlink

Loosely based on a Debian patch by Marco d'Itri.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/231
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoci: add coreutils to Alpine
Emil Velikov [Mon, 11 Nov 2024 17:02:39 +0000 (17:02 +0000)] 
ci: add coreutils to Alpine

The buxybox version of ln supports only the short options and does not
support -r/--relative.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/231
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoci: add code coverage via Codecov
Emil Velikov [Tue, 5 Nov 2024 15:07:34 +0000 (15:07 +0000)] 
ci: add code coverage via Codecov

Add a simple code coverage pipeline based on the CodeQL one.

Should give us pretty reports in the PRs and web UI with the results. We
can consider having HTML reports on our website (once it's up that is)
in addition or instead of at a future point.

Closes: https://github.com/kmod-project/kmod/issues/61
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/229
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoRevert "testsuite/path: match the full rootpath"
Emil Velikov [Tue, 5 Nov 2024 00:25:39 +0000 (00:25 +0000)] 
Revert "testsuite/path: match the full rootpath"

This reverts commit ae0c0c4c89f60fd379133f46b10c37686eef0c6c.

The commit reasoning was correct, but did not consider the case where
other third-party files are created. Namely: when generating the code
coverage files.

Thus the gcna files were created in $test_rootdir/$abs_top_builddir
which meant they won't get picked when the coverage info/xml/html files
were created and the statistics reported were quite wrong.

Revert the commit and add an inline comment, so we don't feel tempted to
change it in the future.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/229
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoci/codeql: use Ubuntu 24.04, adjust build flags
Emil Velikov [Tue, 5 Nov 2024 16:22:16 +0000 (16:22 +0000)] 
ci/codeql: use Ubuntu 24.04, adjust build flags

While in here drop the docs and manpages flags - both of those combined
take ~1s of CI time - and disable the sanitizers and tests instead.

This means we no longer get pre-existing code problems in the tests,
which is fine considering the number of pre-existing issues in there.
Another nice side effect is that the pipeline time is reduced by ~50%.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/229
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agobuild: Drop define not picked by meson
Lucas De Marchi [Thu, 7 Nov 2024 17:13:11 +0000 (11:13 -0600)] 
build: Drop define not picked by meson

For almost 13 years, since commit 769becb5dbfb ("tools: kmod: Add
handling of compat modinfo") we have a non-spoken joke in the build
system showing "-DANOTHER_BRICK_IN_THE -Wall" in honour of the famous
Pink Floyd song.

With configure flags now being sorted, I'm looking at the logs and
seeing: "-DANOTHER_BRICK_IN_THE -fdata-sections". That makes no sense.
Also the new meson build system did not join the joke. Not fun. Let's
drop it and let this commit serve as recognition of what it was.

Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/226
8 months agobuild: alpha sort the compiler flags
Emil Velikov [Mon, 4 Nov 2024 19:01:35 +0000 (19:01 +0000)] 
build: alpha sort the compiler flags

Pipe the lot through sort so one can reasonably search, add, edit
without going crazy.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/226
8 months agobuild: remove no longer needed -Wno flags
Emil Velikov [Mon, 4 Nov 2024 18:55:48 +0000 (18:55 +0000)] 
build: remove no longer needed -Wno flags

Nearly all the -Wno flags are not applicable any more - remove them.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/226
8 months agoci: Fix debian/ubuntu installation
Lucas De Marchi [Thu, 7 Nov 2024 20:39:08 +0000 (14:39 -0600)] 
ci: Fix debian/ubuntu installation

Make sure we are running in non-interactive mode and that we don't get
blocked on tzdata update.

Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/235
8 months agodepmod: Check fstatat return value
Tobias Stoeckmann [Wed, 6 Nov 2024 21:22:35 +0000 (22:22 +0100)] 
depmod: Check fstatat return value

If fstatat fails, do not access the uninitialized variable st.
Instead, filter the file out.

Basically synchronization with libkmod's conf_files_filter_out.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/230
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: Prevent ouf of boundary access
Tobias Stoeckmann [Tue, 5 Nov 2024 16:17:57 +0000 (17:17 +0100)] 
libkmod: Prevent ouf of boundary access

Do not access memory out of bounds if the first character read by fgets
is NUL. Treat such a character as EOL instead. This is a purely
defensive measure since /proc/modules should normaly not contain such
characters.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/227
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: const struct index_mm as applicable
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: const struct index_mm as applicable

The index_mm_{search,read,dump}* API does not mutate the index_mm
struct. So let's annotate it as constant.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: return bool from lookup_builtin_file()
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: return bool from lookup_builtin_file()

The callers are interested if the file is within the list of builtins or
not. So change the return type and push the free() down the stack.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: factor out index_{mm_,}search based lookup
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: factor out index_{mm_,}search based lookup

Create a simple helper and reuse it instead of duplicating code.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: inline _idx_empty_str
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: inline _idx_empty_str

The compiler already creates an empty string as applicable, drop the
extra variable.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: convert index_{,mm_}value to uint32_t ...
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: convert index_{,mm_}value to uint32_t ...

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: pass bool alias_prefix to index_{,mm_}dump()
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: pass bool alias_prefix to index_{,mm_}dump()

As seen with previous commit, the way we pass an empty string to
index_{,mm_}dump() is very error prone.

Swap that with a bool, which makes things a lot more obvious.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: fix dumps for non-alias indexes
Emil Velikov [Mon, 4 Nov 2024 14:32:39 +0000 (14:32 +0000)] 
libkmod: fix dumps for non-alias indexes

For non-alias indexes prefix is an empty string, where
strbuf_pushchars() returns the number of characters added to the strbuf.

Since those are zero, we end up completely skipping the dump process.

Cc: Tobias Stoeckmann <tobias@stoeckmann.org>
Fixes: 889d02b1 ("libkmod: check strbuf return values")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/224
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: Validate symbol names in ELF files
Tobias Stoeckmann [Fri, 1 Nov 2024 21:50:08 +0000 (22:50 +0100)] 
libkmod: Validate symbol names in ELF files

Make sure that symbol names in ELF files are actually NUL terminated.

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/222
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: Unify crclen calculation in ELF parser
Tobias Stoeckmann [Fri, 1 Nov 2024 21:42:11 +0000 (22:42 +0100)] 
libkmod: Unify crclen calculation in ELF parser

Whenever sizeof(mv->crc) is used, it's called crclen, not offcrc.
Move retrieval of field sizes into its own function.
Prepare this as a cleanup for easier auditing.

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/222
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoREADME: Add release/distro/end-user recommendation
Lucas De Marchi [Fri, 1 Nov 2024 20:04:30 +0000 (15:04 -0500)] 
README: Add release/distro/end-user recommendation

This may be useful for anyone trying a non-debug build and serve as
baseline for distros. Even for developers, when benchmarking kmod, it's
better to run a release-oriented kmod rather than the slow one due to
all debug/sanitizers.

By keeping the -D in the command line rather than in a ini file,
we also guarantee meson shows it in the summary, regardless of
https://github.com/mesonbuild/meson/issues/13865.

Closes: https://github.com/kmod-project/kmod/issues/220
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/221
8 months agoREADME: Let autotools follow the same steps as meson
Lucas De Marchi [Fri, 1 Nov 2024 20:03:33 +0000 (15:03 -0500)] 
README: Let autotools follow the same steps as meson

For meson it's configure & build & install in the same snippet.
Do the same for autotools.

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/221
8 months agoci: re-enable sanitizers with Fedora 41
Emil Velikov [Fri, 1 Nov 2024 13:03:46 +0000 (13:03 +0000)] 
ci: re-enable sanitizers with Fedora 41

We had the sanitizers disabled on Fedora 40, since the shared library
sanitizers comings with clang were not packaged. With Fedora 41 that has
changed, so let's try re-enabling them.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/219
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoscripts/sanitizer-env.sh: support new clang 19 DSO
Emil Velikov [Fri, 1 Nov 2024 13:32:07 +0000 (13:32 +0000)] 
scripts/sanitizer-env.sh: support new clang 19 DSO

Seemingly with version 19, the CPU arch was dropped from the DSO name.
Try that and fallback to the old one, as applicable.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/219
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoscripts/sanitizer-env.sh: check and warn if OUR_PRELOAD is not a file
Emil Velikov [Fri, 1 Nov 2024 13:37:47 +0000 (13:37 +0000)] 
scripts/sanitizer-env.sh: check and warn if OUR_PRELOAD is not a file

As seen with the upcoming clang 19 change, the library name has changed.
Enhance the current test to check if the compiler provided string is a
file and produce a warning with some handy tips when that's not the
case.

v2:
 - convert to heredoc
 - output to stderr

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/219
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoscripts/sanitizer-env.sh: promote unknown compiler to warning/stderr
Emil Velikov [Mon, 4 Nov 2024 13:54:56 +0000 (13:54 +0000)] 
scripts/sanitizer-env.sh: promote unknown compiler to warning/stderr

Should make it more distinguishable, depending on shell and/or CI setup,
from the informational message.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/219
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoscripts/sanitizer-env.sh: convert to heredoc
Emil Velikov [Mon, 4 Nov 2024 13:45:17 +0000 (13:45 +0000)] 
scripts/sanitizer-env.sh: convert to heredoc

Convert to heredoc and add leading/trailing blank lines so it stands out
from the rest. It makes for cleaner reading experience both of the
script itself and its output.

As suggested by Lucas.

v2:
 - don't escape ", drop spurious instance

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/219
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agomeson: s/modulesi/modules/ typo
Emil Velikov [Thu, 7 Nov 2024 15:14:14 +0000 (15:14 +0000)] 
meson: s/modulesi/modules/ typo

Fix the typo in the option description.

Reported-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/225
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agoREADME.md: adjust the optional dependency note
Emil Velikov [Mon, 4 Nov 2024 18:45:52 +0000 (18:45 +0000)] 
README.md: adjust the optional dependency note

With last commit we've default-enabled a few options. So the optional
dependencies become required now.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/225
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agomeson: default enable compression and openssl
Emil Velikov [Mon, 4 Nov 2024 18:40:51 +0000 (18:40 +0000)] 
meson: default enable compression and openssl

The default for the compressions and openssl is based on the autotools
build ones. With the initial goal to make migration as easy as possible
- identical option names, help messages, defaults...

Although a bunch of these have changed already, plus we want builders to
get support for compressed/signed modules out of the box.

So let's flip the defaults - everyone is welcome to adjust those when
calling `meson setup -D foo=bar`.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/225
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agolibkmod: Fix typo in comment
Tobias Stoeckmann [Sat, 2 Nov 2024 11:05:16 +0000 (12:05 +0100)] 
libkmod: Fix typo in comment

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/223
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agomeson: don't escape module_foo in kmod.pc
Emil Velikov [Thu, 31 Oct 2024 13:16:37 +0000 (13:16 +0000)] 
meson: don't escape module_foo in kmod.pc

The kmod.pc file, contains module_signatures and module_compressions
space-separated lists, indicating how kmod is built. For the meson
generated file, any spaces are escaped where the autotools one does not
do that.

Update the meson build to be consistent with the original autotools one
and omit the escaping that we don't want.

Aside: seems like autotools does not escape the directory variables
either, so if the path(s) have any spaces in them pkg-config (pkgconf at
least) produces rubbish, quite rightfully IMHO.

Eg.
  $ cat .../autotools-file.pc
  prefix=/usr
  includedir=${prefix}/include bar
  Cflags: -I${includedir}
  ...
  $ pkg-config --cflags autotools-file.pc
  bar

  $ cat .../meson-file.pc
  prefix=/usr
  includedir=${prefix}/include\ bar
  Cflags: -I${includedir}
  ...
  $ pkg-config --cflags meson-file.pc
  -I/usr/include\ bar

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/217
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
8 months agomeson: align default distconfdir with autotools
Emil Velikov [Wed, 30 Oct 2024 17:00:28 +0000 (17:00 +0000)] 
meson: align default distconfdir with autotools

Autotools uses $prefix/lib as the default for distconfdir, while meson
$libdir - which is not guaranteed to be the same.

In particular: Debian and derivatives use /usr/lib/$target-triplet as a
$libdir, while still keep the configuration directory as /usr/lib.

Fixes: 370141c1 ("meson: introduce meson, covering libkmod.so")
Reported-by: Marco d'Itri <md@linux.it>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/216
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Properly skip first symbol entry
Tobias Stoeckmann [Tue, 29 Oct 2024 16:45:01 +0000 (17:45 +0100)] 
libkmod: Properly skip first symbol entry

This fixes a regression introduced while converting pointer to
offset arithmetics.

The for-loop itself starts at 1 already, so reflect this with the
manually performed offset + length calculation right at the start.

Closes: https://github.com/kmod-project/kmod/issues/214
Fixes: 25ab561b ("libkmod: Use ELF offsets more often")
Reported-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/215
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Unify kmod_module_new_from_* functions
Tobias Stoeckmann [Thu, 24 Oct 2024 19:09:53 +0000 (21:09 +0200)] 
libkmod: Unify kmod_module_new_from_* functions

Return result of kmod_module_new directly in kmod_module_new_from_alias
so this function handles return values like the others.

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/211
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Clean up all dependencies on error path
Tobias Stoeckmann [Thu, 24 Oct 2024 19:07:44 +0000 (21:07 +0200)] 
libkmod: Clean up all dependencies on error path

If kmod_module_parse_depline runs out of memory, it is possible
that not all dependency modules are unlinked.

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/211
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Clarify function signature
Tobias Stoeckmann [Thu, 24 Oct 2024 19:04:28 +0000 (21:04 +0200)] 
libkmod: Clarify function signature

The module_get_dependencies_noref function may modify content of
given kmod_module struct, so clarify this fact.

Actually we would have to adjust kmod API for total clarification,
but let's start with internally used functions first.

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/211
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Simplify module dependency parsing
Tobias Stoeckmann [Thu, 24 Oct 2024 18:54:40 +0000 (20:54 +0200)] 
libkmod: Simplify module dependency parsing

The return value of kmod_module_parse_depline and
module_get_dependencies_noref are never used, and the same is true for
n_dep in struct kmod_module.

Remove them and turn variable n in kmod_module_parse_depline into a
size_t to make sure that it never overflows.

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/211
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Fix typo in libkmod.h
Tobias Stoeckmann [Thu, 24 Oct 2024 18:51:01 +0000 (20:51 +0200)] 
libkmod: Fix typo in libkmod.h

It's "within" instead of "with in".

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/211
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Reduce code duplication
Tobias Stoeckmann [Thu, 24 Oct 2024 18:49:05 +0000 (20:49 +0200)] 
libkmod: Reduce code duplication

If functions exist which cover the exact explicitly written code, use
them instead.

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/211
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Use fread_unlocked
Tobias Stoeckmann [Thu, 17 Oct 2024 08:09:34 +0000 (10:09 +0200)] 
libkmod: Use fread_unlocked

This is in sync with read_char, which uses getc_unlocked. This and
previous FILE based index adjustments improved FILE based index dump
performance by 8 %.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/190
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Add better caching to FILE index
Tobias Stoeckmann [Thu, 17 Oct 2024 07:48:06 +0000 (09:48 +0200)] 
libkmod: Add better caching to FILE index

We can use getdelim and reuse buffers by referencing the index_file
instead of just the FILE handle.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/190
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Read multiple numbers at once
Tobias Stoeckmann [Thu, 17 Oct 2024 07:36:53 +0000 (09:36 +0200)] 
libkmod: Read multiple numbers at once

Reduce the FILE overhead by reading as many bytes as possible at once.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/190
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: factor common strings when handling shell completions
Emil Velikov [Thu, 24 Oct 2024 18:49:18 +0000 (19:49 +0100)] 
meson: factor common strings when handling shell completions

Remove some of the repetition, by moving the common roots as needed.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: bump to 0.61, use install_symlink()
Emil Velikov [Thu, 24 Oct 2024 12:34:45 +0000 (13:34 +0100)] 
meson: bump to 0.61, use install_symlink()

Bump the meson requirement to 0.61 which allows us to remove our clunky
shell script in favour of the native install_symlink().

In terms of OS support - according to repology, all distributions which
have 0.60 (Fedora 36 + winget) also have 0.61 in their repositories.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: disable automatic shell completion on prefix missmatch
Emil Velikov [Thu, 24 Oct 2024 12:46:47 +0000 (13:46 +0100)] 
meson: disable automatic shell completion on prefix missmatch

Currently one can choose a prefix completely different from the one
bash-completion and fish use, as per their pkg-config file.

In such cases, flag a warning and disable it. People can always manually
provide the completion directory/ies to re-enable.

    $ meson setup --prefix=/tmp/example build/
    ...
    WARNING: User provided prefix '/tmp/example' differs from bash-completion one '/usr'. Disabling completion.
    ...
    WARNING: User provided prefix '/tmp/example' differs from fish one '/usr'. Disabling completion.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: remove unused localstatedir=/var
Emil Velikov [Thu, 24 Oct 2024 21:39:31 +0000 (22:39 +0100)] 
meson: remove unused localstatedir=/var

... not sure what I was smoking to add this, since we don't use it
anywhere.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: port moduledir/distconfdir checks from autoconf
Emil Velikov [Thu, 24 Oct 2024 13:27:42 +0000 (14:27 +0100)] 
meson: port moduledir/distconfdir checks from autoconf

Namely, ensure they are absolute paths and any trailing / is stripped.

    $ meson setup -D moduledir=relative/ build/
    ...
    ERROR: Problem encountered: User provided moduledir, 'relative' is not an absolute path.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
[ Fix relative customdir ]
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: fold distconfdir/moduledir handling
Emil Velikov [Thu, 24 Oct 2024 13:07:52 +0000 (14:07 +0100)] 
meson: fold distconfdir/moduledir handling

We're about to add a few more checks, so instead of duplicating them
fold the handling of custom variables in single place.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: group and print all directories in the summary
Emil Velikov [Thu, 24 Oct 2024 21:35:01 +0000 (22:35 +0100)] 
meson: group and print all directories in the summary

The original listing (both contents and ordering) was copied from
autotools. Update it to be more comprehensive and logical.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: consolidate all get_option('somedir') handling
Emil Velikov [Thu, 24 Oct 2024 12:49:22 +0000 (13:49 +0100)] 
meson: consolidate all get_option('somedir') handling

Consolidate fetching of the directory options in a single place. This
allows us to see what's missing, wrong and prevents error-prone
duplication.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: switch to / operator instead of join_paths()
Emil Velikov [Thu, 24 Oct 2024 22:00:03 +0000 (23:00 +0100)] 
meson: switch to / operator instead of join_paths()

The former was introduced with meson v0.49.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/209
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoRevert "libkmod: call fnmatch() only as needed"
Lucas De Marchi [Thu, 24 Oct 2024 04:59:02 +0000 (23:59 -0500)] 
Revert "libkmod: call fnmatch() only as needed"

This reverts commit e79bba6b4af86216072b56382198da645a0906f4.

This broke alias resolution to more than one module. Example:

kmod v33:
$ modprobe -R char-major-116-1
snd
snd_seq

e79bba6b4af86216072b56382198da645a0906f4:
$ ./modprobe -R char-major-116-1
snd

Closes: https://github.com/kmod-project/kmod/issues/207
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/208
9 months agolibkmod: Read mm index node content on demand
Tobias Stoeckmann [Mon, 21 Oct 2024 16:38:51 +0000 (18:38 +0200)] 
libkmod: Read mm index node content on demand

Many values are never needed, so only parse them on demand. Also keep
pointers into memory-mapped area without copying data into dynamically
sized structs, which allows nodes to be kept on stack.

Improves performance of `modprobe -c` by around 3 %.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/201
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Simplify index search functions
Tobias Stoeckmann [Mon, 21 Oct 2024 15:47:43 +0000 (17:47 +0200)] 
libkmod: Simplify index search functions

Remove arguments with fixed values. Also increment char pointers instead
of working with addresses of indices for easier readability.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/201
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Fix typos
Tobias Stoeckmann [Mon, 21 Oct 2024 15:29:58 +0000 (17:29 +0200)] 
libkmod: Fix typos

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/201
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Const annotate read_*_mm API
Tobias Stoeckmann [Mon, 21 Oct 2024 15:22:45 +0000 (17:22 +0200)] 
libkmod: Const annotate read_*_mm API

Clarify that we never intend to modify the memory-mapped content.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/201
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoCONTRIBUTING.md: mention about gtk-doc Since:
Emil Velikov [Mon, 21 Oct 2024 13:23:55 +0000 (14:23 +0100)] 
CONTRIBUTING.md: mention about gtk-doc Since:

We don't have an easy way to test if API is missing a Since annotation,
so mention that in the contributing guide.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/200
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agodocs: annotate the deprecated API
Emil Velikov [Mon, 21 Oct 2024 13:08:59 +0000 (14:08 +0100)] 
docs: annotate the deprecated API

The kmod_module_get_filtered_blacklist() was deprecated since kmod v6 in
favour of kmod_module_apply_filter().

Add the decoration so gtk-doc includes it in the generated html and also
add a designated index.

It seem that gtk-doc insists on having deprecation guards, so not it
prints an extra warning like:

  warning: XXX is deprecated in the inline comments, but no deprecation
  guards were found around the declaration. (See the --deprecated-guards
  option for gtkdoc-scan.)

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/200
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agodocs: add per-version index sections
Emil Velikov [Mon, 21 Oct 2024 13:05:40 +0000 (14:05 +0100)] 
docs: add per-version index sections

With the introduction of the "Since: XX" tags, gtk-doc has been
helpfully reminding us that the per-version index isn't referenced
anywhere.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/200
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: Fix installing without DESTDIR
Lucas De Marchi [Wed, 23 Oct 2024 21:20:14 +0000 (16:20 -0500)] 
meson: Fix installing without DESTDIR

Script fails because of `set -u`. Make sure DESTDIR is set to something

Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # meson v1.6.0
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/206
9 months agotools: Use options_from_array in insmod
Tobias Stoeckmann [Wed, 23 Oct 2024 21:52:05 +0000 (23:52 +0200)] 
tools: Use options_from_array in insmod

Adjust arguments of options_from_array to avoid skipping the first
array entry because that's not intuitive based on its function name.

Fixes insmod's handling of module options given as quoted command line
arguments.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/204
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools: Extract options_from_array into opt.c
Tobias Stoeckmann [Wed, 23 Oct 2024 21:49:05 +0000 (23:49 +0200)] 
tools: Extract options_from_array into opt.c

The function should be used in insmod as well to allow identical
handling of module options between insmod and modprobe.

Prepare using the function in insmod by extracting it into opt.c.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/204
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: Collect all prefix get_option at one place
Sedat Dilek [Wed, 23 Oct 2024 20:52:49 +0000 (22:52 +0200)] 
meson: Collect all prefix get_option at one place

Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
Link: https://lore.kernel.org/r/20241023205352.45271-1-sedat.dilek@gmail.com
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: always pass complete path to kmod-symlink.sh
Emil Velikov [Tue, 22 Oct 2024 20:28:27 +0000 (21:28 +0100)] 
meson: always pass complete path to kmod-symlink.sh

The end-user can provide either relative (to prefix) or an absolute
directory for bindir. Just fold the prefix and bindir with join_path()
which handles this correctly and pass that to kmod-symlink.sh instead of
relying on the MESON_INSTALL_DESTDIR_PREFIX environment variable.

This was previously failing due to trying to create the symlink in the
wrong location:

$ meson setup --prefix /usr --bindir /bin build-gentoo
$ DESTDIR=/tmp/install-gentoo meson install -C build-gentoo/
...
ln: failed to create symbolic link '/tmp/install-gentoo/usr//bin/depmod': No such file or directory
FAILED: install script '/home/ldmartin/p/kmod/scripts/kmod-symlink.sh /bin/depmod' failed with exit code 1.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/205
[ fix typo, add repro ]
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Prevent OOB with huge amount of symbols
Tobias Stoeckmann [Sun, 20 Oct 2024 14:32:17 +0000 (16:32 +0200)] 
libkmod: Prevent OOB with huge amount of symbols

On 32 bit systems it's possible to overflow the final calculation of
required memory for symbols retrieved from __ksymtab_strings.

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/198
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/depmod: use separate arrays for alias,xxxdep values
Emil Velikov [Sun, 20 Oct 2024 12:39:02 +0000 (13:39 +0100)] 
tools/depmod: use separate arrays for alias,xxxdep values

Currently, we walk the info list multiples times each time filtering all
but one key. Just create a few arrays to avoid that, saving 2-3% cycles
at the cost of extra ~500bytes per module.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/197
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Adjust style
Tobias Stoeckmann [Sun, 20 Oct 2024 14:42:39 +0000 (16:42 +0200)] 
libkmod: Adjust style

Add a blank between variable declaration and function calls.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Use correct format specifiers
Tobias Stoeckmann [Sun, 20 Oct 2024 12:57:15 +0000 (14:57 +0200)] 
libkmod: Use correct format specifiers

Use correct format specifiers for size_t variables.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Access correct array
Tobias Stoeckmann [Sun, 20 Oct 2024 12:12:59 +0000 (14:12 +0200)] 
libkmod: Access correct array

The contents of s and strings are identical at this point, but iterate
over the correct variable nonetheless.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Simplify size checks
Tobias Stoeckmann [Sun, 20 Oct 2024 12:08:29 +0000 (14:08 +0200)] 
libkmod: Simplify size checks

An empty section is very unlikely, so reorder code to account for it.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Remove elf_find_section
Tobias Stoeckmann [Sun, 20 Oct 2024 11:58:21 +0000 (13:58 +0200)] 
libkmod: Remove elf_find_section

The function's purpose can be merged into elf_get_section. Reduces
amount of duplicated code.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Inline elf_get_strings_section
Tobias Stoeckmann [Sun, 20 Oct 2024 10:23:42 +0000 (12:23 +0200)] 
libkmod: Inline elf_get_strings_section

Its only caller can do the processing directly (kmod_elf_new).

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Simplify section name handling
Tobias Stoeckmann [Sun, 20 Oct 2024 10:20:43 +0000 (12:20 +0200)] 
libkmod: Simplify section name handling

The name of string section is not needed, so it does not have to stored.
If section name is needed, return a char pointer instead of forcing the
caller to handle offset and memory calculations.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Use ELF offsets more often
Tobias Stoeckmann [Sun, 20 Oct 2024 10:10:09 +0000 (12:10 +0200)] 
libkmod: Use ELF offsets more often

Returned pointers are converted back to offsets in some functions. It is
more readable to turn offsets into pointers though.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Remove struct name
Tobias Stoeckmann [Sun, 20 Oct 2024 09:40:51 +0000 (11:40 +0200)] 
libkmod: Remove struct name

This struct name is never used. Define it just like the other ones in
kmod_elf.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Use correct data types
Tobias Stoeckmann [Sun, 20 Oct 2024 09:38:56 +0000 (11:38 +0200)] 
libkmod: Use correct data types

A huge module file could contain more symbols than could be represented
with an int. Use size_t instead.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Introduce elf_range_valid
Tobias Stoeckmann [Sun, 20 Oct 2024 08:57:51 +0000 (10:57 +0200)] 
libkmod: Introduce elf_range_valid

The range check should be performed in its own function for better
readability and reusability. Also, perform range checks before loops
or otherwise repeated calls by checking whole ranges instead of
single byte areas within said ranges iteratively.

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/196
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Check node offset in index_mm_read_node
Tobias Stoeckmann [Tue, 22 Oct 2024 15:48:32 +0000 (17:48 +0200)] 
libkmod: Check node offset in index_mm_read_node

Add a cheap but important check to make sure that offsets do not point
outside of memory-mapped area.

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/203
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agodepmod: Prevent undefined behavior
Tobias Stoeckmann [Fri, 18 Oct 2024 15:37:40 +0000 (17:37 +0200)] 
depmod: Prevent undefined behavior

Calling qsort with NULL argument is invalid, although size 0 would
prevent anything bad from happening. Make sure that UBSAN is not
triggered.

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/193
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agodepmod: Use strbuf for dependency output
Tobias Stoeckmann [Fri, 18 Oct 2024 15:28:36 +0000 (17:28 +0200)] 
depmod: Use strbuf for dependency output

Use shared/strbuf instead of manually re-implementing its features.
Reduces the amount of custom code in depmod, simplifies auditing,
reduces binary size, and has the nice benefit of slightly faster
runtime due to memory reusage.

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/193
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agodepmod: use array for dependency output
Tobias Stoeckmann [Fri, 18 Oct 2024 15:23:17 +0000 (17:23 +0200)] 
depmod: use array for dependency output

The shared/array implementation is already used within depmod, but not
for dependency output. Adding it here reduces the amount of custom code
in depmod, simplifies auditing, reduces binary size, and has the nice
benefit of slightly faster runtime due to memory reusage.

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/193
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/rmmod: minor getopt tweaks
Emil Velikov [Sat, 19 Oct 2024 17:11:17 +0000 (18:11 +0100)] 
tools/rmmod: minor getopt tweaks

Adjust the loop to follow the in-documentation example.

Namely, we don't need the unused idx and removing the seemingly
infinite loop helps static analysers better reason about the code flow.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/195
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/lsmod: minor getopt tweaks
Emil Velikov [Sat, 19 Oct 2024 17:11:17 +0000 (18:11 +0100)] 
tools/lsmod: minor getopt tweaks

Adjust the loop to follow the in-documentation example.

Namely, we don't need the unused idx and removing the seemingly
infinite loop helps static analysers better reason about the code flow.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/195
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/insmod: minor getopt tweaks
Emil Velikov [Sat, 19 Oct 2024 17:11:17 +0000 (18:11 +0100)] 
tools/insmod: minor getopt tweaks

Pull the unistd.h for optind and adjust the loop to follow the
in-documentation example.

Namely, we don't need the unused idx and removing the seemingly
infinite loop helps static analysers better reason about the code flow.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/195
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Allow better optimization
Tobias Stoeckmann [Wed, 16 Oct 2024 14:55:43 +0000 (16:55 +0200)] 
libkmod: Allow better optimization

If we have native endianess, i.e. parsing modules for the running
system, assist the compiler to note that it is really much faster to
move a word/qword etc. instead of actually running through a loop.

Reduces library instructions on x86_64 by 1.4 % and binary instructions
by 3 % with default configuration.

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/187
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Split elf->class into two booleans
Tobias Stoeckmann [Wed, 16 Oct 2024 14:52:26 +0000 (16:52 +0200)] 
libkmod: Split elf->class into two booleans

Compilers on x86_64 use two instructions to test value of class
variable, i.e. loading a mask and then comparing with value.

A boolean is faster, shows directly what it is about, and the struct
does not even grow.

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/187
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Unify READV usages
Tobias Stoeckmann [Wed, 16 Oct 2024 14:46:00 +0000 (16:46 +0200)] 
libkmod: Unify READV usages

Do not assign variables which are not even used, but merely exist for
the READV macro to work.

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/187
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Use pread where appropriate
Tobias Stoeckmann [Thu, 17 Oct 2024 21:55:06 +0000 (23:55 +0200)] 
libkmod: Use pread where appropriate

Since we do not want to modify the current position in file, use pread
instead of read + lseek. Removes one lseek call per module, which for
depmod on Arch Linux means 6143 calls.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/189
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Fail if ELF cannot be stripped
Tobias Stoeckmann [Fri, 11 Oct 2024 13:37:14 +0000 (15:37 +0200)] 
libkmod: Fail if ELF cannot be stripped

Do not fall back to regular module operations, but keep going if data
which must be stripped is not available.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/176
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotestsuite: update "make rootfs" error message
Emil Velikov [Thu, 17 Oct 2024 17:02:38 +0000 (18:02 +0100)] 
testsuite: update "make rootfs" error message

We have added meson recently, with the goal to remove the make/autotools
one in a release or two. Update the reference to the meson equivalent.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotestsuite/README: update for meson, mention sanitizers
Emil Velikov [Thu, 17 Oct 2024 16:41:58 +0000 (17:41 +0100)] 
testsuite/README: update for meson, mention sanitizers

Mention that running outside of `meson test", one needs to set the env.
aka "source scripts/sanitizer-env.sh".

Also gently discourage using sanitizers alongside gdb and strace. While
thing might work it's not the setup we want to support, I think.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoci: sort the distribution listing
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
ci: sort the distribution listing

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoci: add clang permutation
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
ci: add clang permutation

With the clang issues resolved, let's add it to the CI matrix so fewer
issues get it.

Note: Fedora 40 doesn't ship the shared sanitizer library, while older
Fedora versions did. Fedora 41 will be coming with LLVM 19, which will
have the binary (seemingly with different name :facepalm:).

Let's leave the Fedora/clang infra in and just mask it out sanitizers
for the next month or so, until the new version comes out. Then we can
re-evaluate.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoAdd support for clang sanitizers
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
Add support for clang sanitizers

By default clang uses static sanitizer libraries, which causes build and
test-time failures. Swap for the shared libasan which resolves both.

Note: meson tries to be helpful here, throwing a warning that we should
use -D b_lundef=false which is incorrect in our case.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoEnable sanitizers in build-dev.ini
Emil Velikov [Thu, 17 Oct 2024 16:46:48 +0000 (17:46 +0100)] 
Enable sanitizers in build-dev.ini

With the sanitizers supported in both gcc + clang and all the issues
resolved, let's enable them via build-dev.ini.

This means, developers will see any issues OOTB without having to run
through the CI.

As a nice bonus, let's re-enable them for ubuntu:22.04 - it should be
working fine now.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoscripts/test-wrapper.sh: convert to sanitizer-env.sh
Emil Velikov [Thu, 17 Oct 2024 15:48:13 +0000 (16:48 +0100)] 
scripts/test-wrapper.sh: convert to sanitizer-env.sh

Convert the existing wrapper script, into one that we source to set the
environment aka LD_PRELOAD.

Thus a developer can, use/test/debug the tests without using meson.
Namely:
 - source scripts/sanitizer-env.sh
 - build/testsuite/test-depmod

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/172
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>