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)
