]> git.ipfire.org Git - thirdparty/kmod.git/log
thirdparty/kmod.git
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>
9 months agolibkmod: _printf_format_ annotate and adjust ELFDBG modifiers
Emil Velikov [Thu, 17 Oct 2024 18:17:25 +0000 (19:17 +0100)] 
libkmod: _printf_format_ annotate and adjust ELFDBG modifiers

The recently added "always build ELFDBG" patch is already paying
dividends... Clang is flagging a "fmt" is not literal warning.

That's clearly wrong, although without _printf_format_ clang was
struggling to figure things out. With the attribute, it helpfully
flagged that handful of the modifiers are wrong.

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 agoSwap rsync for cp --archive for module sources copying
Emil Velikov [Thu, 17 Oct 2024 20:30:08 +0000 (21:30 +0100)] 
Swap rsync for cp --archive for module sources copying

As Tobias reported, rsync is a bit of heavyweight dependency. We
introduced it, as a replacement for the rm/cp -r previously used.

The rsync was inspired since, unlike make, meson will build all the test
binaries/artefacts even without calling "meson test".

We can go back to cp with --archive (--preserve=timestamps at least),
which will ensure we don't get stale files. To ensure the second run
doesn't copy the source folder as _subfolder_ of the dest we need to
wildcard the copy... Plus we need a proper destination folder in the
first place.

With this, we get a no-op second+ builds - be that with meson or make.
Since the explicit always-dirty state is by design, drop the meson TODO
and document the output variable.

Confirmed by comparing both the `make --debug` output and the execution
times.

Reported-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/192
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomodinfo: Prevent undefined behavior with long keys
Tobias Stoeckmann [Wed, 16 Oct 2024 09:43:47 +0000 (11:43 +0200)] 
modinfo: Prevent undefined behavior with long keys

If a key is longer than INT_MAX, it is possible to trigger a signed
integer overflow. Since this overflow only occurs for formatting,
prevent it by checking if key is longer than 15 characters. If it is,
there is no need to add any more spacing anyway.

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/184
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomodinfo: Prevent out of boundary access
Tobias Stoeckmann [Wed, 16 Oct 2024 09:42:04 +0000 (11:42 +0200)] 
modinfo: Prevent out of boundary access

If a module file contains parameter strings longer than INT_MAX, it is
possible to trigger an out of boundary read with memcmp. Since such a
file is very likely broken or of malicious intent, just consider it
invalid and error out.

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/184
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Add another section size check
Tobias Stoeckmann [Tue, 15 Oct 2024 16:19:32 +0000 (18:19 +0200)] 
libkmod: Add another section size check

Make sure that section is actually large enough to hold a 32 bit value.

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/181
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoAlways define and use ENABLE_ELFDBG
Emil Velikov [Tue, 15 Oct 2024 19:36:50 +0000 (20:36 +0100)] 
Always define and use ENABLE_ELFDBG

Convert the "if defined FOO" pre-processor checks for compiler ones "if
(FOO == 1)".

