Skip to content

Releases: containers/composefs

v1.0.7

01 Nov 12:33
3d14726
Compare
Choose a tag to compare

Relicensing

One notable thing in this release is that we cleaned up our license situation, in a nutshell:

  • Relicense most code under GPL-2.0-or-later OR Apache-2.0 by @cgwalters in #376

Much more in the linked issue: #344

Features

Other changes

Other than the above: a few build and static analyzer fixes, some documentation improvements.

New Contributors

Full Changelog: v1.0.6...v1.0.7

v1.0.6

16 Sep 12:57
2b6560e
Compare
Choose a tag to compare

Feature: mkcomposefs --from-file fuzzing

A while ago while working on the Rust composefs bindings I found a bug in the dumpfile parser where the process would crash if provided an unexpected value.

Today for the Rust bindings and the containers/image library because we're forking off a separate process (that we can apply isolation to and low privilege overall) even an assertion failure is relatively benign. And such tools usually wouldn't produce a dumpfile malformed in that way. But still, it caused me to question whether there were other bugs.

For codebases that are linking in the libcomposefs library, process aborts are obviously more problematic.

This series is the result of running honggfuzz and quite a lot of time spent learning this codebase.

Thanks to @hsiangkao @alexlarsson @jeckersb @giuseppe @allisonkarlitskaya for their assistance with reviews and discussion of this!

Composefs and security

I don't think there's cause to classify this as a CVE yet, as we didn't really formally declare that mkcomposefs --from-file is a "security boundary". At the current time, if you are using composefs in a context where it is being provided potentially malicious input, it is strongly recommended to ensure that the input is validated and sanitized as much as possible, alongside use of hardening and fuzzing techniques. We have developed Rust bindings for example which do some of this, and work will continue on that.

This said, we will likely aim to make "mkcomposefs --from-file" a security boundary in the future (e.g. guaranteeing that it will always either return an error or generate a valid EROFS) and allocate CVEs for any further flaws.

Composefs and reliability

composefs has been used reliably in many cases for a while now; in general almost all of these issues could only occur for extreme boundary conditions such as:

  • symlinks close to the PATH_MAX (4096 byte) limit
  • extremely large extended attributes
  • Files claiming to be extremely large (> 5 EiB)

Hence, I do not think there is a need for existing composefs users to consider this a critical fix.

Most of these cases also again would fail with an assertion - at most a denial of service. However in some cases we would produce a corrupted EROFS blob - and in the cases I tested, the Linux kernel EROFS parser successfully detected the corruption.

The EROFS kernel code is actively fuzzed and fixed when bugs are found (e.g. this recent one) but still a goal for this project is to avoid exposing the Linux kernel code to a potentially corrupted EROFS at all.

