Find a file
Zbigniew Jędrzejewski-Szmek e41ef6fd00 journal: adapt for new improved LZ4_decompress_safe_partial()
With lz4 1.8.3, this function can now decompress partial results into a smaller
buffer. The release news don't say anything interesting, but the test case that
was previously failing now works OK.

Fixes #10259.

A test is added. It shows that with *older* lz4, a partial decompression can
occur with the returned size smaller then the requested number of bytes _and_
smaller then the size of the compressed data:

(lz4-libs-1.8.2-1.fc29.x86_64)
Compressed 4194304 → 16464
Decompressed → 4194304
Decompressed partial 12/4194304 → 4194304
Decompressed partial 1/1 → -2 (bad)
Decompressed partial 2/2 → -2 (bad)
Decompressed partial 3/3 → -2 (bad)
Decompressed partial 4/4 → -2 (bad)
Decompressed partial 5/5 → -2 (bad)
Decompressed partial 6/6 → 6 (good)
Decompressed partial 7/7 → 6 (good)
Decompressed partial 8/8 → 6 (good)
Decompressed partial 9/9 → 6 (good)
Decompressed partial 10/10 → 6 (good)
Decompressed partial 11/11 → 6 (good)
Decompressed partial 12/12 → 6 (good)
Decompressed partial 13/13 → 6 (good)
Decompressed partial 14/14 → 6 (good)
Decompressed partial 15/15 → 6 (good)
Decompressed partial 16/16 → 6 (good)
Decompressed partial 17/17 → 6 (good)
Decompressed partial 18/18 → -16459 (bad)

(lz4-libs-1.8.3-1.fc29.x86_64)
Compressed 4194304 → 16464
Decompressed → 4194304
Decompressed partial 12/4194304 → 12
Decompressed partial 1/1 → 1 (good)
Decompressed partial 2/2 → 2 (good)
Decompressed partial 3/3 → 3 (good)
Decompressed partial 4/4 → 4 (good)
...

If we got such a short "successful" decompression in decompress_startswith() as
implemented before this patch, we could be confused and return a false negative
result. But it turns out that this only occurs with small output buffer
sizes. We use greedy_realloc() to manager the buffer, so it is always at least
64 bytes. I couldn't hit a case where decompress_startswith() would actually
return a bogus result. But since the lack of proof is not conclusive, the code
for *older* lz4 is changed too, just to be safe. We cannot rule out that on a
different architecture or with some unlucky compressed string we could hit this
corner case.

