Commit Graph

1309 Commits

Author SHA1 Message Date
Seung-Woo Kim
39dd171623 libkmod-config: fix a memory leak when kmod_list_append() fails
From kmod_config_new(), when kmod_list_append() fails,
fix not list-appended kmod_config_path leak.

Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
2021-04-09 08:12:01 -07:00
Lucas De Marchi
8742be0aa5 libkmod-config: more chars allowed as space
Recently in a discussion I noticed that kernel allows more chars to be
considered as space in the kernel command line. Switch to the equivalent
of isspace() instead of considering only ' '.
2021-03-10 08:33:01 -08:00
Lucas De Marchi
d8b31c34a6 test-modprobe: share single function for kcmdline tests 2021-02-15 11:53:43 -08:00
Lucas De Marchi
b77251f08d testsuite: allow to re-use single function for tests
Add a new DEFINE_TEST_WITH_FUNC() that accepts the function
alongside the test name. This will allow us to share a single function
for different tests.
2021-02-15 11:53:43 -08:00
Lucas De Marchi
d3a1fe67b6 libkmod-config: re-quote option from kernel cmdline
It was reported that grub mangles the kernel cmdline. It turns

	acpi_cpufreq.dyndbg="file drivers/cpufreq/acpi-cpufreq.c +mpf"

	into

	"acpi_cpufreq.dyndbg=file drivers/cpufreq/acpi-cpufreq.c +mpf"

However, even though we could blame grub for doing that, the kernel
happily accepts and re-quotes it when the module is built-in.
So, it's better if kmod also understands it this way and does the same.

Here we basically add additional code to un-mangle it, moving the quote
in way that is acceptable to pass through init_module(). Note that the
interface [f]init_module() gives us mandates the quote to be part of the
value: the module name is not passed and the options are separated by
space.

Reported-by: Jiri Slaby <jirislaby@kernel.org>
Tested-by: Jessica Yu <jeyu@kernel.org>
Link: https://bugzilla.suse.com/show_bug.cgi?id=1181111#c10
2021-02-15 11:53:43 -08:00
Lucas De Marchi
01ed9af61e libkmod-config: revamp kcmdline parsing into a state machine
The handling of spaces and quotes is becoming hard to maintain. Convert
the parser into a state machine so we can check all the states. This
should make it easier to fix a corner case we have right now:
The kernel also accepts a quote before the module name instead of the
value. But this additional is left for later. This is purely an
algorithm change with no behavior change.

Tested-by: Jessica Yu <jeyu@kernel.org>
2021-02-15 11:53:38 -08:00
Lucas De Marchi
fd71604da9 testsuite: also test xz compression
Reviewed-by: Petr Vorel <pvorel@suse.cz>
2021-02-05 19:54:31 -08:00
Lucas De Marchi
1921c370c2 testsuite: compress modules if feature is enabled
Since the output needs to be the same, regardless if the module is
compressed, change populate-modules.sh to conditionally compress the
module if that feature is enabled.

This way we can execute the tests with any build-time configuration and
it should still pass.

Suggested-by: Michal Suchánek <msuchanek@suse.de>
Reviewed-by: Michal Suchánek <msuchanek@suse.de>
Tested-by: Michal Suchánek <msuchanek@suse.de>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
2021-02-05 19:52:00 -08:00
Dave Reisner
3cee67ddd7 populate-modules: Use more bash, more quotes
We're already using associatives arrays, so there's no reason we should
be using 'test'.
2021-01-23 11:06:15 -08:00
Lucas De Marchi
63fd63077d README: make github mirror official
For some time I've been maintaining a read-only mirror on github.
I think it's time to allow patches flowing from there besides the
mailing list: I created a new org to host the project:

	https://github.com/kmod-project/kmod
