From: Lennart Poettering Date: Tue, 26 Jan 2016 18:02:12 +0000 (+0100) Subject: machined: add early checks for unrealistically large image/pool sizes X-Git-Tag: v229.1~1^2~45 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=69db37b5fbcf6d4d26839860d5e067a45f3f7023 machined: add early checks for unrealistically large image/pool sizes --- diff --git a/src/basic/io-util.h b/src/basic/io-util.h index 5f77a556c..7d0d2bd81 100644 --- a/src/basic/io-util.h +++ b/src/basic/io-util.h @@ -77,3 +77,21 @@ static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) { return k; } + +static inline bool FILE_SIZE_VALID(uint64_t l) { + /* ftruncate() and friends take an unsigned file size, but actually cannot deal with file sizes larger than + * 2^63 since the kernel internally handles it as signed value. This call allows checking for this early. */ + + return (l >> 63) == 0; +} + +static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) { + + /* Same as above, but allows one extra value: -1 as indication for infinity. */ + + if (l == (uint64_t) -1) + return true; + + return FILE_SIZE_VALID(l); + +}