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 signficantly 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)