(A core part of the idea of composefs is that the EROFS metadata doesn't need to be transported "on the wire", it can be re-synthesized reproducibly from other metadata, such as existing OCI tar layers, or ostree commits, etc.)

Autotools build system dropped

The only supported build system is now meson.

Potentially incompatible changes

  • mkcomposefs: Process last content in dumpfile without newline by @cgwalters in #331

We believe this is unlikely to break anyone, but if it does we are open to reverting this change.

New features

Other changes

New Contributors

Full Changelog: v1.0.5...v1.0.6

v1.0.5

16 Aug 19:57
098d985
Compare
Choose a tag to compare

A notable change here is that composefs now supports meson as a build system. We are likely to remove the autotools build system in the next release, so if you're including composefs in your build system, please let us know if there's any problems with that in #301

There's a few minor internal fixes and hardening, some CI cleanups. Also included in the list below is changes to the Rust code, which has already been published to crates.io and is versioned separately from this release.

Thanks to all contributors!

What's Changed

New Contributors

Full Changelog: v1.0.4...v1.0.5

Release 1.0.4

29 May 12:26
v1.0.4
7623e4d
Compare
Choose a tag to compare

Changes since 1.0.4:

  • Added LCFS_MOUNT_FLAGS_TRY_VERITY/tryverity mount option to do best-effort fs-verity
  • Use the new loewerdir+ and datadir+ overlayfs mount options from linux 6.6
  • mkcomposefs is now multi-threaded when computing digests and copying files
  • mkcomposefs now uses copy_file_range when copying files
  • Added some initial rust crates to handle composefs dump files
  • Added fuzz tests
  • Documentation updates
  • Fix some crashes and leaks
  • Improve error reporting
  • Fix build on various libc types and versions

Release 1.0.3

29 Jan 13:15
v1.0.3
2d5cdcb
Compare
Choose a tag to compare

Changes since 1.0.2:

  • Image format version 1 was added that allows storing overlay whiteouts in
    a composefs image.
  • libcomposefs added max_version option
  • mkcomposefs added --version and --max-version options
  • composefs can now be build without go-md2man
  • Minor bugfix handling file read errors

Release version 1.0.2

13 Dec 12:06
v1.0.2
Compare
Choose a tag to compare

Changes since 1.0.1:

  • Dropped composefs-from-json in tests in favour of using the
    composefs-info dump format.
  • libyajl dependency dropped
  • libcomposefs now limits the number of xattrs per file to 64k
  • Fixed build against libc without reallocarray
  • Performance fixes
  • go-md2man is used instead of pandoc for manpages
  • Minor fixes to spec file

Release version 1.0.1

13 Oct 12:33
v1.0.1
29bf65c
Compare
Choose a tag to compare

Changes since 1.0.0:

  • mkcomposefs now supports --from-file which reads image descriptions
    in the format of composefs-info dump output.
  • composefs-info dump output now shows content and hardlink target
  • mount.composefs now uses the new mount api on recent kernels, which
    fixes a regression in escaping commas in upperdir/lowerdir/workdir
    options.
  • lcfs_node_set_payload() now accepts NULL to unset
  • Some performance improvements
  • Fixed errors in error reporting
  • Added more manpages

Release version 1.0.0

26 Sep 13:24
v1.0.0
a21eb03
Compare
Choose a tag to compare

This is the first stable release of composefs. Starting now, we
guarantee a stable library ABI and a binary stable file format. The
later means that any image build from an identical lcfs_node tree and
identical write options, will produce a file that is binary identical
to a later run even with a different version. The same is true for
a mkcomposefs run with the same options.

Major changes since 0.1.4:

  • Added a soname with version to libcomposefs

  • All required overlayfs xattr changes are now upstream and the
    corresponding image generation changes have been made in
    composefs. This includes support for escaping overlayfs xattrs and
    whiteouts for nested overlayfs mounts.

  • fs-verity built-in signature support was dropped in favour of
    userspace signatures.

  • The erofs images now uses the new bloom filter for faster xattr
    lookups. This is backward compatible and old erofs version still
    work (sans the speedup).

  • Files can now be inlined in the erofs image to avoid overhead of
    using redirections for small files.

  • There is a new API to regenerate a lcfs_node tree from a composefs
    image file.

  • There is a new composefs-info tool that lets you dump info about
    images, including what objects it refers to and which ones are
    missing from a given basedir.

  • Various fixes, cleanups and new tests

Signed-off-by: Alexander Larsson [email protected]

Release 0.1.4

11 Jul 12:10
v0.1.4
1704f82
Compare
Choose a tag to compare
Release 0.1.4 Pre-release
Pre-release

Major changes in this version:

  • kernel module was dropped
  • overlayfs digest xattrs used change to match the final (v5) patchset
  • Updated overlayfs mounts to use the final syntax for datalower dirs
  • library now exposes API to compute fs-verity digests
  • library dropped ctime and node removal API
  • Fixed mkcomposefs on big endian
  • mkcomposefs now tries to use reflinks if possible
  • writer-json was renamed to composefs-from-json
  • composefs-from-json sandboxes the json parsing
  • composefs-from-json honors mtime
  • mount.composefs now supports --help
  • Added initial version of composefs-fuse
  • Various code cleanups
  • Updated docs

Release 0.1.3

28 Apr 12:14
v0.1.3
a13a89a
Compare
Choose a tag to compare
Release 0.1.3 Pre-release
Pre-release

Added option to specify image mount point to lcfs_mount().