]> git.ipfire.org Git - thirdparty/kmod.git/blobdiff - NEWS
Install kmod.pc in ${datadir}/pkgconfig
[thirdparty/kmod.git] / NEWS
diff --git a/NEWS b/NEWS
index 30e50c9913806ada6eab0ce49b0f1a12a74c3c30..6b628f9382e993bd557d1b13e4500058ab6e60f9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,651 @@
+kmod 32
+=======
+
+- Improvements
+
+       - Use any hash algo known by kernel/openssl instead of keep needing
+         to update the mapping
+
+       - Teach kmod to load modprobe.d/depmod.d configuration from ${prefix}/lib
+         and allow it to be overriden during build with --with-distconfdir=DIR
+
+       - Make kernel modules directory configurable. This allows distro to
+         make kmod use only files from /usr regardless of having a compat
+         symlink in place.
+
+       - Install kmod.pc containing the features selected at build time.
+
+       - Install all tools and symlinks by default. Previously kmod relied on
+         distro packaging to set up the symlinks in place like modprobe,
+         depmod, lsmod, etc. Now those symlinks are created by kmod itself
+         and they are always placed in $bindir.
+
+- Bug Fixes
+
+       - Fix warnings due to -Walloc-size
+
+- Others
+
+       - Drop python bindings. Those were not update in ages and not compatible
+         with latest python releases.
+
+       - Cleanup test infra, dropping what was not used anymore
+
+       - Drop experimental tools `kmod insert` / `kmod remove`. Building those
+         was protected by a configure option never set by distros. They also
+         didn't gain enough traction to replace the older interfaces via
+         modprobe/insmod/rmmod.
+
+kmod 31
+=======
+
+- Improvements
+
+       - Allow passing a path to modprobe so the module is loaded from
+         anywhere from the filesystem, but still handling the module
+         dependencies recorded in the indexes. This is mostly intended for kernel
+         developers to speedup testing their kernel modules without having to load the
+         dependencies manually or override the module in /usr/lib/modules/.
+         Now it's possible to do:
+
+               # modprobe ./drivers/gpu/drm/i915/i915.ko
+
+         As long as the dependencies didn't change, this should do the right thing
+
+       - Use in-kernel decompression if available. This will check the runtime support
+         in the kernel for decompressing modules and use it through finit_module().
+         Previously kmod would fallback to the older init_module() when using
+         compressed modules since there wasn't a way to instruct the kernel to
+         uncompress it on load or check if the kernel supported it or not.
+         This requires a recent kernel (>= 6.4) to have that support and
+         in-kernel decompression properly working in the kernel.
+
+       - Make modprobe fallback to syslog when stderr is not available, as was
+         documented in the man page, but not implemented
+
+       - Better explaing `modprobe -r` and how it differentiates from rmmod
+
+       - depmod learned a `-o <dir>` option to allow using a separate output
+         directory. With this, it's possible to split the output files from
+         the ones used as input from the kernel build system
+
+       - Add compat with glibc >= 2.32.9000 that dropped __xstat
+
+       - Improve testsuite to stop skipping tests when sysconfdir is something
+         other than /etc
+
+       - Build system improvements and updates
+
+       - Change a few return codes from -ENOENT to -ENODATA to avoid confusing output
+         in depmod when the module itself lacks a particular ELF section due to e.g.
+         CONFIG_MODVERSIONS=n in the kernel.
+
+
+- Bug Fixes
+
+       - Fix testsuite using uninitialized memory when testing module removal
+         with --wait
+
+       - Fix testsuite not correctly overriding the stat syscall on 32-bit
+         platforms. For most architectures this was harmless, but for MIPS it
+         was causing some tests to fail.
+
+       - Fix handling unknown signature algorithm
+
+       - Fix linking with a static liblzma, libzstd or zlib
+
+       - Fix memory leak when removing module holders
+
+       - Fix out-of-bounds access when using very long paths as argument to rmmod
+
+       - Fix warnings reported by UBSan
+
+kmod 30
+=======
+
+- Improvements
+       - Stop adding duplicate information on modules.builtin.alias.bin, just use
+         the modules.builtin.bin index
+
+       - Speedup depmod, particularly under qemu with emulated arch, by
+         avoiding a lot of open/read/close of modules.alias.bin. On an
+         emulated ARM rootfs, depmod with only 2 modules was taking ~32s
+         vs ~0.07s now.
+
+       - Add kmod_module_new_from_name_lookup() which allows doing a lookup by
+         module name, without considering the aliases. Other than that search
+         order is similar to kmod_module_new_from_lookup().
+
+       - modinfo learned the --modname option to explicitely show information
+         about the module, even if there is an alias with the same name. This
+         allows showing information about e.g. kernel/lib/crc32.ko, even if
+         kernel also exports a crc32 alias in modules.alias:
+
+               alias crc32 crc32_pclmul
+               alias crc32 crc32_generic
+
+         Same behavior will be used to other modules and to aliases provided
+         by user/distro.
+
+       - depmod.conf learned a new "excludedir" directive so distro/user can
+         configure more directories to be excluded from its search, besides
+         the hardcoded values "build" and "source".
+
+       - Better group modprobe options on help output under "Management, Query and General".
+
+       - modprobe learned a --wait <MSEC> option to be used together with -r
+         when removing a module. This allows modprobe to keep trying the
+         removal if it fails because the module is still in use. An exponential backoff
+         time is used for further retries.
+
+         The wait behavior provided by the kernel when not passing O_NONBLOCK
+         to delete_module() was removed in v3.13 due to not be used and the
+         consequences of having to support it in the kernel. However there may
+         be some users, particularly on testsuites for individual susbsystems, that
+         would want that. So provide a userspace implementation inside modprobe for
+         such users. "rmmod" doesn't have a --wait as it remains a bare minimal over
+         the API provided by the kernel. In future the --wait behavior can be added
+         to libkmod for testsuites not exec'ing modprobe for module removal.
+
+       - kmod_module_remove_module() learned a new flag to silence output when
+         caller wants to handle them - this is particularly important for the
+         --wait flag to modprobe, as it's not desired to keep seeing error messages
+         while waiting for the module to be unused.
+
+       - Add SM3 hash algo support to modinfo output, as already available in the kernel.
+
+- Bug Fixes
+       - Fix modinfo output when showing information for a .ko module when running
+         on a kernel that has that module as builtin.
+
+       - Fix kmod_module_new_from_lookup() returning > 0 rather than 0
+         when it matches an alias.
+
+       - Fix modinfo segfault when module doesn't exist.
+
+       - Add missing function in the html documentation: kmod_get_dirname().
+
+       - Fix modprobe incorrectly handling number of arguments when prepending values from
+         MODPROBE_OPTIONS environment variable.
+
+       - Fix modprobe -r --remove-dependencies and since "dependencies" was a
+         misnomer, add the preferred argument option: "--remove-holders". This
+         is the same name used by the kernel. It allows users to also remove
+         other modules holding the one that is being removed.
+
+       - Fix off-by-one in max module name length in depmod.
+
+- Infra/internal
+       - Start some changes in the out-of-tree test modules in kmod so they are useful
+         for being really inserted in the kernel rather than relying on kmod's mock
+         interface. This helps manual testing and may be used to exercise to test
+         changes in the kernel.
+
+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
 =======
 
@@ -8,14 +656,14 @@ kmod 11
 - New features:
        - libkmod now keeps a file opened after the first call to
          kmod_module_get_{info,versions,symbols,dependency_symbols}. This
-         reduces signficantly the amount of time depmod tool takes to
+         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() says nothing about it and if it's used,
+         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