2021-01-20 18:52:53 -08:00
Lucas De Marchi
9319b0f4cb Support /usr/local for configuration files
Add /usr/local to the search path for configuration files. These are
intended for local installs, provided /usr/local is given as prefix.
2021-01-18 18:26:36 -08:00
Lucas De Marchi
1c10f32483 depmod: fix precedence order
Configuration in /etc should have higher prio than /run.
Given how rarely configuration in /run is used with depmod, this is
likely not to cause any problems, even if it's a change in behavior.
2021-01-18 18:26:36 -08:00
Lucas De Marchi
67e43bbe04 libkmod: Fix documentation on config precedence order
/etc is has higher priority than /run.
2021-01-18 18:26:36 -08:00
Marco d'Itri
fa67110f89 Fix "modinfo -F always shows name for built-ins"
Bug reported by Ben Hutchings <ben@decadent.org.uk>:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=970871

	Now that the kernel provides module information for potentially
	modular code that's actually built-in, it's possible to query these
	built-ins with "modinfo -F".  However, this doesn't work quite right:

	$ modinfo -Flicense e1000e
	GPL v2
	$ modinfo -Flicense bitrev
	name:           bitrev
	GPL
2021-01-07 20:17:48 -08:00
Lucas De Marchi
c3771eddcb README: remove leftover from semaphoreci
We are not currently using semaphoreci, so remove leftover status from
README.
2021-01-07 19:51:40 -08:00
Marius Bakke
847247a4a8 testsuite: Automatically skip tests that fail when sysconfdir != /etc. 2021-01-07 19:44:50 -08:00
Marius Bakke
b5683f45d9 testsuite: Add facility to skip tests.
The Makefile helpfully warns that some tests will fail when
--sysconfdir != /etc, but there are no provisions to easily disable
those.  This commit provides an escape hatch.

[ Lucas: add comment detailing the purpose of the field ]
2021-01-07 19:44:20 -08:00
Lucas De Marchi
1ccfe99428 kmod 28 2021-01-07 10:43:36 -08:00
Lucas De Marchi
d977b0daf4 build: add comment with rules for libtool version update 2021-01-07 10:27:49 -08:00
Lucas De Marchi
d83f488c60 build: fix distcheck due to missing zstd
Enable zstd since it's used in the testsuite.
2020-12-27 17:02:19 -08:00
Lucas De Marchi
30c9c4d90f testsuite: add test for empty modules.builtin.aliases.bin 2020-12-27 16:40:08 -08:00
Lucas De Marchi
e4a72e4754 shared: fix UNIQ definition
We need a macro indirection for UNIQ to work. Otherwise it won't be
unique at all since it will just append "UNIQ" to the name:

In file included from testsuite/test-init.c:30:

testsuite/testsuite.h:142:27: error: redefinition of ‘stest_load_resourcesUNIQ’
2020-12-27 16:40:08 -08:00
Lucas De Marchi
220b4c55ec depmod: unconditionally write builtin.alias.bin
The file is always created and unless we return an error, the temporary
file is renamed to its final destination. All other places write the
index without checking if the index is empty, so just do the same.

Reported-by: Joe Buehler <aspam@cox.net>
2020-12-27 16:40:08 -08:00
Lucas De Marchi
4bd8586c20 ci: remove semaphoreci
It's currently failing and we are already covered by travis-ci.
2020-12-03 19:34:28 -08:00
Lucas De Marchi
f9928f44ed ci: update travis distro
Don't bother with gcc 4.8 vs 4.9, just use the latest one for the
distro. Update travis to ubuntu 20.04 so we can get current
dependencies.
2020-12-03 19:34:04 -08:00
Shuo Wang
c72433254e NEWS: fix typo 2020-12-03 01:46:11 -08:00
Yauheni Kaliuta
95ed3e7536 libkmod: kmod_log_null: qualify ctx argument as const
kmod_log_null() does not change ctx (does nothing).

Fix warnings

In file included from libkmod/libkmod-index.c:33:
libkmod/libkmod-index.c: In function ‘index_mm_open’:
libkmod/libkmod-index.c:757:6: warning: passing argument 1 of ‘kmod_log_null’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  757 |  DBG(ctx, "file=%s\n", filename);

Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
2020-12-01 00:44:17 -08:00
Yauheni Kaliuta
bd96d05256 depmod: output_builtin_alias_bin: free idx on error path
idx is allocated in the beginning but it's not freed if there is
a failure after the allocation.

