summaryrefslogtreecommitdiff
path: root/src/basic/io-util.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-01-26 19:02:12 +0100
committerLennart Poettering <lennart@poettering.net>2016-01-27 02:21:28 +0100
commita90fb858ac91de4c14c9b68da6060731954515b7 (patch)
tree3e458d4a53d309c5cec38c16e9457f3969cf8ab2 /src/basic/io-util.h
parent05e8f270a9ca97e1014184df113494b143639fb8 (diff)
downloadsystemd-a90fb858ac91de4c14c9b68da6060731954515b7.tar.gz
systemd-a90fb858ac91de4c14c9b68da6060731954515b7.tar.bz2
systemd-a90fb858ac91de4c14c9b68da6060731954515b7.zip
machined: add early checks for unrealistically large image/pool sizes
Diffstat (limited to 'src/basic/io-util.h')
-rw-r--r--src/basic/io-util.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/basic/io-util.h b/src/basic/io-util.h
index 5f77a556c0..7d0d2bd810 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);
+
+}