This makes things easier to reason with and ensures both code-paths are
build-tested. In case, the option is disabled DCE will kick in (assuming
you're not force disabling all optimisations) and remove the respective
code.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/173
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoAlways define and use ENABLE_DEBUG
Emil Velikov [Tue, 15 Oct 2024 19:36:50 +0000 (20:36 +0100)] 
Always define and use ENABLE_DEBUG

Convert the "if defined FOO" pre-processor checks for compiler ones "if
(FOO == 1)".

This makes things easier to reason with and ensures both code-paths are
build-tested. In case, the option is disabled DCE will kick in (assuming
you're not force disabling all optimisations) and remove the respective
code.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/173
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoAlways define and use ENABLE_LOGGING
Emil Velikov [Tue, 15 Oct 2024 19:36:50 +0000 (20:36 +0100)] 
Always define and use ENABLE_LOGGING

Convert the "if defined FOO" pre-processor checks for compiler ones "if
(FOO == 1)".

This makes things easier to reason with and ensures both code-paths are
build-tested. In case, the option is disabled DCE will kick in (assuming
you're not force disabling all optimisations) and remove the respective
code.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/173
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: always include priority in log messages
Emil Velikov [Thu, 3 Oct 2024 16:22:43 +0000 (17:22 +0100)] 
libkmod: always include priority in log messages

One shouldn't need debug messages only to have the priority (emergency,
error, warning ...) properly logged.

With this the libkmod logger aligns with the custom one we use for kmod
tools. The latter was printing the priority since day one.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/173
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomodprobe: Fix error message
Tobias Stoeckmann [Wed, 16 Oct 2024 10:07:24 +0000 (12:07 +0200)] 
modprobe: Fix error message

We try to add from environment, not from command line.

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/185
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Simplify elf_strip_section
Tobias Stoeckmann [Tue, 15 Oct 2024 14:18:55 +0000 (16:18 +0200)] 
libkmod: Simplify elf_strip_section

It is always called with "__versions" as argument, so remove the
argument and rename function accordingly.

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/175
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Remove elf->changed
Tobias Stoeckmann [Fri, 11 Oct 2024 11:40:50 +0000 (13:40 +0200)] 
libkmod: Remove elf->changed

Keep changed ELF data only around as long as necessary. Otherwise it
can happen that subsequent module operations lead to unintuitive
results.

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/175
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotestsuite: fix gcc/libasan.so load order
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
testsuite: fix gcc/libasan.so load order

Currently we silence the ordering warning from libasan, via the
environment: ASAN_OPTIONS=verify_asan_link_order=0...

Instead we should be LD_PRELOAD-ing the library, since otherwise we
might end with miss-matched symbols - one coming from libasan, with the
counter part from the system library.

Plus LD_PRELOAD is the only way to make the clang sanitizers work...
That I have found. Although that's coming with a later patch.

v2:
 - handle when the file is a script

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/179
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotestsuite: preserve the existing LD_PRELOAD
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
testsuite: preserve the existing LD_PRELOAD

In order for the sanitisers to work correctly, we need to LD_PRELOAD the
sanitizer shared library.

So drop the explicit unset(LD_PRELOAD) and instead prepend the existing
value to the LD_PRELOAD path that we construct.

Const annotate the other LD_PRELOAD instance, while we're here.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/179
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoMove sanitizer details into a test wrapper
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
Move sanitizer details into a test wrapper

We want the meson test target to be self contained and having an
essential variables defined in the GitHub CI is heading the opposite
direction.

Create a wrapper that does this for us.

v2:
 - add the script to the autotools tarball/EXTRA_DIST

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/179
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoci: disable sanitizers for ubuntu 22.04
Emil Velikov [Tue, 15 Oct 2024 12:52:07 +0000 (13:52 +0100)] 
ci: disable sanitizers for ubuntu 22.04

It seems that the meson shipped with Ubuntu 22.04 is too old (buggy?) to
set the ASAN_OPTIONS and similar variables. Which means that we don't
have an easy way to detect if the sanitizers are enabled in the upcoming
test wrapper script.

The alternative is to grab newer meson, either via pip or otherwise.
Although considering we have decent coverage via the other distributions
it doesn't seem worth the hassle.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/179
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoci: re-run the test verbosely when on failure
Emil Velikov [Wed, 9 Oct 2024 16:28:32 +0000 (17:28 +0100)] 
ci: re-run the test verbosely when on failure

This will provide us the test log, without having to fiddle with upload
actions. Which is particularly funky since:
 - v4 requires distinct names
 - symbols like : (as in our container name) are not supported

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/179
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: remove no longer used HAVE_DECL___GLIBC__
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
meson: remove no longer used HAVE_DECL___GLIBC__

Earlier commit removed the final user, drop the autotools define yet
forgot the meson one.

Fixes: 0766f541 ("build: check for __xstat declarations")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/179
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoAvoid adding zero to a NULL pointer
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
Avoid adding zero to a NULL pointer

Adding zero to a NULL pointer is undefined behaviour, which is getting
clarified with C23 (or just after) to match our current usage.

With clang 18, this triggers the undefined behaviour sanitizer so add a
check to stay compliant.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/180
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoman/insmod: Fix style
Tobias Stoeckmann [Wed, 16 Oct 2024 08:52:28 +0000 (10:52 +0200)] 
man/insmod: Fix style

Add missing newline for better formatting and to stay in sync with other
options.

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/182
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agobuild: add builtin overflow checks to configure.ac
Tobias Stoeckmann [Wed, 16 Oct 2024 09:14:40 +0000 (11:14 +0200)] 
build: add builtin overflow checks to configure.ac

Without these, the build becomes quite noisy and doesn't add builtin
functions even though they exist.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/183
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoman/insmod: minor cosmetic changes
Emil Velikov [Fri, 11 Oct 2024 15:21:42 +0000 (16:21 +0100)] 
man/insmod: minor cosmetic changes

Namely: drop the ellipsis from the man page, to align with --help.

Properly bold modprobe, without the leading space... A reminder from the
xml days.

Reference: https://lore.kernel.org/linux-modules/ZvknyLKvQeBo16n9@meinfjell.helgefjelltest.de
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/177
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoman: remove erroneous " in BUGS section
Emil Velikov [Fri, 11 Oct 2024 15:19:24 +0000 (16:19 +0100)] 
man: remove erroneous " in BUGS section

A silly copy/paste mistake by yours truly (-:

Fixes: ecedc689 ("man: add BUGS section with basic information")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/177
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoman/rmmod: document (how) we handle list of modules
Emil Velikov [Wed, 9 Oct 2024 10:39:52 +0000 (11:39 +0100)] 
man/rmmod: document (how) we handle list of modules

Mention in the help and docs that rmmod operates on list of modules,
alongside its current mode of operation.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/177
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/depmod: avoid casting symbol_free() function type
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
tools/depmod: avoid casting symbol_free() function type

With clang 17, -fsanitize=function is enabled alongside any other
sanitizers. Which flags undefined behaviour, since the function type
(argument type really) is not compatible.

Reference: https://reviews.llvm.org/D148827#4422631
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/180
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: used unsigned type for INDEX_CHILDMAX and co
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
libkmod: used unsigned type for INDEX_CHILDMAX and co

Currently the define is an signed int of 128, which we store in a char
triggering a clang warning. This is expected since the sign of char is
platform specific.

Convert the macro to unsigned and the respective variables to unsigned
char, alongside the documentation comment.

With that done, adjust the first/last checks so we don't get
tautological-compare warnings from clang.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/180
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/rmmod: rework control flow
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
tools/rmmod: rework control flow

Currently the control flow we use is a bit tricky:

 - we use a goto within a loop, to avoid one function call
 - we increment r, assuming it cannot wrap around

In practise these are not bugs, although make the code more convoluted
than needed. While in here, scope the local err to where it's used.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/180
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/insmod: use single control variable
Emil Velikov [Wed, 9 Oct 2024 15:26:25 +0000 (16:26 +0100)] 
tools/insmod: use single control variable

Currently we're returning success, if any of the pre libkmod checks
fail. That's because err is our local variable, while r is the (exit)
resutlt. In practise we don't need the distinction, so just drop the
former.

Reported by clang.

Fixes: ca8f04e8 ("tools/insmod: add syslog and verbose options")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/180
[ add blank lines, remove extra braces ]
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agomeson: set ENABLE_{LOGGING,DEBUG} only as needed
Emil Velikov [Thu, 3 Oct 2024 16:22:43 +0000 (17:22 +0100)] 
meson: set ENABLE_{LOGGING,DEBUG} only as needed

With the introduction of the meson build, both ENABLE_LOGGING and
ENABLE_DEBUG have always been set - 1 or 0. Whereas the code relies on
them being set or unset.

Adjust the build accordingly.

Fixes: 370141c1 ("meson: introduce meson, covering libkmod.so")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/173
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoIntroduce and use u{add,mul}sz_overflow() helpers
Emil Velikov [Mon, 30 Sep 2024 21:11:40 +0000 (22:11 +0100)] 
Introduce and use u{add,mul}sz_overflow() helpers

Instead of doing things manually add a few helpers and use them. As a
bonus point, fix the potential overflow in kmod_elf_get_strings().

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/169
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoshared: introduce umul{32,64}_overflow() helpers
Emil Velikov [Mon, 30 Sep 2024 20:35:18 +0000 (21:35 +0100)] 
shared: introduce umul{32,64}_overflow() helpers

We'll use them to implement the size_t variant.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/169
[ Fixup commit message for renamed functions ]
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoshared: introduce uadd32_overflow() helper
Emil Velikov [Mon, 30 Sep 2024 20:06:14 +0000 (21:06 +0100)] 
shared: introduce uadd32_overflow() helper

We'll use it in the upcoming size_t variant.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/169
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoshared: s/addu64_overflow/uadd64_overflow/g
Emil Velikov [Mon, 30 Sep 2024 21:36:29 +0000 (22:36 +0100)] 
shared: s/addu64_overflow/uadd64_overflow/g

Rename the helper closer to the actual built-in.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/169
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoshared: tweak addu64_overflow() #if/else chain
Emil Velikov [Mon, 30 Sep 2024 19:52:18 +0000 (20:52 +0100)] 
shared: tweak addu64_overflow() #if/else chain

Group the checks as applicable - require the long variant when
sizeof(long) == 8, or the long long one as sizeof(long long) == 8.

Ultimately, fold fallback in the #else path, since it's dead code atm
and seemingly confuses tools such as Coverity.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/169
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: call fnmatch() only as needed
Emil Velikov [Tue, 8 Oct 2024 17:04:34 +0000 (18:04 +0100)] 
libkmod: call fnmatch() only as needed

Currently we'll call the function even when the patterns is an empty
string.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/174
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: use strbuf_pushchars() where possible
Emil Velikov [Tue, 8 Oct 2024 17:04:34 +0000 (18:04 +0100)] 
libkmod: use strbuf_pushchars() where possible

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/174
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotestsuite/test-strbuf: use const char * for strbuf_str()
Emil Velikov [Tue, 8 Oct 2024 17:04:34 +0000 (18:04 +0100)] 
testsuite/test-strbuf: use const char * for strbuf_str()

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/174
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoci/actions: LC_ALL=C sort the packages
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
ci/actions: LC_ALL=C sort the packages

I'm about to add some more and the current (almost sorted) state breaks
my brain :-x

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: directly use archlinux:multilib-devel container
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
ci: directly use archlinux:multilib-devel container

There was some recent snafu which meant the container wasn't available.
With that resolved, we can drop our hack and use the correct container
directly.

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 agolibkmod: silence autological compare warning
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
libkmod: silence autological compare warning

Clang will detect that the enum cannot be zero, thus triggering a
warning. Since this is an external (public API) function, the end-user
can provide any input so we want to keep the check.

Note: include the pragmas in a if defined(__clang__) guard, otherwise
we'll trigger -Wunknown_pragma which will become an error in CI and
developer builds.

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 agotools/depmod: cast variable in DBG() statement
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
tools/depmod: cast variable in DBG() statement

Older versions of clang (14.0.0 as seen in Ubuntu 22.04) will flag a
warning that we're using unsigned int, with a unsigned char modifier.

Newer versions like 16.0.6 (Debian unstable), 17.0.6 (Alpine), etc do
not flag this as an issue.

In practise the number fits in the latter range, so just add a cast to
silence the warning.

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 agotools/lsmod: initialize use_syslog
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
tools/lsmod: initialize use_syslog

Initialize the variable, otherwise we'll get (random) stack value if the
user hasn't provided --syslog. Reported by scan-build.

Fixes: 6313d40d ("tools/lsmod: add basic opts like rmmod")
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 agotools/rmmod: initialize use_syslog
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
tools/rmmod: initialize use_syslog

Initialize the variable, otherwise we'll get (random) stack value if the
user hasn't provided --syslog. Reported by scan-build.

Fixes: 24fe68dc ("tools/rmmod: make opt variables non-global")
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 agotools/insmod: initialize use_syslog
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
tools/insmod: initialize use_syslog

Initialize the variable, otherwise we'll get (random) stack value if the
user hasn't provided --syslog. Reported by scan-build.

Fixes: ca8f04e8 ("tools/insmod: add syslog and verbose options")
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 agoshared: add missing stddef.h include
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
shared: add missing stddef.h include

Required for size_t, reported by clang-tidy.

Fixes: 38943b20 ("shared: use size_t for strbuf")
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 agotools: add missing stdio.h include
Emil Velikov [Thu, 3 Oct 2024 16:02:45 +0000 (17:02 +0100)] 
tools: add missing stdio.h include

Required for puts(), reported by clang-tidy.

Fixes: b644b8d7 ("tools: add kmod_version() helper")
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 agoman: list short/long opt on same line
Emil Velikov [Thu, 3 Oct 2024 15:46:00 +0000 (16:46 +0100)] 
man: list short/long opt on same line

With earlier commit, I attempted to keep them on separate lines for
somewhat dubious reasons. In practise that didn't work and they stayed
on the same line, while also dropping the separating comma.

Looking back, it would be better to fix the vim manpager mode issues
rather than mask it. Mea culpa

Effectively this reverts commit e7626810fd0f34db2c205b86ff6ad6cf42794fa7

Reference: https://lore.kernel.org/linux-modules/ZvknyLKvQeBo16n9@meinfjell.helgefjelltest.de
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/164
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoman: add BUGS section with basic information
Emil Velikov [Mon, 30 Sep 2024 13:31:37 +0000 (14:31 +0100)] 
man: add BUGS section with basic information

Link the issue tracker and recommend providing reproducer/expectations
in the bug report.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/164
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agotools/insmod: args -> module options
Emil Velikov [Mon, 30 Sep 2024 13:23:13 +0000 (14:23 +0100)] 
tools/insmod: args -> module options

Align the help message with the manual page, swapping the ambiguous
"args" with module options.

Reference: https://lore.kernel.org/linux-modules/ZvknyLKvQeBo16n9@meinfjell.helgefjelltest.de
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/164
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agoman: few manpage-l10n inspired suggestions
Emil Velikov [Mon, 30 Sep 2024 13:18:46 +0000 (14:18 +0100)] 
man: few manpage-l10n inspired suggestions

Address a couple of stylistic (missing comma, manpage #, italic) issues,
reported by manpage-l10n project.

Reference: https://lore.kernel.org/linux-modules/ZvknyLKvQeBo16n9@meinfjell.helgefjelltest.de
Reported-by: Helge Kreutzmann <debian@helgefjell.de>
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/164
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: unref in kmod_module_new_from_path() error path
Emil Velikov [Thu, 3 Oct 2024 15:27:37 +0000 (16:27 +0100)] 
libkmod: unref in  kmod_module_new_from_path() error path

Preserve the original behaviour, where the module refcount stays the
same, if the function fails.

Fixes: e19338da ("libkmod: Avoid redundant kmod_pool_get_module call")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/171
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
9 months agolibkmod: Check child range in memory mapped index
Tobias Stoeckmann [Mon, 30 Sep 2024 17:20:33 +0000 (19:20 +0200)] 
libkmod: Check child range in memory mapped index

If value of "first" is negative, then a broken index can trigger a stack
based buffer overflow, because child_count could become larger than
INDEX_CHILDMAX.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/167
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Avoid redundant kmod_pool_get_module call
Tobias Stoeckmann [Mon, 30 Sep 2024 18:27:49 +0000 (20:27 +0200)] 
libkmod: Avoid redundant kmod_pool_get_module call

Before kmod_module_new_from_path creates a module with kmod_module_new,
it checks with kmod_pool_get_module if a module with given name already
exists.

This check can be removed, because kmod_module_new does the same. If the
module already existed, the same checks are performed as in current code
for the "if (m != NULL)" case. If it did not exist yet, m->path is NULL
and the first if-block is entered.

And since kmod_module_new takes care of incrementing the reference
counter, the explicit call of kmod_module_ref can be removed from
kmod_module_new_from_path as well.

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/168
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Clarify the meaning of char array "alias"
Tobias Stoeckmann [Mon, 30 Sep 2024 16:54:54 +0000 (18:54 +0200)] 
depmod: Clarify the meaning of char array "alias"

It is meant as a backing buffer for scratch buffer. Do not use it
directly when constructing strings.

Co-authored-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/166
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Actually use scratch buffer memory
Tobias Stoeckmann [Mon, 30 Sep 2024 16:27:13 +0000 (18:27 +0200)] 
depmod: Actually use scratch buffer memory

Accessing the backing "alias" char buffer directly works only as long as
all symbols are smaller than 1024, because otherwise the scratch buffer
allocates memory and the addresses do not match anymore.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/166
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Fix typos
Tobias Stoeckmann [Tue, 24 Sep 2024 20:39:21 +0000 (22:39 +0200)] 
libkmod: Fix typos

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/152
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: check strbuf return values
Tobias Stoeckmann [Tue, 24 Sep 2024 18:56:40 +0000 (20:56 +0200)] 
libkmod: check strbuf return values

The strbuf functions may fail, so handle errors. Make especially sure
that push and pop operations stay in sync.

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/152
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: store index value lengths as size_t
Tobias Stoeckmann [Tue, 24 Sep 2024 18:55:20 +0000 (20:55 +0200)] 
libkmod: store index value lengths as size_t

The unsigned int data type might be too small on 64 bit systems and
when encountering huge and illegal index files.

Since lengths are retrieved from strbuf structs, this also keeps
the data type lengths in sync.

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/152
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Check amount of memories
Tobias Stoeckmann [Mon, 30 Sep 2024 15:05:23 +0000 (17:05 +0200)] 
depmod: Check amount of memories

The code does not support 65535 or more modules. Since this value is
probably never reached, add a proper check after array building and
do not rely solely on an assert later in code path.

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/158
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Support modules.order with duplicate lines
Tobias Stoeckmann [Sun, 29 Sep 2024 19:29:56 +0000 (21:29 +0200)] 
depmod: Support modules.order with duplicate lines

If the same line exists multiple times in modules.order, consider only
the first, since this is the earliest position requested.

This also makes sure that index iterator never turns positive or would
ever trigger a signed integer overflow.

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/158
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Read modules.order only once
Tobias Stoeckmann [Fri, 27 Sep 2024 20:17:36 +0000 (22:17 +0200)] 
depmod: Read modules.order only once

The current code iterates through modules.order twice. First, it
figures out how many lines exist. Then it iterates again to make
sure that the first line has the lowest sort index, then ascending.

Negative values make sure that the previously assigned positive
values will be larger, i.e. modules in modules.order take precedence,
then modules found in file system which were not listed in
modules.order.

This can be simplified by setting the initial sort index value to
the lowest possible value needed, i.e. -depmod->modules.count.

With this value, it is possible to iterate only once.

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/158
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Check memdup return value
Tobias Stoeckmann [Fri, 27 Sep 2024 20:17:11 +0000 (22:17 +0200)] 
depmod: Check memdup return value

If memdup fails, handle out of memory condition.

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/158
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Use memdup
Tobias Stoeckmann [Fri, 27 Sep 2024 20:15:59 +0000 (22:15 +0200)] 
depmod: Use memdup

No need to clear newly allocated memory if source is copied into
destination directly.

Simplify code by using memdup from shared.

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/158
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agodepmod: Fix typo in comment
Tobias Stoeckmann [Fri, 27 Sep 2024 19:32:43 +0000 (21:32 +0200)] 
depmod: Fix typo in comment

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/158
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoci: enable sanitizers in the meson build
Emil Velikov [Sat, 28 Sep 2024 13:12:26 +0000 (14:12 +0100)] 
ci: enable sanitizers in the meson build

... to prevent a range of issues creeping in.

Currently ASAN reports an ordering issue that we need to explicitly
disable. Thus the sanitizers are only enabled in CI and not for all
developer builds (aka build-dev.ini).

Seemingly musl lacks the sanitizers, so we don't enable it on Alpine.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/160
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoshared: Fix EOF handling in freadline_wrapped
Tobias Stoeckmann [Fri, 27 Sep 2024 19:52:27 +0000 (21:52 +0200)] 
shared: Fix EOF handling in freadline_wrapped

If a file ends with a backslash without a newline, freadline_wrapped
adds EOF to the actual string.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/159
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotestsuite: Fix test-weakdep with autoconf defaults
Tobias Stoeckmann [Fri, 27 Sep 2024 19:26:40 +0000 (21:26 +0200)] 
testsuite: Fix test-weakdep with autoconf defaults

If ./configure is run without any further options, then /usr/etc
is used as SYSCONFDIR, which breaks test-weakdep, because the
/etc path is hardcoded in it.

Use SYSCONFDIR to reflect the actual rootfs setup.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/157
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotestsuite: Adjust README
Tobias Stoeckmann [Fri, 27 Sep 2024 19:25:20 +0000 (21:25 +0200)] 
testsuite: Adjust README

The populate-modules.sh does no longer exist. Also mention that the
script setup-rootfs.sh is in use for test suite setups.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Link: https://github.com/kmod-project/kmod/pull/157
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agomodinfo: Avoid unneeded system call
Tobias Stoeckmann [Tue, 24 Sep 2024 20:37:26 +0000 (22:37 +0200)] 
modinfo: Avoid unneeded system call

If a file name does not end with ".ko", there is no need to call fstat.
Since common use cases are like "modinfo modname", the string check
should come first to save a tiny amount of system time.

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/154
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoman: Fix typo
Tobias Stoeckmann [Thu, 26 Sep 2024 22:36:22 +0000 (00:36 +0200)] 
man: Fix typo

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/156
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Plug memory leak on error path
Tobias Stoeckmann [Tue, 24 Sep 2024 19:30:13 +0000 (21:30 +0200)] 
libkmod: Plug memory leak on error path

Fix memory leak on error path introduced with read_u32 error 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/153
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoci: add more SPDX copyright/license identifiers
Emil Velikov [Mon, 23 Sep 2024 20:51:05 +0000 (21:51 +0100)] 
ci: add more SPDX copyright/license identifiers

This concludes the files, I'm planning to reuse in usbutils so I'll stop
before it gets too annoying :-D

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/151
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Avoid OOB with huge ELF files
Tobias Stoeckmann [Mon, 23 Sep 2024 19:22:00 +0000 (21:22 +0200)] 
libkmod: Avoid OOB with huge ELF files

On 32 bit systems it is possible to trigger an out of boundary write
with excessively huge ELF files.

The calculation of required memory for char pointer vector and strings
might overflow, leading to an allocation which is too small. Subsequent
memcpy leads to an out of boundary write.

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/149
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Fix typo
Tobias Stoeckmann [Mon, 23 Sep 2024 18:32:53 +0000 (20:32 +0200)] 
libkmod: Fix typo

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/148
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Fix ELFDBG usage
Tobias Stoeckmann [Mon, 23 Sep 2024 17:57:15 +0000 (19:57 +0200)] 
libkmod: Fix ELFDBG usage

The first parameter has to be a 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/148
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoci: add clang-format action
Emil Velikov [Sun, 8 Sep 2024 10:38:13 +0000 (11:38 +0100)] 
ci: add clang-format action

To keep the style consistent.

Closes: https://github.com/kmod-project/kmod/issues/88
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/118
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotools: mass convert with clang-format
Emil Velikov [Wed, 11 Sep 2024 16:30:40 +0000 (17:30 +0100)] 
tools: mass convert with clang-format

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/118
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotestsuite: mass convert with clang-format
Emil Velikov [Wed, 11 Sep 2024 16:30:32 +0000 (17:30 +0100)] 
testsuite: mass convert with clang-format

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/118
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoshared: mass convert with clang-format
Emil Velikov [Wed, 11 Sep 2024 16:30:21 +0000 (17:30 +0100)] 
shared: mass convert with clang-format

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/118
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: mass convert with clang-format
Emil Velikov [Wed, 11 Sep 2024 16:30:13 +0000 (17:30 +0100)] 
libkmod: mass convert with clang-format

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/118
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoci: do monthly dependabot runs
Emil Velikov [Mon, 23 Sep 2024 20:40:53 +0000 (21:40 +0100)] 
ci: do monthly dependabot runs

The CodeQL action is getting 1-2 releases every week with only a handful
of changes in each.

This is getting a bit too much, so let's change to monthly checks.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/150
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: Avoid misaligned memory accesses
Tobias Stoeckmann [Wed, 18 Sep 2024 19:47:48 +0000 (21:47 +0200)] 
libkmod: Avoid misaligned memory accesses

ASAN incorrectly reports this as unaligned access if compiler
optimizes code. Since ASAN support is valued higher than this
kind of optimization, just copy these few bytes into a stack
variable and avoid false positives in tests.

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/147
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: use bufferless zstd decompression
Emil Velikov [Thu, 19 Sep 2024 12:14:58 +0000 (13:14 +0100)] 
libkmod: use bufferless zstd decompression

Unlike the other two decompressions, zstd supports streaming bufferless
mode. Meaning we don't need to read and realloc in a loop.

Some strace numbers:

        $ strace -e read ./before/depmod -o /tmp/throaway | wc -l
        35265
        $ strace -e fstat ./before/depmod -o /tmp/throaway | wc -l
        1110

        $ strace -e read ./after/depmod -o /tmp/throaway | wc -l
        5677
        $ strace -e fstat ./after/depmod -o /tmp/throaway | wc -l
        6642

.. and valgrind total heap usage statistics:
        before:
        1,039,426 allocs, 1,039,426 frees, 3,679,232,922 bytes allocated

        after:
        1,020,643 allocs, 1,020,643 frees, 1,157,922,357 bytes allocated

The actual runtime is within the error margin.

v2:
 - use ZSTD_decompress(), which allocates ZSTD_DCtx internally

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/142
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotools: Check snprintf return value
Tobias Stoeckmann [Wed, 14 Aug 2024 15:50:34 +0000 (17:50 +0200)] 
tools: Check snprintf return value

If an excessively large root directory is supplied, subsequent
operations might process unexpected parts in file system.

Inform user that supplied directory paths are too long and stop
program execution.

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/72
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agolibkmod: refactor builtin module handling
Tobias Stoeckmann [Tue, 17 Sep 2024 17:59:39 +0000 (19:59 +0200)] 
libkmod: refactor builtin module handling

Remove arbitrary limits due to file sizes (INTPR_MAX check). Reduce
amount of system calls by up to 90 % utilizing stream functions.

Also make sure that no TOCTOU could ever happen by not iterating
through the file twice: First to figure out amount of strings, then
parsing them. If the file changes in between, this can lead to
memory corruption.

Even though more memory allocations might occur due to strbuf usage,
performance generally increased by heavy reduction of system 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/136
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotestsuite: add builtin test for modinfo
Tobias Stoeckmann [Tue, 17 Sep 2024 17:58:53 +0000 (19:58 +0200)] 
testsuite: add builtin test for modinfo

The modinfo command can show information about builtin modules. Make
sure that it functions correctly.

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/136
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agotestsuite: sort modnames only, if available
Emil Velikov [Thu, 19 Sep 2024 14:50:21 +0000 (15:50 +0100)] 
testsuite: sort modnames only, if available

In some tests we expect zero modules to be loaded. In those cases, skip
the sorting - qsort is annotated as non-null(1,2) so we shouldn't
provide null as expected/loaded modules.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/144
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoci: add SPDX copyright/license identifiers
Emil Velikov [Sun, 22 Sep 2024 11:52:42 +0000 (12:52 +0100)] 
ci: add SPDX copyright/license identifiers

To make it clear and explicit on the topic. Inspired by me reusing some
of those for usbutils and reuse-tool [1] flagging the lack of proper
attribution.

[1] https://github.com/fsfe/reuse-tool

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/145
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoshell-completion/*/insmod: add bash/fish/zsh completion
Emil Velikov [Wed, 18 Sep 2024 15:49:08 +0000 (16:49 +0100)] 
shell-completion/*/insmod: add bash/fish/zsh completion

A few inline todos and some odd fish behaviour as mentioned inline.
Otherwise things just work :-)

v2:
 - use e(x)clusive answers for fish, tweak force string

v3:
 - wire the completions to the autotools build

v4:
 - use SPDX style copyright statements

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/138
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoshell-completion/*/rmmod: add bash/fish/zsh completion
Emil Velikov [Wed, 18 Sep 2024 15:49:08 +0000 (16:49 +0100)] 
shell-completion/*/rmmod: add bash/fish/zsh completion

v2:
 - use e(x)clusive answers for fish, tweak force string

v3:
 - wire the completions to the autotools build

v4:
 - use SPDX style copyright statements

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/138
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
10 months agoshell-completion/*/lsmod: add bash/fish/zsh completion
Emil Velikov [Wed, 18 Sep 2024 15:49:08 +0000 (16:49 +0100)] 
shell-completion/*/lsmod: add bash/fish/zsh completion

Note that completions are explicitly aimed to be simple, depending on as
little as possible shell specific helpers.

The goal is that people unfamiliar with these can extend them with zero
ramp-up. Doing things efficiently or "properly" is somewhat secondary.

v2:
 - wire the completions to the autotools build

v3:
 - use SPDX style copyright statements

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