Change the error path: return immediately if idx allocation fails
and then free it in both success and error path at the end.

Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
2020-12-01 00:44:17 -08:00
Yauheni Kaliuta
47807c4cfa libkmod: kmod_builtin_get_modinfo: free modinfo on error
The function allocates array but on building it if get_string()
fails it returns the error leaving the array allocated. The caller
does not care about it in error case either.

Free it to fix memory leak.

Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
2020-12-01 00:44:17 -08:00
Samanta Navarro
2f38000256 man: fix typo 2020-10-19 09:12:53 -07:00
Torge Matthies
2e4ef3da55 testsuite: add test for zstd-compressed module
I took away one module from the gzip-compressed modules for this purpose.

Signed-off-by: Torge Matthies <openglfreak@googlemail.com>
2020-09-10 21:55:01 -07:00
Torge Matthies
3821e1971e add Zstandard compression support
I changed the style of the hackargs variable in autogen.sh to multiline
because said line was becoming a bit long with the new --with-zstd arg
added.

A previous version of this patch has been running on my two Arch Linux
installations (with an accompanying mkinitcpio patch) for several months
over many kernel updates without any issues.
Any additional testing and/or patch review would of course be appreciated.

Signed-off-by: Torge Matthies <openglfreak@googlemail.com>
2020-09-10 21:55:01 -07:00
Lucas De Marchi
f5434cf5fc testsuite: add check for kmod_load_resources
Make sure we can call kmod_load_resources when we do have all the
mandatory indexes in place.
2020-03-23 12:39:58 -07:00
Lucas De Marchi
d8d1d54051 libkmod: allow modules.alias.builtin to be optional 2020-03-23 12:37:51 -07:00
Lucas De Marchi
3bd7187ff5 libkmod: fix return error when opening index
When calling kmod_load_resources() we could end up getting a bogus
return value -ENOMEM due to several other reasons, like the index not
existing. Change index_mm_open() to propagate the failure reason so we
can take actions on it or return to the caller.
2020-03-23 12:37:40 -07:00
Lucas De Marchi
89443220e3 libkmod: simplify lookup when builtin.modinfo.bin file is missing
When we try to lookup a module and builtin.modinfo.bin is missing, we
would do the right thing because the caller was replacing the return
code with 0 (and the list was not modified).

Make it simpler by allowing the caller to check and differentiate the
errors between module not found and index not found.
2020-03-23 12:37:26 -07:00
Lucas De Marchi
53b30aeba2 depmod: do not output .bin to stdout
index_write() relies on fseek/ftell to manage the position to which we
are write and thus needs the file stream to support it.

