From: Daan De Meyer Date: Wed, 3 Nov 2021 14:37:55 +0000 (+0000) Subject: journal: Don't allocate objects above UINT32_MAX in compact mode X-Git-Tag: v252-rc1~4^2~5 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=d06727aec2840dc3d6d1cb2b7032562eda8bf3b4;p=systemd%2F.git journal: Don't allocate objects above UINT32_MAX in compact mode To allow storing offsets as 32-bit, we should never allocate objects outside of the 32-bit range. --- diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index 906e69f390..edec27610f 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -586,6 +586,10 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) if (f->metrics.max_size > 0 && new_size > f->metrics.max_size) return -E2BIG; + /* Refuse to go over 4G in compact mode so offsets can be stored in 32-bit. */ + if (JOURNAL_HEADER_COMPACT(f->header) && new_size > UINT32_MAX) + return -E2BIG; + if (new_size > f->metrics.min_size && f->metrics.keep_free > 0) { struct statvfs svfs;