The fallback code is guarded by a version check. The check uses a function not
the compile-time define, because there was no soversion bump in lz4 or new
symbols, and we could be compiled against a newer lz4 and linked at runtime
with an older one. (This happens routinely e.g. when somebody upgrades a subset
of distro packages.)
2018-10-30 11:04:51 +01:00
.github/ISSUE_TEMPLATE docs: move markdown docs from .github/ to docs/ 2018-09-08 13:39:03 -07:00
.lgtm/cpp-queries lgtm: drop redundant newlines 2018-10-26 14:52:17 +02:00
.mkosi mkosi: use Fedora 29 2018-10-18 16:27:21 +02:00
catalog core: implement per unit journal rate limiting 2018-10-18 09:56:20 +02:00
coccinelle tree-wide: CMP()ify all the things 2018-10-16 17:45:53 +02:00
docs CODING_STYLE: briefly mention that fgets() should not be used anymore 2018-10-26 10:52:41 +02:00
factory/etc factory: remove broken pam_limits 2014-07-30 15:21:54 +02:00
hwdb hwdb: add Aiptek Hyperpen 12000U (#10424) 2018-10-17 02:39:52 +09:00
man Merge pull request #10525 from poettering/journal-vaccum-all 2018-10-26 10:36:25 +02:00
modprobe.d Add SPDX license headers to various assorted files 2017-11-19 19:08:15 +01:00
network Drop my copyright headers 2018-06-14 13:03:20 +02:00
po po: update Polish translation 2018-10-28 12:52:46 +01:00
presets Drop my copyright headers 2018-06-14 13:03:20 +02:00
rules Merge pull request #7411 from joergsteffens/tapechanger 2018-10-22 21:43:58 +02:00
shell-completion bash-completion: analyze: add timespan 2018-10-23 22:28:42 +09:00
src journal: adapt for new improved LZ4_decompress_safe_partial() 2018-10-30 11:04:51 +01:00
sysctl.d Revert "sysctl.d: request ECN on both in and outgoing connections" 2018-08-20 09:37:41 +02:00
sysusers.d sysusers,tmpfiles: re-create systemd-network, systemd-resolve and systemd-timesync 2018-07-16 17:11:50 +02:00
test Merge pull request #10378 from poettering/json-fuzz-fix 2018-10-25 16:25:39 +02:00
tmpfiles.d sysusers,tmpfiles: re-create systemd-network, systemd-resolve and systemd-timesync 2018-07-16 17:11:50 +02:00
tools tests: add a fuzzer for the json parser and dumper 2018-10-10 10:13:30 +02:00
travis-ci travis: use Fedora 27 as a base image 2018-06-05 12:03:18 +03:00
units units: drop systemd-user-sessions.service ordering dep on systemd-journal-flush.service (#10502) 2018-10-25 04:41:02 +09:00
xorg login: avoid external process call 2018-01-12 18:02:57 +01:00
.dir-locals.el make dir-locals work again with emacs 26.1 2018-07-23 20:00:48 +02:00
.editorconfig editorconfig: add rule for meson.build files (#6671) 2017-08-28 16:37:23 +02:00
.gitattributes git: indicate that tabs are never OK in the systemd tree 2013-10-30 02:25:38 +01:00
.gitignore gitignore: add nspawn image lock and mkosi temporary files 2018-09-07 20:00:22 +02:00
.lgtm.yml LGTM: make LGTM.com use meson from pip 2018-07-24 01:37:47 +09:00
.mailmap update NEWS contributors list again 2018-06-20 13:32:57 +02:00
.travis.yml Merge pull request #9193 from keszybz/coverity 2018-06-14 09:59:58 +02:00
.vimrc vimrc: fix indentation logic for our docbook xml files 2016-04-29 12:23:34 +02:00
.ycm_extra_conf.py ycm: add doc string for all the functions in configuration file 2017-11-29 13:21:49 -07:00
configure build-sys: add basic support for ./configure && make && make install 2017-07-18 10:05:06 -04:00
LICENSE.GPL2 relicense to LGPLv2.1 (with exceptions) 2012-04-12 00:24:39 +02:00
LICENSE.LGPL2.1 licence: remove references to old FSF address 2012-12-17 11:41:31 +01:00
Makefile build-sys: Fix Makefile wrapper for install target (#6548) 2017-08-07 11:29:20 +02:00
meson.build Drop support for lz4 < 1.3.0 2018-10-29 21:54:42 +01:00
meson_options.txt main: bump fs.nr_open + fs.max-file to their largest possible values 2018-10-17 14:40:39 +02:00
mkosi.build mkosi: update the boot loader from our freshly built one 2018-10-16 16:44:34 +02:00
mkosi.default mkosi: create .mkosi directory 2016-10-06 11:53:58 -04:00
NEWS main: bump fs.nr_open + fs.max-file to their largest possible values 2018-10-17 14:40:39 +02:00
README Drop support for lz4 < 1.3.0 2018-10-29 21:54:42 +01:00
README.md doc: Fix link to CONTRIBUTING.md (#10109) 2018-09-18 12:29:36 +09:00
TODO Merge pull request #10415 from poettering/boot-loader-spec-tweaks 2018-10-22 15:15:45 +02:00
zanata.xml po: add basic fedora.zanata.org configuration 2018-02-19 13:56:57 +01:00

systemd - System and Service Manager

Count of open issues over time Count of open pull requests over time Build Status
Coverity Scan Status
CII Best Practices
Build Status
Language Grade: C/C++

Details

General information about systemd can be found in the systemd Wiki.

Information about build requirements are provided in the README file.

Consult our NEWS file for information about what's new in the most recent systemd versions.

Please see the HACKING file for information how to hack on systemd and test your modifications.

Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.

When preparing patches for systemd, please follow our Coding Style Guidelines.

If you are looking for support, please contact our mailing list or join our IRC channel.

Stable branches with backported patches are available in the stable repo.