Right now when trying to write the index to stdout we fail with:

	depmod: tools/depmod.c:416: index_write: Assertion `initial_offset >= 0' failed.
	Aborted (core dumped)

We have no interest in outputting our index to stdout, so just skip it
like is done with other indexes.

While at it, add/remove some newlines to improve readability.

Reported-by: Yanko Kaneti <yaneti@declera.com>
Fix: b866b2165a ("Lookup aliases in the modules.builtin.modinfo")
2020-03-13 09:23:58 -07:00
Lucas De Marchi
3c1073e17a testsuite: check for ill-formed kcmdline
Commit ca3bf5d47cec ("iommu/amd: Introduces ivrs_acpihid kernel parameter")
in the kernel introduced an ill-formed kernel parameter, ivrs_acpihid.
The problem is that it may have a dot on the key side:
"ivrs_acpihid[00:14.5]=AMD0020:0". This could potentially trip our
parser of module options, but right now it's working as intended: the
only thing that happens is that after deciding "ivrs_acpihid[00:14" is a
module name, it will fail the underscores() routine and the option will
be ignored from the kmod pov (not kernel's pov since that driver parsers
the kernel command line by itself).
2020-03-13 09:23:58 -07:00
Lucas De Marchi
0262531556 libkmod: ignore kcmdline option if we fail to parse modname
The error message is saying we are ignoring the option on the kernel
command line, so just do it.
2020-03-13 09:23:58 -07:00
Lucas De Marchi
8ea4f7c554 gitignore: ignore .cache.mk when building modules 2020-03-09 21:47:37 -07:00
Lucas De Marchi
9b003b6893 gitignore: ignore release files 2020-02-28 12:54:54 -08:00
Lucas De Marchi
819a125ca7 kmod 27 2020-02-18 15:54:07 -08:00
Lucas De Marchi
f975f6bfcc libkmod: reset was_space on second pass
The softdep config parser uses a 2-pass approach to use a single
allocation for all the softdep struct. However "was_space" variable
isn't reset between them. This can lead to a buffer overflow.

Reported-by: Jorge Lucangeli Obes <jorgelo@google.com>
Link: https://lore.kernel.org/linux-modules/CAKYuF5QhGCPCazHQjN-=kFc5kHs7Ok8WqmmGLo31CiOEN8TYdA@mail.gmail.com
2020-01-20 16:15:38 -03:00
Topi Miettinen
81dbf2bee6 libkmod-module: convert return value from system() to errno
Don't use exit status of a command directly as errno code, callers
will be confused.

Signed-off-by: Topi Miettinen <toiwoton@gmail.com>
2019-12-29 16:13:35 -08:00
Alexey Gladkov
e7e2cb61fa modinfo: Show information about built-in modules
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
2019-12-18 16:57:14 -08:00
Alexey Gladkov
b866b2165a Lookup aliases in the modules.builtin.modinfo
New modules.builtin.modinfo duplicates modules.builtin in the built-in
module name search. If it exists, then we can use this file, but if not,
then we need to fallback to the old file.

Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
2019-12-18 16:56:58 -08:00
Alexey Gladkov
73eed2aba3 libkmod: Add function to get list of built-in modules
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
2019-12-18 16:56:36 -08:00
Alexey Gladkov
60084cf1cb libkmod: Add parser for modules.builtin.modinfo
The kernel since version v5.2-rc1 exports information about built-in
modules in the modules.builtin.modinfo. Information is stored in
the same format as in the separate modules (null-terminated string
array). The module name is a prefix for each line.

$ tr '\0' '\n' < modules.builtin.modinfo
ext4.softdep=pre: crc32c
ext4.license=GPL
ext4.description=Fourth Extended Filesystem
ext4.author=Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
ext4.alias=fs-ext4
ext4.alias=ext3
ext4.alias=fs-ext3
ext4.alias=ext2
ext4.alias=fs-ext2
md_mod.alias=block-major-9-*
md_mod.alias=md
md_mod.description=MD RAID framework
md_mod.license=GPL
md_mod.parmtype=create_on_open:bool
md_mod.parmtype=start_dirty_degraded:int
...

Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
2019-12-18 16:56:10 -08:00
Fabrice Fontaine
8aa52bf238 Makefile.am: filter -Wl,--no-undefined
Commit 1d14ef82f4 does not completely fix
the build with python 3.8 as we still get link failure due to
'-z undefs' being ignored by some versions of ld.

Indeed, -z undefs was added by commit
97a232d7335f3bd0231fd9cd39455bde1d563922 in upstream binutils, and this
commit was first present in binutils 2.30.
So any toolchain using binutils version older than that won't have
-z undefs and will build fail on:

/home/buildroot/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mips-linux-gnu/5.3.0/../../../../mips-linux-gnu/bin/ld: warning: -z undefs ignored.

/home/naourr/work/instance-1/output-1/host/opt/ext-toolchain/bin/../lib/gcc/aarch64_be-linux-gnu/7.3.1/../../../../aarch64_be-linux-gnu/bin/ld: warning: -z undefs ignored.

So filter -Wl,--no-undefined to fix the issue

Fixes:
 - http://autobuild.buildroot.org/results/e9645d9969481b09f507f6e0d0b35faaa283eb60
 - http://autobuild.buildroot.org/results/06a6d865b6b7d8ebd793bde214f4a4c40e0962e1

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2019-11-18 15:30:26 -08:00
Lucas De Marchi
a6b540deaa modprobe: use flags rather than bool args
It's easier to know what the caller is doing when we pass a named
flag rather than a list of bools.
2019-11-07 09:46:51 -08:00