Skip to content
This repository has been archived by the owner on Aug 6, 2020. It is now read-only.

Commit

Permalink
journald: set a limit on the number of fields (1k)
Browse files Browse the repository at this point in the history
We allocate a iovec entry for each field, so with many short entries,
our memory usage and processing time can be large, even with a relatively
small message size. Let's refuse overly long entries.

CVE-2018-16865
https://bugzilla.redhat.com/show_bug.cgi?id=1653861

What from I can see, the problem is not from an alloca, despite what the CVE
description says, but from the attack multiplication that comes from creating
many very small iovecs: (void* + size_t) for each three bytes of input message.
  • Loading branch information
keszybz committed Jan 9, 2019
1 parent f0136e0 commit 052c57f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/journal/journald-native.c
Expand Up @@ -141,6 +141,11 @@ static int server_process_entry(
}

/* A property follows */
if (n > ENTRY_FIELD_COUNT_MAX) {
log_debug("Received an entry that has more than " STRINGIFY(ENTRY_FIELD_COUNT_MAX) " fields, ignoring entry.");
r = 1;
goto finish;
}

/* n existing properties, 1 new, +1 for _TRANSPORT */
if (!GREEDY_REALLOC(iovec, m,
Expand Down
3 changes: 3 additions & 0 deletions src/shared/journal-importer.h
Expand Up @@ -21,6 +21,9 @@
#endif
#define LINE_CHUNK 8*1024u

/* The maximum number of fields in an entry */
#define ENTRY_FIELD_COUNT_MAX 1024

struct iovec_wrapper {
struct iovec *iovec;
size_t size_bytes;
Expand Down

0 comments on commit 052c57f

Please sign in to comment.