summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-04-06modprobe: Make rmmod_do_module() contain all the removal sequenceLucas De Marchi1-15/+22
Move the remaining part of the removal sequence dangling in rmmod_do_remove_module() to rmmod_do_module() so we can consider this function is the one controlling all the module removals. While at it, add some comments about the removal order and normalize coding style in this function. Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-04-06modprobe: move check for remove_holders to callerLucas De Marchi1-2/+4
Do not mix the flags with and additional boolean from arguments. Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-04-06modprobe: Fix holders removalLucas De Marchi1-8/+10
The idea behind --remove-dependencies was to remove other modules that depend on the current module being removed. It's the reverse dependency list, not the dependency list of the current module: that never works since the current module would still hold a ref on it. Fix it by replacing the call to kmod_module_get_dependencies() with kmod_module_get_holders() when using that option. Also try to cleanup the confusion by renaming the option to --remove-holders: "holder" is the name used in sysfs and by libkmod to refer to a "live" reverse dependency like what we are interested in. Before: ./tools/modprobe -D -r --remove-dependencies video rmmod video After: ./tools/modprobe -D -r --remove-holders video rmmod i915 rmmod thinkpad_acpi rmmod video Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-04-04modprobe: remove unneeded variable str_startMasahiro Yamada1-3/+3
The variable 'str_start' is not useful here. Replace it with 'str'. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
2022-04-04modprobe: fix the NULL-termination of new_argvMasahiro Yamada1-1/+1
The number of new arguments is (i + argc - 1) as it is set to *p_argc one line below. The correct location of NULL termination is new_argv[i + argc - 1]. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
2022-04-01depmod: Add support for excluding a directorySaul Wold2-4/+76
This adds support to depmod to enable a new exclude directive in the depmod.d/*.conf configuration file. Currently depmod already excludes directories named source or build. This change will allow additional directories like .debug to be excluded also via a new exclude directive. depmod.d/exclude.conf example: exclude .debug Signed-off-by: Saul Wold <saul.wold@windriver.com> [ Fix warnings and make should_exclude_dir() return bool ] Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
2022-04-01modprobe: Rename rmmod_do_deps_listLucas De Marchi1-4/+5
It's used not only for dependencies, but also for pre and post softdep. Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-03-03docs: Add missing functions to documentationLucas De Marchi1-0/+2
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
2022-02-23libkmod: Fix use of sizeof instead of ARRAY_SIZELucas De Marchi1-2/+2
Link: https://github.com/kmod-project/kmod/issues/12 Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
2022-02-20modinfo: Allow to force arg as module nameLucas De Marchi1-2/+28
If the Linux kernel or userspace sets an alias with the same name as a module, they force the tools to use that. However in some situations it may be desired to query the module itself. Getting the module information through modinfo is one such situation. So, add a option to modinfo to explicitly instruct it to handle the argument as a module name. Example, when trying to output information about the crc32 module that is builtin: $ modinfo crc32 filename: /lib/modules/5.15.19-1-MANJARO/kernel/arch/x86/crypto/crc32-pclmul.ko.zst alias: crypto-crc32-pclmul alias: crc32-pclmul alias: crypto-crc32 alias: crc32 license: GPL author: Alexander Boyko <alexander_boyko@xyratex.com> srcversion: B6B2FF9236731E69418A2E5 alias: cpu:type:x86,ven*fam*mod*:feature:*0081* depends: retpoline: Y intree: Y name: crc32_pclmul vermagic: 5.15.19-1-MANJARO SMP preempt mod_unload sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 77:FB:AA:BD:48:78:A4:C6:56:18:9A:7E:A6:F3:29:3E:C5:6B:E9:37 sig_hashalgo: sha512 signature: 30:65:02:31:00:B0:D4:49:9D:1D:F1:71:4C:3C:BB:70:B2:3E:46:5D: 38:5A:F1:00:95:FD:7A:96:C4:2C:24:35:A2:1B:0B:A8:1C:29:6F:02: 7A:68:EE:BA:A4:1C:01:4B:86:39:15:3E:66:02:30:7F:7A:66:5E:F2: 2F:98:73:3D:AD:96:66:81:8B:94:6E:F3:3F:44:0F:85:E1:73:3A:9E: F9:C4:BE:9B:88:02:BD:83:04:B9:2E:72:0B:93:BC:82:B6:A1:1B:6A: C2:ED:8C filename: /lib/modules/5.15.19-1-MANJARO/kernel/crypto/crc32_generic.ko.zst alias: crypto-crc32-generic alias: crc32-generic alias: crypto-crc32 alias: crc32 license: GPL description: CRC32 calculations wrapper for lib/crc32 author: Alexander Boyko <alexander_boyko@xyratex.com> srcversion: F08036C38DDB06BCD1E6091 depends: retpoline: Y intree: Y name: crc32_generic vermagic: 5.15.19-1-MANJARO SMP preempt mod_unload sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 77:FB:AA:BD:48:78:A4:C6:56:18:9A:7E:A6:F3:29:3E:C5:6B:E9:37 sig_hashalgo: sha512 signature: 30:65:02:31:00:E3:9E:C8:80:15:0E:D7:74:96:B5:25:EA:32:F7:DF: E9:FC:3C:82:D9:B9:B9:37:C5:20:8D:06:31:02:62:B3:54:E8:DF:F2: 7E:E2:7C:A4:CF:49:17:CB:75:DF:2C:7A:2F:02:30:25:DE:7C:2A:2C: 97:3F:65:16:76:B3:71:FB:62:DB:8F:F3:33:65:77:98:F3:57:ED:D7: 87:78:FF:C2:04:55:70:00:10:63:1E:B2:FE:22:D8:E5:6D:5F:95:4E: 7D:2C:6B That is because the Linux kernel exports "crc32" as an alias to those modules, besides being a module itself: $ grep crc32 /lib/modules/$(uname -r)/modules.builtin kernel/lib/crc32.ko $ $ grep "alias crc32 " /lib/modules/$(uname -r)/modules.alias alias crc32 crc32_pclmul alias crc32 crc32_generic With the new -m|--modname option it's possible to query the information about this (builtin) module explicitly: $ modinfo --modname crc32 name: crc32 filename: (builtin) license: GPL file: lib/crc32 description: Various CRC32 calculations author: Matt Domsch <Matt_Domsch@dell.com> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20modinfo: Update help message with "modulename"Lucas De Marchi1-1/+1
man page correctly states the a module name can be used in place of a file name: modinfo [-0] [-F field] [-k kernel] [modulename|filename...] Update the help message accordingly. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20libkmod: Add lookup from module nameLucas De Marchi3-0/+61
Slightly different than kmod_module_new_from_lookup(): it doesn't consider aliases, only module names. This is useful for cases we want to force a tool to handle something as the module name, without trying to interpret it as an alias. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20libkmod: Update docs about indexes orderLucas De Marchi1-1/+1
New indexes were created without updating the documentation about the order in kmod_module_new_from_lookup(). Add them to the documentation. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20libkmod: Add helper function to iterate lookup optionsLucas De Marchi1-45/+37
The CHECK_ERR_AND_FINISH macro with conditional code flow changes has been a source of bugs. Get rid of it replacing with a helper function to iterate an array of lookup functions. This helper may also be useful in future to create different lookup APIs in libkmod. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20gitignore: ignore gtk-doc.makeLucas De Marchi1-0/+1
Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20libkmod-module: Fix return code for kmod_module_new_from_lookup()Lucas De Marchi1-2/+2
When kmod_module_new_from_lookup() resolves to an alias, `err` will be set to a positive value from the lookup function. Do not return a positive value to follow the behavior when it matches a module name and the documentation. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-20test-initstate: Check for negative value on errorLucas De Marchi1-1/+1
Documentation says kmod_module_new_from_lookup() returns < 0 on error and 0 otherwise. There are bugs in libkmod however making it return a positive value in some situations, that need to be fixed. However it's best to check for the error explicitly like is done in the rest of the library to avoid this kind of issues. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
2022-02-11depmod: Stop opening modules.modinfo once per moduleLucas De Marchi1-62/+96
Since the addition of modules.aliases.bin, depmod has to open that index multiple times and parse it over and over again: $ sudo strace -e openat ./tools/depmod 2>&1 | grep modules.builtin.modinfo | wc -l 299 $ time sudo ./tools/depmod real 0m7.814s user 0m7.571s sys 0m0.237s Rework the logic in depmod so it does everything: open, read and parse. The format is very straightforward and we don't need to keep it in a data structure since we only want to add the result to a index. New output: $ sudo strace -e openat ./tools/depmod 2>&1 | grep modules.builtin.modinfo | wc -l 1 $ time sudo ./tools/depmod real 0m7.663s user 0m7.516s sys 0m0.139s Indexes still match: $ cmp /tmp/modules.builtin.alias.bin.new /tmp/modules.builtin.alias.bin.old; echo $? 0 Fix: https://github.com/kmod-project/kmod/issues/11
2022-02-11depmod: Do not duplicate builtin indexLucas De Marchi1-4/+1
Now that libkmod uses modules.builtin.bin again, we don't need to add the module names in modules.builtin.alias.bin and just add the aliases. After this change, here are the new sizes for the indexes: Before After index 21k 6.4K modules.builtin.alias.bin 11k 11K modules.builtin.bin
2022-02-11libkmod: Prefer builtin index over builtin.aliasLucas De Marchi1-5/+7
The modules.builtin.alias.bin is way larger than the modules.builtin.bin. On a normal "distro kernel": 21k modules.builtin.alias.bin 11k modules.builtin.bin From the kernel we get both modules.builtin and modules.builtin.modinfo. depmod generates modules.builtin.bin and modules.builtin.alias.bin from them respectively. modules.bultin is not going away: it's not deprecated by the new index added. So, let's just stop duplicating the information inside modules.builtin.alias.bin and just use the other index.
2022-01-20libkmod: Set builtin to no when module is created from path.Michal Suchanek1-8/+9
A recent bug report showed that modinfo doesn't give the signature information for certain modules, and it turned out to happen only on the modules that are built-in on the running kernel; then modinfo skips the signature check, as if the target module file never exists. The behavior is, however, inconsistent when modinfo is performed for external modules (no matter which kernel version is) and the module file path is explicitly given by a command-line argument, which guarantees the presence of the module file itself. Fixes: e7e2cb61fa9f ("modinfo: Show information about built-in modules") Link: https://lore.kernel.org/linux-modules/CAKi4VAJVvY3=JdSZm-GD1hJqyCPYaYz-jBJ_REeY5BakVb6_ww@mail.gmail.com/ BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1189537 Suggested-by: Lucas De Marchi <lucas.de.marchi@gmail.com> Signed-off-by: Michal Suchanek <msuchanek@suse.de> Reviewed-by: Petr Vorel <pvorel@suse.cz>
2021-09-23libkmod: add a library notice log level printLuis Chamberlain1-0/+2
When you use pass the -v argument to modprobe we bump the log level from the default modprobe log level of LOG_WARNING (4) to LOG_NOTICE (5), however the library only has avaiable to print: #define DBG(ctx, arg...) kmod_log_cond(ctx, LOG_DEBUG, ## arg) #define INFO(ctx, arg...) kmod_log_cond(ctx, LOG_INFO, ## arg) #define ERR(ctx, arg...) kmod_log_cond(ctx, LOG_ERR, ## arg) LOG_INFO (6) however is too high of a level for it to be effective at printing anything when modprobe -v is passed. And so the only way in which modprobe -v can trigger the library to print a verbose message is to use ERR() but that always prints something and we don't want that in some situations. We need to add a new log level macro which uses LOG_NOTICE (5) for a "normal but significant condition" which users and developers can use to look underneath the hood to confirm if a situation is happening. Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
2021-06-09libkmod-module: check "new_from_name" return value in get_builtinYauheni Kaliuta1-1/+4
kmod_module_new_from_name() may fail and return error value. It is handled properly across the code, but in this particular place the check is missing. Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2021-05-20kmod 29v29Lucas De Marchi3-2/+48
2021-05-11testsuite: update gitignoreLucas De Marchi1-1/+1
2021-05-11depmod: fix modules.builtin.alias.bin outputLucas De Marchi1-1/+1
Due to wrong documentation on kmod_module_get_info() we ended up checking for 0 as return. Check for > 0 to decided if we want to write the index to the file, otherwise we would output a 0-sized index on success.
2021-05-11Fix return value doc for kmod_module_get_info()Lucas De Marchi1-1/+1
We don't return 0 on success, we return the number of elements we added to the list.
2021-04-17libkmod: fix possible double free with wrong modules.builtin.modinfoSeung-Woo Kim1-1/+1
Fix double free for *modinfo with non '\0' terminated wrong modules.builtin.modinfo, which is because EOF is minus value. Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
2021-04-17libkmod: fix an overflow with wrong modules.builtin.modinfoSeung-Woo Kim1-1/+1
Fix a possbile overflow with exact PATH_MAX length modname in wrong modules.builtin.modinfo. Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
2021-04-17gitignore: ignore .mbx and .cover for b4 integrationLucas De Marchi1-0/+2
Lately I'm using b4 to work with the patches in the mailing list. Better to start ignoring .cover and .mbx files since they get created by b4.
2021-04-09libkmod-config: fix a memory leak when kmod_list_append() failsSeung-Woo Kim1-1/+3
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-03-10libkmod-config: more chars allowed as spaceLucas De Marchi1-2/+5
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-02-15test-modprobe: share single function for kcmdline testsLucas De Marchi1-85/+10
2021-02-15testsuite: allow to re-use single function for testsLucas De Marchi1-2/+4
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-15libkmod-config: re-quote option from kernel cmdlineLucas De Marchi10-1/+109
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-15libkmod-config: revamp kcmdline parsing into a state machineLucas De Marchi1-34/+52
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-05testsuite: also test xz compressionLucas De Marchi1-0/+9
Reviewed-by: Petr Vorel <pvorel@suse.cz>
2021-02-05testsuite: compress modules if feature is enabledLucas De Marchi3-12/+19
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-01-23populate-modules: Use more bash, more quotesDave Reisner1-9/+9
We're already using associatives arrays, so there's no reason we should be using 'test'.
2021-01-20README: make github mirror officialLucas De Marchi2-4/+126
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-18Support /usr/local for configuration filesLucas De Marchi4-4/+9
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-18depmod: fix precedence orderLucas De Marchi1-1/+1
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-18libkmod: Fix documentation on config precedence orderLucas De Marchi3-3/+3
/etc is has higher priority than /run.
2021-01-07Fix "modinfo -F always shows name for built-ins"Marco d'Itri1-1/+5
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-07README: remove leftover from semaphoreciLucas De Marchi1-3/+0
We are not currently using semaphoreci, so remove leftover status from README.
2021-01-07testsuite: Automatically skip tests that fail when sysconfdir != /etc.Marius Bakke5-7/+28
2021-01-07testsuite: Add facility to skip tests.Marius Bakke2-0/+11
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-07kmod 28v28Lucas De Marchi3-2/+15
2021-01-07build: add comment with rules for libtool version updateLucas De Marchi1-0/+13
2020-12-27build: fix distcheck due to missing zstdLucas De Marchi1-1/+1
Enable zstd since it's used in the testsuite.