kmod/NEWS
Lucas De Marchi b6ecfc916a kmod 29
2021-05-20 16:02:57 -07:00

723 lines
24 KiB
Plaintext

kmod 29
=======
- Improvements
- Add support to use /usr/local as a place for configuration files. This makes it easier
to install locally without overriding distro files.
- Bug fixes
- Fix `modinfo -F` when module is builtin: when we asked by a specific field from modinfo,
it was not working correctly if the module was builtin
- Documentation fixes on precedence order of /etc and /run: the correct order is
/etc/modprobe.d, /run/modprobe.d, /lib/modprobe.d
- Fix the priority order that we use for searching configuration files. The
correct one is /etc, /run, /usr/local/lib, /lib, for both modprobe.d
and depmo.d
- Fix kernel command line parsing when there are quotes present. Grub
mangles the command line and changes it from 'module.option="val with
spaces"' to '"module.option=val with spaces"'. Although this is weird
behavior and grub could have been fixed, the kernel understands it
correctly for builtin modules. So change libkmod to also parse it
correctly. This also brings another hidden behavior from the kernel:
newline in the kernel command line is also allowed and can be used to
separate options.
- Fix a memory leak, overflow and double free on error path
- Fix documentation for return value from kmod_module_get_info(): we
return the number of entries we added to the list
- Fix output of modules.builtin.alias.bin index: we were writing an empty file due to
the misuse of kmod_module_get_info()
- Infra/internal
- Retire integration with semaphoreci
- Declare the github mirror also as an official upstream source: now besides accepting
patches via mailing list, PRs on github are also acceptable
- Misc improvements to testsuite, so we can use it reliably regardless
of the configuration used: now tests will skip if we don't have the
build dependencies)
kmod 28
=======
- Improvements
- Add Zstandard to the supported compression formats using libzstd
(pass --with-zstd to configure)
- Bug fixes
- Ignore ill-formed kernel command line, e.g. with "ivrs_acpihid[00:14.5]=AMD0020:0"
option in it
- Fix some memory leaks
- Fix 0-length builtin.alias.bin: it needs at least the index header
kmod 27
=======
- Improvements
- Link to libcrypto rather than requiring openssl
- Print a better error message when kernel doesn't support module unload
- Use PKCS#7 instead of CMS for parsing module signature to be
compatible with LibreSSL and OpenSSL < 1.1.0
- Teach modinfo to parse modules.builtin.modinfo. When using Linux kernel
>= v5.2-rc1 it's possible to get module information from this new file. Now
modinfo is able to show it instead of an error message that the module is
built-in:
Before:
$ modinfo ext4
modinfo: ERROR: Module ext4 not found.
After:
$ modinfo ext4
name: ext4
filename: (builtin)
softdep: pre: crc32c
license: GPL
description: Fourth Extended Filesystem
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
alias: fs-ext4
alias: ext3
alias: fs-ext3
alias: ext2
alias: fs-ext2
- Bug fixes
- Do not link python bindings with libpython to be compatible with
python3.8
- Fix module removal with `modprobe -r` when a dependency is built-in.
Now it properly ignores them and proceed with removal of other
dependencies
- Fix propagation of return code from install/remove commands to the
the probe function. The return values of kmod_module_probe_insert_module()
have very specific meanings, do not confuse the caller by return codes
from system()
- Fix softdep config parsing leading to buffer overflow
kmod 26
=======
- Improvements
- Add more error-checking in library functions and remove warnings on newer
toolchains
- Depmod now handles parallel invoctions better by protecting the temporary
files being used
- Improvements to testsuite and added tests to check the our behavior
regardless of the features enabled in the kernel, or libraries we link to
- Teach the --show-exports option to modprobe. This works similarly to
--show-modversions, but it reports the exported symbols from that module.
Under the hood this reads the .symtab and .strtab section rather than
__versions so it shows useful data even if kernel is configured without
modversions (CONFIG_MODVERSIONS)
- Teach pkcs7 parsing to modinfo by using openssl. This allows modinfo to
correctly parse the signature appended to a module by the kernel build
system when configured with CONFIG_MODULE_SIG_ALL, or when externally
signed by the distro. Traditionally modules were signed and a struct
was appended together with the signature to the end of the module.
This has changed on the kernel for pkcs#7 and now the structure isn't
filled out with useful information. So we have to parse the signature
block in order to return useful data to the user.
If kmod is linked with openssl we parse the signature and return the
fields as we do for other signatures. An example of the relevant part
on the output of modinfo is below:
Before:
sig_id: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
After:
sig_id: PKCS#7
signer: Fedora kernel signing key
sig_key: 51:C4:0C:6D:7E:A5:6C:D8:8F:B4:3A:DF:91:78:4F:18:BC:D5:E4:C5
sig_hashalgo: sha256
If kmod is not linked to openssl we just start printing "unknonwn" in the
sig_hashalgo field rather than the bogus value.
kmod 25
=======
- Improvements
- Add module signature to modinfo output
- Add support for external directories in depmod: now there's a new
"external" keyword parsed by depmod when calculating the dependencies.
It allows to add modules to other directories which are not relative
to where the modules are commonly installed. This results in
modules.dep and friends now understanding absolute paths rather than
relative paths only. For more information see depmod.d(1).
- Add support for CONFIG_MODULE_REL_CRCS
- Add missing documentation references in man pages
- Handle the case in which module has a .TOC symbol already while
calculating dependencies
- Improve testsuite and allow to use mkosi to run testsuite in different
distros
kmod 24
=======
- Improvements:
- Add more information on dependency loop
- Sanitize use of strcpy and allow to grow from small strings on stack
(common case) to bigger strings on heap when needed
- Bug fixes
- Fix wrong dependency loops being reported by depmod
- Fix crashes when reporting dependency loops
- Fix parsing kernel command line containing quotes
- Fix leaks on error paths
kmod 23
=======
- Improvements:
- Don't add comment to modules.devname if it would otherwise be empty
to play nice with tools detecting empty files
- Allow building with BSD sed, that doesn't have -E flag
- Ignore .TOC. symbols in depmod parsing as it's for PPC64 the
equivalent of _GLOBAL_OFFSET_TABLE_
- Teach modinfo about PKCS#7 module signatures: it doesn't add any
other info besides telling the user the module is signed since
kernel doesn't add other info on the module section
- Bug fixes
- Fix -s and -p compat options to insmod triggering force flag
- Fix long lines from /proc/modules not being handled correctly by
kmod_module_new_from_loaded() and kmod_module_get_size() and several
other library functions that use them
- Fix crash on modinfo while checking for available signature of
unknown type
- Fix documentation generation with gtk-doc
kmod 22
=======
- Tools:
- Change defaul log level for tools to WARNING rather than ERROR and update
some log levels for current messages
- depmod doesn't fallback to uname if a bad version is passed in the command
line anymore. We just exit with an error.
- insmod was taught the -f flag, just like in modprobe. It was previously
silently ignoring it.
- libkmod
- New kmod_get_dirname() API to get the module directory set in the
context
- Bug fixes:
- Fix return code in error path of kmod_module_insert_module(). We were
previously returning ENOSYS rather than ENOENT.
kmod 21
=======
- New features:
- kmod tool started to learn the "insert" and "remove" commands that
are the simplified versions of the older modprobe tool. These
commands are still work in progress so they are hidden behind a
--enable-experimental flag during build. It should not be enabled
unless you know what you're doing.
- kmod tool now prints the relevant configuration options it was built
with when the "--version" argument is passed. This helps to mitigate
problems for example when the user is trying to load a compressed
module but kmod was built without support for the compression method.
- Improvements to testsuite:
- Cache built modules so it is easier to run "make check" on build
servers by distro maintainers. If kmod is configured with
--disable-test-modules the modules from cache will be used by
"make check". No changes to the tests are needed and all of them
can run fine.
kmod 20
=======
- Bug fixes:
- Handle bogus values from ELF, making sure they don't overflow while
parsing the file
- Fix leak in depmod when -b flag is passed multiple times
- Multiple minor fixes from static analysis by coverity and
clang-analyze
- Fix race between loading modules and checking if it's loaded in the
kernel
- New features:
- There's a change in behavior regarding builtin modules: we now only
consider as builtin those that are present in modules.builtin index.
Previously we were also checking the presence of
/sys/module/<module-name>, but this is racy and only modules that
contain parameters are the ones creating a directory in sysfs.
Now some commands will start to fail, e.g. "modprobe vt". Since vt
can't be compiled as a module it's not present in modules.builtin
index. Previously we would report at as builtin, but now we fail
because we couldn't find the module.
- Improvements:
- Integration of gcov into the build. Currently libkmod is at ~70%
covered and tools at ~50% by tests in the testsuite. Utility
functions and structures in shared have more than 90% of coverage.
- Upload build to coverity
- Improvements to testsuite:
- Fix parsing return codes of init_module() calls
- Add tests for utility functions in shared/
- Add tests for kmod_module_remove_module()
- Add playground, in which our own modules are compiled
- Port all tests to use modules from module-playground instead of
copying prebuilt modules to the repository
- Properly handle binaries that exit with no output
- Besides comparing the output of commands, allow to copy to
stdout/stderr
kmod 19
=======
- Bug fixes:
- Fix missing CLOEXEC in library
- Fix error message while opening kmod's index
- New features:
- Add kmod(8) man page
- Allow to build with libc's without be32toh()
- Move code around separating common code and data structures into a
shared directory. This allows to share more code between library and
tools, making the binary size of tools smaller.
- Clarify tools vs library licenses
- static-nodes: when writing in tmpfiles format, indicate that
creation of static nodes should only happen at boot. This is used and
required by systemd-217+.
- Improvements to testsuite:
- Add tests for newly created shared/ code
- Improve how tests are declared so there's less boilerplate code for
each test.
kmod 18
=======
- Bug fixes:
- Fix leaks in error paths
- Fix use-after-free in hash implementation causing a wrong index to be
generated by depmod with out-of-tree modules
- New features:
- Calling depmod with modules creating a dependency loop will now make
depmod return an error and not update the indexes. This is to protect
the current index not being overridden by another index that may cause
a boot failure, depending on the buggy module. It's a necessary
change in behavior regarding previous kmod releases and
module-init-tools. The error message was also improved to output
the modules that caused the dependency cycle.
- Improvements to testsuite:
- Fix and improve expected-fail test
- Add tests for hashmap implementation
kmod 17
=======
- Bug fixes:
- Fix matching a "." in kernel cmdline, making garbage in the command
line be parsed as kmod options
- Fix man pages to clarify we don't fallback to parsing modules.dep
but instead we depend on modules.dep.bin (generated by depmod) to
be present
- Fix ELF parsing on 32 bit systems assigning the wrong class.
- Fix partial matches of search directives in depmod. Previously having
a line in depmod.conf such as "search foo foobar built-in" would cause
unpretictable results because foo is a partial match of foobar as well.
- Fix unaligned access in modinfo when getting the signature from a
module
- Make sure softdeps are treated as optional dependencies
- New features:
- Accept special files given to "-C" switch in modprobe. This way it's
possible to skip system configuration with "modprobe -C /dev/null"
- Do not require xsltproc on released tarballs
- Don't use Werror anymore
- Add experimental python bindings, merged from python-kmod repository
(https://github.com/agrover/python-kmod)
- Parse softdeps exported by the kernel as
/lib/modules/`uname -r`/modules.softdep
- Improvements to testsuite:
- Check the list of loaded modules after a test
kmod 16
=======
- Bug fixes:
- Fix usage of readdir_r()
- Add some missing checks for memory allocation errors
- New features:
- Remove option from libkmod to allow waiting on module removal if
the module is being used. It's dangerous since it can block the
caller indefinitely.
- Improve compatibility with musl libc
- Add fallback implementation for compilers without _Static_assert(),
e.g. gcc < 4.6
- Minor optimizations to the hash table
- Make depmod warn if a module has incorrect devname specification
- Use cleanup attribute
kmod 15
=======
- Bug fixes:
- kmod static-nodes doesn't fail if modules.devname isn't available
- Fix getting boolean parameter from kernel cmdline in case the value
is omitted
- Fix some mkdir_p() corner cases (used in testsuite and static-nodes)
- New features:
- kmod static-nodes creates parent directories if given a -o option
- kmod binary statically links to libkmod - if distro is only interested
in the kmod tool (for example in an initrd) it can refrain from
installing the library
- Add shell completion for kmod tool
kmod 14
=======
- Bug fixes:
- Fix some format strings
- Protect against NULL being passed around to index
- Avoid calling syscall() with -1 when finit_module() is not available,
since this doesn't always work
- Fix not being able to remove alias due to checking the module's
refcount
- Minor fixes and refactors
- New features:
- Improve libkmod documentation, particularly on how flags are dealt
with.
- Remove ability to build a static libkmod
- Add static-nodes command to kmod that parses modules.devname
generating output in useful formats
kmod 13
=======
- Bug fixes:
- Add the long option --symbol-prefix option to depmod (it was absent)
and fix its behavior
- Don't abort if there's a bogus line in configuration file like "alias
psmouse off". Some distros are carrying this since the days of
modutils
- New features:
- Add support for finit_module(2). If the module is load straight from
the disk and without compression we use finit_module() syscall when
available, falling back to init_module() otherwise
- kmod_module_get_info() also returns the signature if the module is
signed and modinfo uses it
- Use secure_getenv if available
- rmmod understands builtin modules, just like modprobe does
- Improve compatibility with musl-libc
- Test cases exit with success when receiving a signal if they are
xfail tests
kmod 12
=======
- Bug fixes:
- Fix removing vermagic from module when told to force load a module
- Fix removing __versions section when told to force load a module: we
need to mangle the section header, not the section.
- modinfo no longer fails while loading a module from file when path
contains ".ko" substring
kmod 11
=======
- Improvements to testsuite:
- Fix testsuite defining symbols twice on 32 bit systems
- Allow to check generated files against correct ones
- New features:
- libkmod now keeps a file opened after the first call to
kmod_module_get_{info,versions,symbols,dependency_symbols}. This
reduces significantly the amount of time depmod tool takes to
execute. Particularly if compressed modules are used.
- Remove --with-rootprefix from build system. It was not a great idea
after all and should not be use since it causes more harm then
benefits.
- Hide --wait option on rmmod. This feature is being targeted for
removal from kernel. rmmod still accepts this option, but it's hidden
now: man page and usage() say nothing about it and if it's used,
user will get a 10s sleep. This way we can check and help if anyone
is using this feature.
- Refactor message logging on all tools, giving proper prefix, routing
everything to syslog when asked for, etc.
- Bug fixes:
- Fix parsing of modules.order when using compressed modules
- Usage messages go to stdout instead of stderr
- Fix memory leak in hash implementation
kmod 10
=======
- New features:
- Read coresize from /sys if supported
- Add flag to kmod_module_probe_insert() to apply blacklisting during
probe only if mod is an alias. Now modprobe uses this flag by default.
This is needed to fix a change in behavior regarding module-init-tools
and ultimately makes us loading a blacklisted module.
- Better formatting in man pages
- Add option to disable building man pages at build time
- Fixes in the testsuite and refactoring of LDPRELOAD'ed libraries
- Re-licensing testsuite as LGPL
kmod 9
======
- Improvements to the testsuite:
- Check for correct handling of softdep loops
- Check for correct handling of install command loops
- Bug fixes:
- Fix build with compilers that don't support --gc-sections
- Handle errors when dealing with gzipped modules
- depmod now handles errors while writing indices, so it doesn't end up
with a corrupted index without telling the user
kmod 8
======
- No new features, small bug fixes only.
- Fix a bug in "modprobe -c" output: be compatible with
module-init-tools
- Give a useful error message when init_module fails due to bad
parameter or unknown symbols
- Fix doc generation
kmod 7
======
- Re-order dirs for configuration files to match the change in systemd and
udev: now the priority is:
1. /etc/modprobe.d
2. /run/modprobe.d
3. /lib/modprobe.d
- Fix setting CFLAGS/LDFLAGS in build system. This prevented us from not
allowing the user to set his preferences.
- Bug fixes:
- Return same error codes of module-init-tools when removing modules
with modprobe
- Fix builtin output in "--show-depends" when target kernel is not the
same of the running kernel
- 'modprobe -r' always look at all command line arguments
- Fix '-q' usage in modprobe
kmod 6
======
- New API in libkmod:
- kmod_module_apply_filter(): a generic function to apply filters in a
list of modules. This deprecates the use of
kmod_module_get_filtered_blacklist()
- More tests in testsuite
- Add compatibility with uClibc again
- Lookup modules.builtin.bin to decide if a module is built in kernel
- Downgrade some log messages so we don't annoy people with useless messages
- Bug fixes:
- Flag --ignore-loaded was not being properly handled
- Infinite loop with softdeps
- Infinite loop with dumb user configuration with install commands
- Fix leak in index when there's a partial match
- Move repository and tarballs to kernel.org
kmod 5
======
- Break libkmod's API to insert a module like modprobe does. It now accepts
extra an extra argument to print its action and acceptable flags were
sanitized.
- Share more code between modprobe and libkmod: using the new version of
kmod_module_probe_insert_module() it's possible to share a great amount of
code between modprobe and libkmod
- modprobe no longer works with paths: it only accepts module names and/or
aliases now.
- testsuite was added to repository, allowing automated tests to be run and
easing the way bugs are reproduced.
- modprobe: when dumping configuration ('-c' option) separate config
and indexes by adding a commented line between them.
- Fix bugs wrt normalizing aliases and module names
- Fix bug wrt inserting an alias that resolves to multiple modules: we should
not stop on the first error, but rather continue to try loading other
modules.
- Fix unaligned memory access in hash function, causing depmod to output wrong
information in ARMv5
- Fix man page build and install: now they are only installed if tools are
enabled
kmod 4
======
- New APIs in libkmod to:
- Get configuration lists: blacklists, install commands, remove
commands, aliases, options and softdeps
- Dump indexes
- Several bugs fixed in libkmod, modprobe, depmod and modinfo
- API documentation: if configure with run with --enable-gtk-doc, the API doc
will be generated by make. Gtk-doc is required for that.
- Man pages are built, which replace man pages from module-init-tools
- 'include' and 'config' options in *.conf files were deprecated
- configure is not run by autogen.sh. Instead, a common set of options is
printed. If you are hacking on kmod, consider using bootstrap-configure
script.
- 'modprobe -c' works as expected now. As opposed to module-init-tools, it
dumps the parsed configuration, not only the file contents.
kmod 3
======
- New APIs in libkmod to:
- Get symbols from module, parsing the ELF section
- Get dependency symbols
- Check if resources are still valid or if libkmod must be reloaded
- Insert module like modprobe, checking (soft-)dependencies, commands,
blacklist. It can run commands by itself and to call a callback
function.
- Support to load modules compressed with xz
- Tools are now bundled together in a single tool called kmod. It can be
called using symlinks with the same names as tools from module-init-tools.
E.g: /usr/bin/lsmod -> /usr/bin/kmod. With this we are aiming to complete a
1:1 replacement of module-init-tools.
- The only missing tool, depmod, was added to kmod together with the necessary
APIs in libkmod.
- If a program using libkmod runs for a long time, as for example udev, it must
check if it doesn't have to re-load libkmod. A new helper function was added
in libkmod to check if context is still valid and udev is already using it.
- An 'unaligned access' bug was fixed. So those architecture that does not
handle unaligned access can use kmod, too.
kmod 2
======
Some bugs fixed: the worst of them was with an infinite loop when an alias
matched more than one module.
- New APIs in libkmod to:
- Get soft dependencies
- Get info from module files parsing ELF
- Get modversions from files parsing ELF
- Support to load gzipped kernel modules: kmod can be compiled with support to
gzipped modules by giving the --enable-zlib flag
- Support to forcefully load modules, both vermagic and modversion
- Support to force and nowait removal flags
- Configuration files are parsed in the same order as modprobe: files are
sorted alphabetically (independently of their dir) and files with the same
name obey a precedence order
- New tool: kmod-modinfo
- kmod-modprobe gained several features to be a 1:1 replacement for modprobe.
The only missing things are the options '--showconfig' and '-t / -l'. These
last ones have been deprecated long ago and they will be removed from
modprobe. A lot of effort has been put on kmod-modprobe to ensure it
maintains compabitility with modprobe.
- linux-modules@vger.kernel.org became the official mailing list for kmod
kmod 1
======
First version of kmod and its library, libkmod.
In the libkmod it's currently possible to:
- List modules currently loaded
- Get information about loaded modules such as initstate, refcount,
holders, sections, address and size
- Lookup modules by alias, module name or path
- Insert modules: options from configuration and extra options can be
passed, but flags are not implemented, yet
- Remove modules
- Filter list of modules using blacklist
- For each module, get the its list of options and install/remove
commands
- Indexes can be loaded on startup to speedup lookups later
Tools provided with the same set of options as in module-init-tools:
- kmod-lsmod
- kmod-insmod
- kmod-rmmod
- kmod-modprobe, with some functionality still missing (use of softdep,
dump configuration, show modversions)