From da6053d0a7c16795e7fac1f9ba6694863918a597 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 27 Apr 2018 14:09:31 +0200 Subject: [PATCH 1/4] tree-wide: be more careful with the type of array sizes Previously we were a bit sloppy with the index and size types of arrays, we'd regularly use unsigned. While I don't think this ever resulted in real issues I think we should be more careful there and follow a stricter regime: unless there's a strong reason not to use size_t for array sizes and indexes, size_t it should be. Any allocations we do ultimately will use size_t anyway, and converting forth and back between unsigned and size_t will always be a source of problems. Note that on 32bit machines "unsigned" and "size_t" are equivalent, and on 64bit machines our arrays shouldn't grow that large anyway, and if they do we have a problem, however that kind of overly large allocation we have protections for usually, but for overflows we do not have that so much, hence let's add it. So yeah, it's a story of the current code being already "good enough", but I think some extra type hygiene is better. This patch tries to be comprehensive, but it probably isn't and I missed a few cases. But I guess we can cover that later as we notice it. Among smaller fixes, this changes: 1. strv_length()' return type becomes size_t 2. the unit file changes array size becomes size_t 3. DNS answer and query array sizes become size_t Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=76745 --- src/activate/activate.c | 18 +++---- src/basic/calendarspec.c | 4 +- src/basic/conf-files.c | 2 +- src/basic/env-util.c | 12 ++--- src/basic/env-util.h | 4 +- src/basic/escape.c | 4 +- src/basic/fd-util.c | 10 ++-- src/basic/fd-util.h | 4 +- src/basic/io-util.h | 9 ++-- src/basic/locale-util.c | 2 +- src/basic/log.c | 2 +- src/basic/mempool.c | 9 ++-- src/basic/process-util.c | 6 +-- src/basic/process-util.h | 2 +- src/basic/random-util.c | 2 +- src/basic/string-util.h | 2 +- src/basic/strv.c | 22 ++++----- src/basic/strv.h | 6 +-- src/basic/time-util.c | 8 ++-- src/core/dbus-manager.c | 31 ++++++------ src/core/execute.c | 46 +++++++++--------- src/core/execute.h | 12 ++--- src/core/manager.c | 2 +- src/core/namespace.c | 56 +++++++++++----------- src/core/namespace.h | 12 ++--- src/core/service.c | 2 +- src/core/service.h | 2 +- src/core/socket.c | 16 +++---- src/core/socket.h | 2 +- src/firstboot/firstboot.c | 4 +- src/journal/journald-server.c | 8 ++-- src/libsystemd-network/network-internal.c | 2 +- src/libsystemd-network/sd-dhcp-lease.c | 2 +- src/libsystemd/sd-bus/bus-internal.h | 2 +- src/libsystemd/sd-bus/bus-message.c | 10 ++-- src/libsystemd/sd-bus/bus-message.h | 4 +- src/libsystemd/sd-login/sd-login.c | 4 +- src/libsystemd/sd-network/sd-network.c | 4 +- src/machine/machinectl.c | 2 +- src/resolve/resolvectl.c | 6 +-- src/resolve/resolved-dns-answer.c | 16 +++---- src/resolve/resolved-dns-answer.h | 18 +++---- src/resolve/resolved-dns-question.c | 16 +++---- src/resolve/resolved-dns-question.h | 8 ++-- src/resolve/resolved-mdns.c | 7 ++- src/shared/base-filesystem.c | 2 +- src/shared/bootspec.c | 6 +-- src/shared/bus-unit-util.c | 2 +- src/shared/bus-unit-util.h | 2 +- src/shared/fdset.c | 10 ++-- src/shared/fdset.h | 2 +- src/shared/install.c | 58 +++++++++++------------ src/shared/install.h | 32 ++++++------- src/shared/path-lookup.c | 4 +- src/systemctl/systemctl.c | 14 +++--- src/test/test-install-root.c | 22 ++++----- src/test/test-install.c | 2 +- 57 files changed, 288 insertions(+), 290 deletions(-) diff --git a/src/activate/activate.c b/src/activate/activate.c index d598965b47..9d027432f3 100644 --- a/src/activate/activate.c +++ b/src/activate/activate.c @@ -116,11 +116,11 @@ static int open_sockets(int *epoll_fd, bool accept) { return count; } -static int exec_process(const char* name, char **argv, char **env, int start_fd, int n_fds) { +static int exec_process(const char* name, char **argv, char **env, int start_fd, size_t n_fds) { _cleanup_strv_free_ char **envp = NULL; _cleanup_free_ char *joined = NULL; - unsigned n_env = 0, length; + size_t n_env = 0, length; const char *tocopy; char **s; int r; @@ -199,7 +199,7 @@ static int exec_process(const char* name, char **argv, char **env, int start_fd, start_fd = SD_LISTEN_FDS_START; } - if (asprintf((char**)(envp + n_env++), "LISTEN_FDS=%i", n_fds) < 0) + if (asprintf((char**)(envp + n_env++), "LISTEN_FDS=%zu", n_fds) < 0) return log_oom(); if (asprintf((char**)(envp + n_env++), "LISTEN_PID=" PID_FMT, getpid_cached()) < 0) @@ -209,18 +209,18 @@ static int exec_process(const char* name, char **argv, char **env, int start_fd, _cleanup_free_ char *names = NULL; size_t len; char *e; - int i; len = strv_length(arg_fdnames); - if (len == 1) + if (len == 1) { + size_t i; + for (i = 1; i < n_fds; i++) { r = strv_extend(&arg_fdnames, arg_fdnames[0]); if (r < 0) return log_error_errno(r, "Failed to extend strv: %m"); } - else if (len != (unsigned) n_fds) - log_warning("The number of fd names is different than number of fds: %zu vs %d", - len, n_fds); + } else if (len != n_fds) + log_warning("The number of fd names is different than number of fds: %zu vs %zu", len, n_fds); names = strv_join(arg_fdnames, ":"); if (!names) @@ -501,7 +501,7 @@ int main(int argc, char **argv, char **envp) { break; } - exec_process(argv[optind], argv + optind, envp, SD_LISTEN_FDS_START, n); + exec_process(argv[optind], argv + optind, envp, SD_LISTEN_FDS_START, (size_t) n); return EXIT_SUCCESS; } diff --git a/src/basic/calendarspec.c b/src/basic/calendarspec.c index 20db9181dc..24867f807b 100644 --- a/src/basic/calendarspec.c +++ b/src/basic/calendarspec.c @@ -84,8 +84,8 @@ static int component_compare(const void *_a, const void *_b) { } static void normalize_chain(CalendarComponent **c) { - unsigned n = 0, k; CalendarComponent **b, *i, **j, *next; + size_t n = 0, k; assert(c); @@ -420,7 +420,7 @@ static int parse_weekdays(const char **p, CalendarSpec *c) { assert(c); for (;;) { - unsigned i; + size_t i; for (i = 0; i < ELEMENTSOF(day_nr); i++) { size_t skip; diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c index 8e0fb06ad9..b5cad5a6e3 100644 --- a/src/basic/conf-files.c +++ b/src/basic/conf-files.c @@ -152,8 +152,8 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p * - do nothing if our new entry matches the existing entry, * - replace the existing entry if our new entry has higher priority. */ + size_t i; char *t; - unsigned i; int r; for (i = 0; i < strv_length(*strv); i++) { diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 105fa7973d..0ebf66c572 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -196,11 +196,11 @@ static int env_append(char **r, char ***k, char **a) { return 0; } -char **strv_env_merge(unsigned n_lists, ...) { +char **strv_env_merge(size_t n_lists, ...) { size_t n = 0; char **l, **k, **r; va_list ap; - unsigned i; + size_t i; /* Merges an arbitrary number of environment sets */ @@ -275,7 +275,7 @@ static bool env_entry_has_name(const char *entry, const char *name) { return *t == '='; } -char **strv_env_delete(char **x, unsigned n_lists, ...) { +char **strv_env_delete(char **x, size_t n_lists, ...) { size_t n, i = 0; char **k, **r; va_list ap; @@ -290,7 +290,7 @@ char **strv_env_delete(char **x, unsigned n_lists, ...) { return NULL; STRV_FOREACH(k, x) { - unsigned v; + size_t v; va_start(ap, n_lists); for (v = 0; v < n_lists; v++) { @@ -676,7 +676,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { char **replace_env_argv(char **argv, char **env) { char **ret, **i; - unsigned k = 0, l = 0; + size_t k = 0, l = 0; l = strv_length(argv); @@ -690,7 +690,7 @@ char **replace_env_argv(char **argv, char **env) { if ((*i)[0] == '$' && !IN_SET((*i)[1], '{', '$')) { char *e; char **w, **m = NULL; - unsigned q; + size_t q; e = strv_env_get(env, *i+1); if (e) { diff --git a/src/basic/env-util.h b/src/basic/env-util.h index 5aa3525095..3d7e14ccb1 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -37,8 +37,8 @@ char **strv_env_clean_with_callback(char **l, void (*invalid_callback)(const cha bool strv_env_name_is_valid(char **l); bool strv_env_name_or_assignment_is_valid(char **l); -char **strv_env_merge(unsigned n_lists, ...); -char **strv_env_delete(char **x, unsigned n_lists, ...); /* New copy */ +char **strv_env_merge(size_t n_lists, ...); +char **strv_env_delete(char **x, size_t n_lists, ...); /* New copy */ char **strv_env_set(char **x, const char *p); /* New copy ... */ char **strv_env_unset(char **l, const char *p); /* In place ... */ diff --git a/src/basic/escape.c b/src/basic/escape.c index 8b39d53f84..fe951e3db8 100644 --- a/src/basic/escape.c +++ b/src/basic/escape.c @@ -188,7 +188,7 @@ int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit) /* C++11 style 16bit unicode */ int a[4]; - unsigned i; + size_t i; uint32_t c; if (length != (size_t) -1 && length < 5) @@ -215,7 +215,7 @@ int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit) /* C++11 style 32bit unicode */ int a[8]; - unsigned i; + size_t i; char32_t c; if (length != (size_t) -1 && length < 9) diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c index 1159f83075..4b3e7ed557 100644 --- a/src/basic/fd-util.c +++ b/src/basic/fd-util.c @@ -85,8 +85,8 @@ void safe_close_pair(int p[]) { p[1] = safe_close(p[1]); } -void close_many(const int fds[], unsigned n_fd) { - unsigned i; +void close_many(const int fds[], size_t n_fd) { + size_t i; assert(fds || n_fd <= 0); @@ -178,8 +178,8 @@ int fd_cloexec(int fd, bool cloexec) { return 0; } -_pure_ static bool fd_in_set(int fd, const int fdset[], unsigned n_fdset) { - unsigned i; +_pure_ static bool fd_in_set(int fd, const int fdset[], size_t n_fdset) { + size_t i; assert(n_fdset == 0 || fdset); @@ -190,7 +190,7 @@ _pure_ static bool fd_in_set(int fd, const int fdset[], unsigned n_fdset) { return false; } -int close_all_fds(const int except[], unsigned n_except) { +int close_all_fds(const int except[], size_t n_except) { _cleanup_closedir_ DIR *d = NULL; struct dirent *de; int r = 0; diff --git a/src/basic/fd-util.h b/src/basic/fd-util.h index ded022f738..89c3f34c7b 100644 --- a/src/basic/fd-util.h +++ b/src/basic/fd-util.h @@ -29,7 +29,7 @@ static inline int safe_close_above_stdio(int fd) { return safe_close(fd); } -void close_many(const int fds[], unsigned n_fd); +void close_many(const int fds[], size_t n_fd); int fclose_nointr(FILE *f); FILE* safe_fclose(FILE *f); @@ -59,7 +59,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DIR*, closedir); int fd_nonblock(int fd, bool nonblock); int fd_cloexec(int fd, bool cloexec); -int close_all_fds(const int except[], unsigned n_except); +int close_all_fds(const int except[], size_t n_except); int same_fd(int a, int b); diff --git a/src/basic/io-util.h b/src/basic/io-util.h index c34d97c653..e4717b6f30 100644 --- a/src/basic/io-util.h +++ b/src/basic/io-util.h @@ -28,9 +28,8 @@ int fd_wait_for_event(int fd, int event, usec_t timeout); ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length); -static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, unsigned n) { - unsigned j; - size_t r = 0; +static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, size_t n) { + size_t j, r = 0; for (j = 0; j < n; j++) r += i[j].iov_len; @@ -38,8 +37,8 @@ static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, unsigned n) { return r; } -static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) { - unsigned j; +static inline size_t IOVEC_INCREMENT(struct iovec *i, size_t n, size_t k) { + size_t j; for (j = 0; j < n; j++) { size_t sub; diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c index 9c3f757da7..0a32bca8e8 100644 --- a/src/basic/locale-util.c +++ b/src/basic/locale-util.c @@ -71,7 +71,7 @@ static int add_locales_from_archive(Set *locales) { _cleanup_close_ int fd = -1; size_t sz = 0; struct stat st; - unsigned i; + size_t i; int r; fd = open("/usr/lib/locale/locale-archive", O_RDONLY|O_NOCTTY|O_CLOEXEC); diff --git a/src/basic/log.c b/src/basic/log.c index bab61d3140..77d016ecb3 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -341,8 +341,8 @@ static int write_to_console( char location[256], prefix[1 + DECIMAL_STR_MAX(int) + 2]; struct iovec iovec[6] = {}; - unsigned n = 0; bool highlight; + size_t n = 0; if (console_fd < 0) return 0; diff --git a/src/basic/mempool.c b/src/basic/mempool.c index de04215ee9..4be4a3d38e 100644 --- a/src/basic/mempool.c +++ b/src/basic/mempool.c @@ -15,12 +15,12 @@ struct pool { struct pool *next; - unsigned n_tiles; - unsigned n_used; + size_t n_tiles; + size_t n_used; }; void* mempool_alloc_tile(struct mempool *mp) { - unsigned i; + size_t i; /* When a tile is released we add it to the list and simply * place the next pointer at its offset 0. */ @@ -38,8 +38,7 @@ void* mempool_alloc_tile(struct mempool *mp) { if (_unlikely_(!mp->first_pool) || _unlikely_(mp->first_pool->n_used >= mp->first_pool->n_tiles)) { - unsigned n; - size_t size; + size_t size, n; struct pool *p; n = mp->first_pool ? mp->first_pool->n_tiles : 0; diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 76bc9a0cb6..960920d3dd 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -880,7 +880,7 @@ int getenv_for_pid(pid_t pid, const char *field, char **ret) { do { char line[LINE_MAX]; - unsigned i; + size_t i; for (i = 0; i < sizeof(line)-1; i++) { int c; @@ -1375,9 +1375,9 @@ int safe_fork_full( return 0; } -int fork_agent(const char *name, const int except[], unsigned n_except, pid_t *ret_pid, const char *path, ...) { +int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) { bool stdout_is_tty, stderr_is_tty; - unsigned n, i; + size_t n, i; va_list ap; char **l; int r; diff --git a/src/basic/process-util.h b/src/basic/process-util.h index 49d28cdf40..f8d1b5e3e8 100644 --- a/src/basic/process-util.h +++ b/src/basic/process-util.h @@ -171,7 +171,7 @@ static inline int safe_fork(const char *name, ForkFlags flags, pid_t *ret_pid) { return safe_fork_full(name, NULL, 0, flags, ret_pid); } -int fork_agent(const char *name, const int except[], unsigned n_except, pid_t *pid, const char *path, ...); +int fork_agent(const char *name, const int except[], size_t n_except, pid_t *pid, const char *path, ...); #if SIZEOF_PID_T == 4 /* The highest possibly (theoretic) pid_t value on this architecture. */ diff --git a/src/basic/random-util.c b/src/basic/random-util.c index 1623932f18..0750083b88 100644 --- a/src/basic/random-util.c +++ b/src/basic/random-util.c @@ -35,7 +35,7 @@ int acquire_random_bytes(void *p, size_t n, bool high_quality_required) { static int have_syscall = -1; _cleanup_close_ int fd = -1; - unsigned already_done = 0; + size_t already_done = 0; int r; /* Gathers some randomness from the kernel. This call will never block. If diff --git a/src/basic/string-util.h b/src/basic/string-util.h index 4f500c87d4..3004b924bd 100644 --- a/src/basic/string-util.h +++ b/src/basic/string-util.h @@ -109,7 +109,7 @@ char *strjoin_real(const char *x, ...) _sentinel_; const char *_appendees_[] = { a, __VA_ARGS__ }; \ char *_d_, *_p_; \ size_t _len_ = 0; \ - unsigned _i_; \ + size_t _i_; \ for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \ _len_ += strlen(_appendees_[_i_]); \ _p_ = _d_ = alloca(_len_ + 1); \ diff --git a/src/basic/strv.c b/src/basic/strv.c index 07ac8834be..cb91f239e8 100644 --- a/src/basic/strv.c +++ b/src/basic/strv.c @@ -107,8 +107,8 @@ char **strv_copy(char * const *l) { return r; } -unsigned strv_length(char * const *l) { - unsigned n = 0; +size_t strv_length(char * const *l) { + size_t n = 0; if (!l) return 0; @@ -122,7 +122,7 @@ unsigned strv_length(char * const *l) { char **strv_new_ap(const char *x, va_list ap) { const char *s; char **a; - unsigned n = 0, i = 0; + size_t n = 0, i = 0; va_list aq; /* As a special trick we ignore all listed strings that equal @@ -257,7 +257,7 @@ int strv_extend_strv_concat(char ***a, char **b, const char *suffix) { char **strv_split(const char *s, const char *separator) { const char *word, *state; size_t l; - unsigned n, i; + size_t n, i; char **r; assert(s); @@ -287,7 +287,7 @@ char **strv_split(const char *s, const char *separator) { char **strv_split_newlines(const char *s) { char **l; - unsigned n; + size_t n; assert(s); @@ -380,7 +380,7 @@ char *strv_join(char **l, const char *separator) { int strv_push(char ***l, char *value) { char **c; - unsigned n, m; + size_t n, m; if (!value) return 0; @@ -405,7 +405,7 @@ int strv_push(char ***l, char *value) { int strv_push_pair(char ***l, char *a, char *b) { char **c; - unsigned n, m; + size_t n, m; if (!a && !b) return 0; @@ -431,9 +431,9 @@ int strv_push_pair(char ***l, char *a, char *b) { return 0; } -int strv_insert(char ***l, unsigned position, char *value) { +int strv_insert(char ***l, size_t position, char *value) { char **c; - unsigned n, m, i; + size_t n, m, i; if (!value) return 0; @@ -601,7 +601,7 @@ char **strv_parse_nulstr(const char *s, size_t l) { */ const char *p; - unsigned c = 0, i = 0; + size_t c = 0, i = 0; char **v; assert(s || l <= 0); @@ -765,7 +765,7 @@ int strv_extendf(char ***l, const char *format, ...) { } char **strv_reverse(char **l) { - unsigned n, i; + size_t n, i; n = strv_length(l); if (n <= 1) diff --git a/src/basic/strv.h b/src/basic/strv.h index 79512c0ce3..958c5f3a98 100644 --- a/src/basic/strv.h +++ b/src/basic/strv.h @@ -32,7 +32,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free_erase); void strv_clear(char **l); char **strv_copy(char * const *l); -unsigned strv_length(char * const *l) _pure_; +size_t strv_length(char * const *l) _pure_; int strv_extend_strv(char ***a, char **b, bool filter_duplicates); int strv_extend_strv_concat(char ***a, char **b, const char *suffix); @@ -41,7 +41,7 @@ int strv_extendf(char ***l, const char *format, ...) _printf_(2,0); int strv_extend_front(char ***l, const char *value); int strv_push(char ***l, char *value); int strv_push_pair(char ***l, char *a, char *b); -int strv_insert(char ***l, unsigned position, char *value); +int strv_insert(char ***l, size_t position, char *value); static inline int strv_push_prepend(char ***l, char *value) { return strv_insert(l, 0, value); @@ -113,7 +113,7 @@ void strv_print(char **l); if (!first) \ _l = (char**) &first; \ else { \ - unsigned _n; \ + size_t _n; \ va_list _ap; \ \ _n = 1; \ diff --git a/src/basic/time-util.c b/src/basic/time-util.c index f7067e9d0c..0880d00ef3 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c @@ -434,7 +434,7 @@ char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) { { "us", 1 }, }; - unsigned i; + size_t i; char *p = buf; bool something = false; @@ -612,7 +612,7 @@ static int parse_timestamp_impl(const char *t, usec_t *usec, bool with_tz) { time_t x; usec_t x_usec, plus = 0, minus = 0, ret; int r, weekday = -1, dst = -1; - unsigned i; + size_t i; /* * Allowed syntaxes: @@ -960,7 +960,7 @@ static char* extract_multiplier(char *p, usec_t *multiplier) { { "us", 1ULL }, { "µs", 1ULL }, }; - unsigned i; + size_t i; for (i = 0; i < ELEMENTSOF(table); i++) { char *e; @@ -1134,8 +1134,8 @@ int parse_nsec(const char *t, nsec_t *nsec) { for (;;) { long long l, z = 0; + size_t n = 0, i; char *e; - unsigned i, n = 0; p += strspn(p, WHITESPACE); diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index 2d651a2196..5e1741d2b1 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -1972,9 +1972,10 @@ static int install_error( sd_bus_error *error, int c, UnitFileChange *changes, - unsigned n_changes) { + size_t n_changes) { + + size_t i; int r; - unsigned i; for (i = 0; i < n_changes; i++) @@ -2030,12 +2031,12 @@ static int reply_unit_file_changes_and_free( sd_bus_message *message, int carries_install_info, UnitFileChange *changes, - unsigned n_changes, + size_t n_changes, sd_bus_error *error) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; bool bad = false, good = false; - unsigned i; + size_t i; int r; if (unit_file_changes_have_modification(changes, n_changes)) { @@ -2096,13 +2097,13 @@ fail: static int method_enable_unit_files_generic( sd_bus_message *message, Manager *m, - int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, unsigned *n_changes), + int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes), bool carries_install_info, sd_bus_error *error) { _cleanup_strv_free_ char **l = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; UnitFileFlags flags; int runtime, force, r; @@ -2144,7 +2145,7 @@ static int method_link_unit_files(sd_bus_message *message, void *userdata, sd_bu return method_enable_unit_files_generic(message, userdata, unit_file_link, false, error); } -static int unit_file_preset_without_mode(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, unsigned *n_changes) { +static int unit_file_preset_without_mode(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) { return unit_file_preset(scope, flags, root_dir, files, UNIT_FILE_PRESET_FULL, changes, n_changes); } @@ -2160,7 +2161,7 @@ static int method_preset_unit_files_with_mode(sd_bus_message *message, void *use _cleanup_strv_free_ char **l = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; Manager *m = userdata; UnitFilePresetMode mm; int runtime, force, r; @@ -2204,12 +2205,12 @@ static int method_preset_unit_files_with_mode(sd_bus_message *message, void *use static int method_disable_unit_files_generic( sd_bus_message *message, Manager *m, - int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, unsigned *n_changes), + int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes), sd_bus_error *error) { _cleanup_strv_free_ char **l = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; int r, runtime; assert(message); @@ -2247,7 +2248,7 @@ static int method_unmask_unit_files(sd_bus_message *message, void *userdata, sd_ static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) { _cleanup_strv_free_ char **l = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; Manager *m = userdata; int r; @@ -2273,7 +2274,7 @@ static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_ static int method_set_default_target(sd_bus_message *message, void *userdata, sd_bus_error *error) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; Manager *m = userdata; const char *name; int force, r; @@ -2304,7 +2305,7 @@ static int method_set_default_target(sd_bus_message *message, void *userdata, sd static int method_preset_all_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; Manager *m = userdata; UnitFilePresetMode mm; const char *mode; @@ -2349,7 +2350,7 @@ static int method_add_dependency_unit_files(sd_bus_message *message, void *userd _cleanup_strv_free_ char **l = NULL; Manager *m = userdata; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; int runtime, force, r; char *target, *type; UnitDependency dep; @@ -2388,7 +2389,7 @@ static int method_add_dependency_unit_files(sd_bus_message *message, void *userd static int method_get_unit_file_links(sd_bus_message *message, void *userdata, sd_bus_error *error) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0, i; + size_t n_changes = 0, i; UnitFileFlags flags; const char *name; char **p; diff --git a/src/core/execute.c b/src/core/execute.c index be44166ce3..e9d244a9ae 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -106,7 +106,7 @@ #define SNDBUF_SIZE (8*1024*1024) -static int shift_fds(int fds[], unsigned n_fds) { +static int shift_fds(int fds[], size_t n_fds) { int start, restart_from; if (n_fds <= 0) @@ -151,8 +151,8 @@ static int shift_fds(int fds[], unsigned n_fds) { return 0; } -static int flags_fds(const int fds[], unsigned n_storage_fds, unsigned n_socket_fds, bool nonblock) { - unsigned i, n_fds; +static int flags_fds(const int fds[], size_t n_storage_fds, size_t n_socket_fds, bool nonblock) { + size_t i, n_fds; int r; n_fds = n_storage_fds + n_socket_fds; @@ -1113,7 +1113,7 @@ static int setup_pam( gid_t gid, const char *tty, char ***env, - int fds[], unsigned n_fds) { + int fds[], size_t n_fds) { #if HAVE_PAM @@ -1596,7 +1596,7 @@ static int build_environment( const Unit *u, const ExecContext *c, const ExecParameters *p, - unsigned n_fds, + size_t n_fds, const char *home, const char *username, const char *shell, @@ -1605,7 +1605,7 @@ static int build_environment( char ***ret) { _cleanup_strv_free_ char **our_env = NULL; - unsigned n_env = 0; + size_t n_env = 0; char *x; assert(u); @@ -1623,7 +1623,7 @@ static int build_environment( return -ENOMEM; our_env[n_env++] = x; - if (asprintf(&x, "LISTEN_FDS=%u", n_fds) < 0) + if (asprintf(&x, "LISTEN_FDS=%zu", n_fds) < 0) return -ENOMEM; our_env[n_env++] = x; @@ -2152,12 +2152,12 @@ static int compile_bind_mounts( const ExecContext *context, const ExecParameters *params, BindMount **ret_bind_mounts, - unsigned *ret_n_bind_mounts, + size_t *ret_n_bind_mounts, char ***ret_empty_directories) { _cleanup_strv_free_ char **empty_directories = NULL; BindMount *bind_mounts; - unsigned n, h = 0, i; + size_t n, h = 0, i; ExecDirectoryType t; int r; @@ -2303,7 +2303,7 @@ static int apply_mount_namespace( }; bool needs_sandboxing; BindMount *bind_mounts = NULL; - unsigned n_bind_mounts = 0; + size_t n_bind_mounts = 0; int r; assert(context); @@ -2526,7 +2526,7 @@ out: return r; } -static void append_socket_pair(int *array, unsigned *n, const int pair[2]) { +static void append_socket_pair(int *array, size_t *n, const int pair[2]) { assert(array); assert(n); @@ -2545,9 +2545,9 @@ static int close_remaining_fds( const DynamicCreds *dcreds, int user_lookup_fd, int socket_fd, - int *fds, unsigned n_fds) { + int *fds, size_t n_fds) { - unsigned n_dont_close = 0; + size_t n_dont_close = 0; int dont_close[n_fds + 12]; assert(params); @@ -2697,8 +2697,8 @@ static int exec_child( int socket_fd, int named_iofds[3], int *fds, - unsigned n_storage_fds, - unsigned n_socket_fds, + size_t n_storage_fds, + size_t n_socket_fds, char **files_env, int user_lookup_fd, int *exit_status) { @@ -2727,7 +2727,7 @@ static int exec_child( uid_t uid = UID_INVALID; gid_t gid = GID_INVALID; int i, r, ngids = 0; - unsigned n_fds; + size_t n_fds; ExecDirectoryType dt; int secure_bits; @@ -3433,7 +3433,7 @@ int exec_spawn(Unit *unit, _cleanup_strv_free_ char **files_env = NULL; int *fds = NULL; - unsigned n_storage_fds = 0, n_socket_fds = 0; + size_t n_storage_fds = 0, n_socket_fds = 0; _cleanup_free_ char *line = NULL; int socket_fd, r; int named_iofds[3] = { -1, -1, -1 }; @@ -3658,8 +3658,8 @@ static void exec_command_done(ExecCommand *c) { c->argv = strv_free(c->argv); } -void exec_command_done_array(ExecCommand *c, unsigned n) { - unsigned i; +void exec_command_done_array(ExecCommand *c, size_t n) { + size_t i; for (i = 0; i < n; i++) exec_command_done(c+i); @@ -3677,8 +3677,8 @@ ExecCommand* exec_command_free_list(ExecCommand *c) { return NULL; } -void exec_command_free_array(ExecCommand **c, unsigned n) { - unsigned i; +void exec_command_free_array(ExecCommand **c, size_t n) { + size_t i; for (i = 0; i < n; i++) c[i] = exec_command_free_list(c[i]); @@ -3724,9 +3724,9 @@ const char* exec_context_fdname(const ExecContext *c, int fd_index) { } static int exec_context_named_iofds(const ExecContext *c, const ExecParameters *p, int named_iofds[3]) { - unsigned i, targets; + size_t i, targets; const char* stdio_fdname[3]; - unsigned n_fds; + size_t n_fds; assert(c); assert(p); diff --git a/src/core/execute.h b/src/core/execute.h index 69f596efe2..ace94338e7 100644 --- a/src/core/execute.h +++ b/src/core/execute.h @@ -205,9 +205,9 @@ struct ExecContext { char **read_write_paths, **read_only_paths, **inaccessible_paths; unsigned long mount_flags; BindMount *bind_mounts; - unsigned n_bind_mounts; + size_t n_bind_mounts; TemporaryFileSystem *temporary_filesystems; - unsigned n_temporary_filesystems; + size_t n_temporary_filesystems; uint64_t capability_bounding_set; uint64_t capability_ambient_set; @@ -301,8 +301,8 @@ struct ExecParameters { int *fds; char **fd_names; - unsigned n_storage_fds; - unsigned n_socket_fds; + size_t n_storage_fds; + size_t n_socket_fds; ExecFlags flags; bool selinux_context_net:1; @@ -334,10 +334,10 @@ int exec_spawn(Unit *unit, DynamicCreds *dynamic_creds, pid_t *ret); -void exec_command_done_array(ExecCommand *c, unsigned n); +void exec_command_done_array(ExecCommand *c, size_t n); ExecCommand* exec_command_free_list(ExecCommand *c); -void exec_command_free_array(ExecCommand **c, unsigned n); +void exec_command_free_array(ExecCommand **c, size_t n); void exec_command_dump_list(ExecCommand *c, FILE *f, const char *prefix); void exec_command_append_list(ExecCommand **l, ExecCommand *e); diff --git a/src/core/manager.c b/src/core/manager.c index 656bdbb76d..6412fee476 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2103,7 +2103,7 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t _cleanup_free_ Unit **array_copy = NULL; Unit *u1, *u2, **array; int r, *fd_array = NULL; - unsigned n_fds = 0; + size_t n_fds = 0; bool found = false; ssize_t n; diff --git a/src/core/namespace.c b/src/core/namespace.c index cb34a79859..4a7fea920e 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -275,8 +275,8 @@ static int append_empty_dir_mounts(MountEntry **p, char **strv) { return 0; } -static int append_bind_mounts(MountEntry **p, const BindMount *binds, unsigned n) { - unsigned i; +static int append_bind_mounts(MountEntry **p, const BindMount *binds, size_t n) { + size_t i; assert(p); @@ -295,8 +295,8 @@ static int append_bind_mounts(MountEntry **p, const BindMount *binds, unsigned n return 0; } -static int append_tmpfs_mounts(MountEntry **p, const TemporaryFileSystem *tmpfs, unsigned n) { - unsigned i; +static int append_tmpfs_mounts(MountEntry **p, const TemporaryFileSystem *tmpfs, size_t n) { + size_t i; int r; assert(p); @@ -338,8 +338,8 @@ static int append_tmpfs_mounts(MountEntry **p, const TemporaryFileSystem *tmpfs, return 0; } -static int append_static_mounts(MountEntry **p, const MountEntry *mounts, unsigned n, bool ignore_protect) { - unsigned i; +static int append_static_mounts(MountEntry **p, const MountEntry *mounts, size_t n, bool ignore_protect) { + size_t i; assert(p); assert(mounts); @@ -418,8 +418,8 @@ static int mount_path_compare(const void *a, const void *b) { return 0; } -static int prefix_where_needed(MountEntry *m, unsigned n, const char *root_directory) { - unsigned i; +static int prefix_where_needed(MountEntry *m, size_t n, const char *root_directory) { + size_t i; /* Prefixes all paths in the bind mount table with the root directory if it is specified and the entry needs * that. */ @@ -444,7 +444,7 @@ static int prefix_where_needed(MountEntry *m, unsigned n, const char *root_direc return 0; } -static void drop_duplicates(MountEntry *m, unsigned *n) { +static void drop_duplicates(MountEntry *m, size_t *n) { MountEntry *f, *t, *previous; assert(m); @@ -473,7 +473,7 @@ static void drop_duplicates(MountEntry *m, unsigned *n) { *n = t - m; } -static void drop_inaccessible(MountEntry *m, unsigned *n) { +static void drop_inaccessible(MountEntry *m, size_t *n) { MountEntry *f, *t; const char *clear = NULL; @@ -502,7 +502,7 @@ static void drop_inaccessible(MountEntry *m, unsigned *n) { *n = t - m; } -static void drop_nop(MountEntry *m, unsigned *n) { +static void drop_nop(MountEntry *m, size_t *n) { MountEntry *f, *t; assert(m); @@ -541,7 +541,7 @@ static void drop_nop(MountEntry *m, unsigned *n) { *n = t - m; } -static void drop_outside_root(const char *root_directory, MountEntry *m, unsigned *n) { +static void drop_outside_root(const char *root_directory, MountEntry *m, size_t *n) { MountEntry *f, *t; assert(m); @@ -1047,22 +1047,22 @@ static bool namespace_info_mount_apivfs(const char *root_directory, const Namesp ns_info->protect_kernel_tunables); } -static unsigned namespace_calculate_mounts( +static size_t namespace_calculate_mounts( const char* root_directory, const NamespaceInfo *ns_info, char** read_write_paths, char** read_only_paths, char** inaccessible_paths, char** empty_directories, - unsigned n_bind_mounts, - unsigned n_temporary_filesystems, + size_t n_bind_mounts, + size_t n_temporary_filesystems, const char* tmp_dir, const char* var_tmp_dir, ProtectHome protect_home, ProtectSystem protect_system) { - unsigned protect_home_cnt; - unsigned protect_system_cnt = + size_t protect_home_cnt; + size_t protect_system_cnt = (protect_system == PROTECT_SYSTEM_STRICT ? ELEMENTSOF(protect_system_strict_table) : ((protect_system == PROTECT_SYSTEM_FULL) ? @@ -1093,7 +1093,7 @@ static unsigned namespace_calculate_mounts( (namespace_info_mount_apivfs(root_directory, ns_info) ? ELEMENTSOF(apivfs_table) : 0); } -static void normalize_mounts(const char *root_directory, MountEntry *mounts, unsigned *n_mounts) { +static void normalize_mounts(const char *root_directory, MountEntry *mounts, size_t *n_mounts) { assert(n_mounts); assert(mounts || *n_mounts == 0); @@ -1114,9 +1114,9 @@ int setup_namespace( char** inaccessible_paths, char** empty_directories, const BindMount *bind_mounts, - unsigned n_bind_mounts, + size_t n_bind_mounts, const TemporaryFileSystem *temporary_filesystems, - unsigned n_temporary_filesystems, + size_t n_temporary_filesystems, const char* tmp_dir, const char* var_tmp_dir, ProtectHome protect_home, @@ -1132,7 +1132,7 @@ int setup_namespace( size_t root_hash_size = 0; bool make_slave = false; const char *root; - unsigned n_mounts; + size_t n_mounts; bool require_prefix = false; int r = 0; @@ -1349,7 +1349,7 @@ int setup_namespace( if (n_mounts > 0) { _cleanup_fclose_ FILE *proc_self_mountinfo = NULL; char **blacklist; - unsigned j; + size_t j; /* Open /proc/self/mountinfo now as it may become unavailable if we mount anything on top of /proc. * For example, this is the case with the option: 'InaccessiblePaths=/proc' */ @@ -1431,8 +1431,8 @@ finish: return r; } -void bind_mount_free_many(BindMount *b, unsigned n) { - unsigned i; +void bind_mount_free_many(BindMount *b, size_t n) { + size_t i; assert(b || n == 0); @@ -1444,7 +1444,7 @@ void bind_mount_free_many(BindMount *b, unsigned n) { free(b); } -int bind_mount_add(BindMount **b, unsigned *n, const BindMount *item) { +int bind_mount_add(BindMount **b, size_t *n, const BindMount *item) { _cleanup_free_ char *s = NULL, *d = NULL; BindMount *c; @@ -1477,8 +1477,8 @@ int bind_mount_add(BindMount **b, unsigned *n, const BindMount *item) { return 0; } -void temporary_filesystem_free_many(TemporaryFileSystem *t, unsigned n) { - unsigned i; +void temporary_filesystem_free_many(TemporaryFileSystem *t, size_t n) { + size_t i; assert(t || n == 0); @@ -1492,7 +1492,7 @@ void temporary_filesystem_free_many(TemporaryFileSystem *t, unsigned n) { int temporary_filesystem_add( TemporaryFileSystem **t, - unsigned *n, + size_t *n, const char *path, const char *options) { diff --git a/src/core/namespace.h b/src/core/namespace.h index ac97f9f373..d8e4682255 100644 --- a/src/core/namespace.h +++ b/src/core/namespace.h @@ -78,9 +78,9 @@ int setup_namespace( char **inaccessible_paths, char **empty_directories, const BindMount *bind_mounts, - unsigned n_bind_mounts, + size_t n_bind_mounts, const TemporaryFileSystem *temporary_filesystems, - unsigned n_temporary_filesystems, + size_t n_temporary_filesystems, const char *tmp_dir, const char *var_tmp_dir, ProtectHome protect_home, @@ -103,11 +103,11 @@ const char* protect_system_to_string(ProtectSystem p) _const_; ProtectSystem protect_system_from_string(const char *s) _pure_; ProtectSystem parse_protect_system_or_bool(const char *s); -void bind_mount_free_many(BindMount *b, unsigned n); -int bind_mount_add(BindMount **b, unsigned *n, const BindMount *item); +void bind_mount_free_many(BindMount *b, size_t n); +int bind_mount_add(BindMount **b, size_t *n, const BindMount *item); -void temporary_filesystem_free_many(TemporaryFileSystem *t, unsigned n); -int temporary_filesystem_add(TemporaryFileSystem **t, unsigned *n, +void temporary_filesystem_free_many(TemporaryFileSystem *t, size_t n); +int temporary_filesystem_add(TemporaryFileSystem **t, size_t *n, const char *path, const char *options); const char* namespace_type_to_string(NamespaceType t) _const_; diff --git a/src/core/service.c b/src/core/service.c index 4503c03d2e..bf4f27880d 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -866,7 +866,7 @@ static void service_dump(Unit *u, FILE *f, const char *prefix) { if (s->n_fd_store_max > 0) fprintf(f, "%sFile Descriptor Store Max: %u\n" - "%sFile Descriptor Store Current: %u\n", + "%sFile Descriptor Store Current: %zu\n", prefix, s->n_fd_store_max, prefix, s->n_fd_store); diff --git a/src/core/service.h b/src/core/service.h index 083084c9af..116d5d119f 100644 --- a/src/core/service.h +++ b/src/core/service.h @@ -170,7 +170,7 @@ struct Service { NotifyState notify_state; ServiceFDStore *fd_store; - unsigned n_fd_store; + size_t n_fd_store; unsigned n_fd_store_max; unsigned n_keep_fd_store; diff --git a/src/core/socket.c b/src/core/socket.c index 5b7ae5cd16..15a7c13149 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1366,13 +1366,14 @@ static int usbffs_select_ep(const struct dirent *d) { static int usbffs_dispatch_eps(SocketPort *p) { _cleanup_free_ struct dirent **ent = NULL; - int r, i, n, k; + size_t n, k, i; + int r; r = scandir(p->path, &ent, usbffs_select_ep, alphasort); if (r < 0) return -errno; - n = r; + n = (size_t) r; p->auxiliary_fds = new(int, n); if (!p->auxiliary_fds) return -ENOMEM; @@ -1393,9 +1394,7 @@ static int usbffs_dispatch_eps(SocketPort *p) { if (r < 0) goto fail; - p->auxiliary_fds[k] = r; - - ++k; + p->auxiliary_fds[k++] = r; free(ent[i]); } @@ -3097,8 +3096,9 @@ static int socket_dispatch_timer(sd_event_source *source, usec_t usec, void *use } int socket_collect_fds(Socket *s, int **fds) { - int *rfds, k = 0, n = 0; + size_t k = 0, n = 0; SocketPort *p; + int *rfds; assert(s); assert(fds); @@ -3121,7 +3121,7 @@ int socket_collect_fds(Socket *s, int **fds) { return -ENOMEM; LIST_FOREACH(port, p, s->ports) { - int i; + size_t i; if (p->fd >= 0) rfds[k++] = p->fd; @@ -3132,7 +3132,7 @@ int socket_collect_fds(Socket *s, int **fds) { assert(k == n); *fds = rfds; - return n; + return (int) n; } static void socket_reset_failed(Unit *u) { diff --git a/src/core/socket.h b/src/core/socket.h index d26416b708..ce9452dbd6 100644 --- a/src/core/socket.h +++ b/src/core/socket.h @@ -54,7 +54,7 @@ typedef struct SocketPort { SocketType type; int fd; int *auxiliary_fds; - int n_auxiliary_fds; + size_t n_auxiliary_fds; SocketAddress address; char *path; diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index 6d1b1b2384..ce37339307 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -110,8 +110,8 @@ static void print_welcome(void) { } static int show_menu(char **x, unsigned n_columns, unsigned width, unsigned percentage) { - unsigned n, per_column, i, j; unsigned break_lines, break_modulo; + size_t n, per_column, i, j; assert(n_columns > 0); @@ -140,7 +140,7 @@ static int show_menu(char **x, unsigned n_columns, unsigned width, unsigned perc if (!e) return log_oom(); - printf("%4u) %-*s", j * per_column + i + 1, width, e); + printf("%4zu) %-*s", j * per_column + i + 1, width, e); } putchar('\n'); diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 391fc417eb..554cf20dec 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -644,7 +644,7 @@ static bool shall_try_append_again(JournalFile *f, int r) { } } -static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned n, int priority) { +static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, size_t n, int priority) { bool vacuumed = false, rotate = false; struct dual_timestamp ts; JournalFile *f; @@ -699,7 +699,7 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned } if (vacuumed || !shall_try_append_again(f, r)) { - log_error_errno(r, "Failed to write entry (%d items, %zu bytes), ignoring: %m", n, IOVEC_TOTAL_SIZE(iovec, n)); + log_error_errno(r, "Failed to write entry (%zu items, %zu bytes), ignoring: %m", n, IOVEC_TOTAL_SIZE(iovec, n)); return; } @@ -713,7 +713,7 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned log_debug("Retrying write."); r = journal_file_append_entry(f, &ts, iovec, n, &s->seqnum, NULL, NULL); if (r < 0) - log_error_errno(r, "Failed to write entry (%d items, %zu bytes) despite vacuuming, ignoring: %m", n, IOVEC_TOTAL_SIZE(iovec, n)); + log_error_errno(r, "Failed to write entry (%zu items, %zu bytes) despite vacuuming, ignoring: %m", n, IOVEC_TOTAL_SIZE(iovec, n)); else server_schedule_sync(s, priority); } @@ -1069,7 +1069,7 @@ int server_process_datagram(sd_event_source *es, int fd, uint32_t revents, void struct iovec iovec; ssize_t n; int *fds = NULL, v = 0; - unsigned n_fds = 0; + size_t n_fds = 0; union { struct cmsghdr cmsghdr; diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index 78ef1eb3cf..620f711545 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -83,7 +83,7 @@ static bool net_condition_test_strv(char * const *raw_patterns, /* If the patterns begin with "!", edit it out and negate the test. */ if (raw_patterns[0][0] == '!') { char **patterns; - unsigned i, length; + size_t i, length; length = strv_length(raw_patterns) + 1; /* Include the NULL. */ patterns = newa(char*, length); diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 724876d6d1..c4670503cc 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -221,7 +221,7 @@ int sd_dhcp_lease_get_routes(sd_dhcp_lease *lease, sd_dhcp_route ***routes) { } int sd_dhcp_lease_get_search_domains(sd_dhcp_lease *lease, char ***domains) { - unsigned r; + size_t r; assert_return(lease, -EINVAL); assert_return(domains, -EINVAL); diff --git a/src/libsystemd/sd-bus/bus-internal.h b/src/libsystemd/sd-bus/bus-internal.h index 492e32c488..428e02612c 100644 --- a/src/libsystemd/sd-bus/bus-internal.h +++ b/src/libsystemd/sd-bus/bus-internal.h @@ -265,7 +265,7 @@ struct sd_bus { uint64_t creds_mask; int *fds; - unsigned n_fds; + size_t n_fds; char *exec_path; char **exec_argv; diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index 3f4a2ba2b6..61df50e43a 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -399,7 +399,7 @@ int bus_message_from_header( size_t footer_accessible, size_t message_size, int *fds, - unsigned n_fds, + size_t n_fds, const char *label, size_t extra, sd_bus_message **ret) { @@ -510,7 +510,7 @@ int bus_message_from_malloc( void *buffer, size_t length, int *fds, - unsigned n_fds, + size_t n_fds, const char *label, sd_bus_message **ret) { @@ -1651,7 +1651,7 @@ _public_ int sd_bus_message_append_string_space( _public_ int sd_bus_message_append_string_iovec( sd_bus_message *m, const struct iovec *iov, - unsigned n) { + unsigned n /* should be size_t, but is API now… 😞 */) { size_t size; unsigned i; @@ -2575,7 +2575,7 @@ _public_ int sd_bus_message_append_array_iovec( sd_bus_message *m, char type, const struct iovec *iov, - unsigned n) { + unsigned n /* should be size_t, but is API now… 😞 */) { size_t size; unsigned i; @@ -5485,7 +5485,7 @@ _public_ int sd_bus_message_set_sender(sd_bus_message *m, const char *sender) { int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz) { size_t total; void *p, *e; - unsigned i; + size_t i; struct bus_body_part *part; assert(m); diff --git a/src/libsystemd/sd-bus/bus-message.h b/src/libsystemd/sd-bus/bus-message.h index 82bbb9aed7..510f93be11 100644 --- a/src/libsystemd/sd-bus/bus-message.h +++ b/src/libsystemd/sd-bus/bus-message.h @@ -182,7 +182,7 @@ int bus_message_from_header( size_t footer_accessible, size_t message_size, int *fds, - unsigned n_fds, + size_t n_fds, const char *label, size_t extra, sd_bus_message **ret); @@ -192,7 +192,7 @@ int bus_message_from_malloc( void *buffer, size_t length, int *fds, - unsigned n_fds, + size_t n_fds, const char *label, sd_bus_message **ret); diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index 855f040c74..3f73dadc2e 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -402,7 +402,7 @@ static int uid_get_array(uid_t uid, const char *variable, char ***array) { return -ENOMEM; strv_uniq(a); - r = strv_length(a); + r = (int) strv_length(a); if (array) *array = a; @@ -726,7 +726,7 @@ _public_ int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **ui } } - r = strv_length(a); + r = (int) strv_length(a); if (sessions) *sessions = TAKE_PTR(a); diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c index 116ceba3bb..286e92bc2c 100644 --- a/src/libsystemd/sd-network/sd-network.c +++ b/src/libsystemd/sd-network/sd-network.c @@ -65,7 +65,7 @@ static int network_get_strv(const char *key, char ***ret) { return -ENOMEM; strv_uniq(a); - r = strv_length(a); + r = (int) strv_length(a); *ret = TAKE_PTR(a); @@ -136,7 +136,7 @@ static int network_link_get_strv(int ifindex, const char *key, char ***ret) { return -ENOMEM; strv_uniq(a); - r = strv_length(a); + r = (int) strv_length(a); *ret = TAKE_PTR(a); diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index d038e78d19..508d3775d3 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -1800,7 +1800,7 @@ static int enable_machine(int argc, char *argv[], void *userdata) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL; _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; int carries_install_info = 0; const char *method = NULL; sd_bus *bus = userdata; diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index 1b7c64a83a..0b58e9b57f 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -2865,9 +2865,9 @@ static int native_main(int argc, char *argv[], sd_bus *bus) { return dispatch_verb(argc, argv, verbs, bus); } -static int translate(const char *verb, const char *single_arg, unsigned num_args, char **args, sd_bus *bus) { +static int translate(const char *verb, const char *single_arg, size_t num_args, char **args, sd_bus *bus) { char **fake, **p; - unsigned num, i; + size_t num, i; assert(verb); assert(num_args == 0 || args); @@ -2882,7 +2882,7 @@ static int translate(const char *verb, const char *single_arg, unsigned num_args *p++ = args[i]; optind = 0; - return native_main(num, fake, bus); + return native_main((int) num, fake, bus); } static int compat_main(int argc, char *argv[], sd_bus *bus) { diff --git a/src/resolve/resolved-dns-answer.c b/src/resolve/resolved-dns-answer.c index 252e8cee40..d95343f466 100644 --- a/src/resolve/resolved-dns-answer.c +++ b/src/resolve/resolved-dns-answer.c @@ -11,7 +11,7 @@ #include "resolved-dns-dnssec.h" #include "string-util.h" -DnsAnswer *dns_answer_new(unsigned n) { +DnsAnswer *dns_answer_new(size_t n) { DnsAnswer *a; a = malloc0(offsetof(DnsAnswer, items) + sizeof(DnsAnswerItem) * n); @@ -93,7 +93,7 @@ static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) { } int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags) { - unsigned i; + size_t i; int r; assert(rr); @@ -453,7 +453,7 @@ int dns_answer_extend(DnsAnswer **a, DnsAnswer *b) { int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key) { bool found = false, other = false; DnsResourceRecord *rr; - unsigned i; + size_t i; int r; assert(a); @@ -538,7 +538,7 @@ int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key) { int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rm) { bool found = false, other = false; DnsResourceRecord *rr; - unsigned i; + size_t i; int r; assert(a); @@ -667,7 +667,7 @@ int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKe void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) { DnsAnswerItem *items; - unsigned i, start, end; + size_t i, start, end; if (!a) return; @@ -698,7 +698,7 @@ void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) { memcpy(a->items, items, sizeof(DnsAnswerItem) * a->n_rrs); } -int dns_answer_reserve(DnsAnswer **a, unsigned n_free) { +int dns_answer_reserve(DnsAnswer **a, size_t n_free) { DnsAnswer *n; assert(a); @@ -707,7 +707,7 @@ int dns_answer_reserve(DnsAnswer **a, unsigned n_free) { return 0; if (*a) { - unsigned ns; + size_t ns; if ((*a)->n_ref > 1) return -EBUSY; @@ -735,7 +735,7 @@ int dns_answer_reserve(DnsAnswer **a, unsigned n_free) { return 0; } -int dns_answer_reserve_or_clone(DnsAnswer **a, unsigned n_free) { +int dns_answer_reserve_or_clone(DnsAnswer **a, size_t n_free) { _cleanup_(dns_answer_unrefp) DnsAnswer *n = NULL; int r; diff --git a/src/resolve/resolved-dns-answer.h b/src/resolve/resolved-dns-answer.h index c492d1c153..ca1e266f13 100644 --- a/src/resolve/resolved-dns-answer.h +++ b/src/resolve/resolved-dns-answer.h @@ -36,11 +36,11 @@ struct DnsAnswerItem { struct DnsAnswer { unsigned n_ref; - unsigned n_rrs, n_allocated; + size_t n_rrs, n_allocated; DnsAnswerItem items[0]; }; -DnsAnswer *dns_answer_new(unsigned n); +DnsAnswer *dns_answer_new(size_t n); DnsAnswer *dns_answer_ref(DnsAnswer *a); DnsAnswer *dns_answer_unref(DnsAnswer *a); @@ -62,8 +62,8 @@ int dns_answer_extend(DnsAnswer **a, DnsAnswer *b); void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local); -int dns_answer_reserve(DnsAnswer **a, unsigned n_free); -int dns_answer_reserve_or_clone(DnsAnswer **a, unsigned n_free); +int dns_answer_reserve(DnsAnswer **a, size_t n_free); +int dns_answer_reserve_or_clone(DnsAnswer **a, size_t n_free); int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key); int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rr); @@ -73,7 +73,7 @@ int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKe bool dns_answer_has_dname_for_cname(DnsAnswer *a, DnsResourceRecord *cname); -static inline unsigned dns_answer_size(DnsAnswer *a) { +static inline size_t dns_answer_size(DnsAnswer *a) { return a ? a->n_rrs : 0; } @@ -86,7 +86,7 @@ void dns_answer_dump(DnsAnswer *answer, FILE *f); DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref); #define _DNS_ANSWER_FOREACH(q, kk, a) \ - for (unsigned UNIQ_T(i, q) = ({ \ + for (size_t UNIQ_T(i, q) = ({ \ (kk) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].rr : NULL; \ 0; \ }); \ @@ -96,7 +96,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref); #define DNS_ANSWER_FOREACH(kk, a) _DNS_ANSWER_FOREACH(UNIQ, kk, a) #define _DNS_ANSWER_FOREACH_IFINDEX(q, kk, ifi, a) \ - for (unsigned UNIQ_T(i, q) = ({ \ + for (size_t UNIQ_T(i, q) = ({ \ (kk) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].rr : NULL; \ (ifi) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].ifindex : 0; \ 0; \ @@ -109,7 +109,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref); #define DNS_ANSWER_FOREACH_IFINDEX(kk, ifindex, a) _DNS_ANSWER_FOREACH_IFINDEX(UNIQ, kk, ifindex, a) #define _DNS_ANSWER_FOREACH_FLAGS(q, kk, fl, a) \ - for (unsigned UNIQ_T(i, q) = ({ \ + for (size_t UNIQ_T(i, q) = ({ \ (kk) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].rr : NULL; \ (fl) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].flags : 0; \ 0; \ @@ -122,7 +122,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref); #define DNS_ANSWER_FOREACH_FLAGS(kk, flags, a) _DNS_ANSWER_FOREACH_FLAGS(UNIQ, kk, flags, a) #define _DNS_ANSWER_FOREACH_FULL(q, kk, ifi, fl, a) \ - for (unsigned UNIQ_T(i, q) = ({ \ + for (size_t UNIQ_T(i, q) = ({ \ (kk) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].rr : NULL; \ (ifi) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].ifindex : 0; \ (fl) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].flags : 0; \ diff --git a/src/resolve/resolved-dns-question.c b/src/resolve/resolved-dns-question.c index ac3e55f574..5416c474b4 100644 --- a/src/resolve/resolved-dns-question.c +++ b/src/resolve/resolved-dns-question.c @@ -10,7 +10,7 @@ #include "dns-type.h" #include "resolved-dns-question.h" -DnsQuestion *dns_question_new(unsigned n) { +DnsQuestion *dns_question_new(size_t n) { DnsQuestion *q; assert(n > 0); @@ -41,7 +41,7 @@ DnsQuestion *dns_question_unref(DnsQuestion *q) { assert(q->n_ref > 0); if (q->n_ref == 1) { - unsigned i; + size_t i; for (i = 0; i < q->n_keys; i++) dns_resource_key_unref(q->keys[i]); @@ -53,7 +53,7 @@ DnsQuestion *dns_question_unref(DnsQuestion *q) { } int dns_question_add(DnsQuestion *q, DnsResourceKey *key) { - unsigned i; + size_t i; int r; assert(key); @@ -77,7 +77,7 @@ int dns_question_add(DnsQuestion *q, DnsResourceKey *key) { } int dns_question_matches_rr(DnsQuestion *q, DnsResourceRecord *rr, const char *search_domain) { - unsigned i; + size_t i; int r; assert(rr); @@ -95,7 +95,7 @@ int dns_question_matches_rr(DnsQuestion *q, DnsResourceRecord *rr, const char *s } int dns_question_matches_cname_or_dname(DnsQuestion *q, DnsResourceRecord *rr, const char *search_domain) { - unsigned i; + size_t i; int r; assert(rr); @@ -121,7 +121,7 @@ int dns_question_matches_cname_or_dname(DnsQuestion *q, DnsResourceRecord *rr, c int dns_question_is_valid_for_query(DnsQuestion *q) { const char *name; - unsigned i; + size_t i; int r; if (!q) @@ -155,7 +155,7 @@ int dns_question_is_valid_for_query(DnsQuestion *q) { } int dns_question_contains(DnsQuestion *a, const DnsResourceKey *k) { - unsigned j; + size_t j; int r; assert(k); @@ -173,7 +173,7 @@ int dns_question_contains(DnsQuestion *a, const DnsResourceKey *k) { } int dns_question_is_equal(DnsQuestion *a, DnsQuestion *b) { - unsigned j; + size_t j; int r; if (a == b) diff --git a/src/resolve/resolved-dns-question.h b/src/resolve/resolved-dns-question.h index fdedefe6c1..fcfa16f864 100644 --- a/src/resolve/resolved-dns-question.h +++ b/src/resolve/resolved-dns-question.h @@ -16,11 +16,11 @@ typedef struct DnsQuestion DnsQuestion; struct DnsQuestion { unsigned n_ref; - unsigned n_keys, n_allocated; + size_t n_keys, n_allocated; DnsResourceKey* keys[0]; }; -DnsQuestion *dns_question_new(unsigned n); +DnsQuestion *dns_question_new(size_t n); DnsQuestion *dns_question_ref(DnsQuestion *q); DnsQuestion *dns_question_unref(DnsQuestion *q); @@ -40,7 +40,7 @@ int dns_question_cname_redirect(DnsQuestion *q, const DnsResourceRecord *cname, const char *dns_question_first_name(DnsQuestion *q); -static inline unsigned dns_question_size(DnsQuestion *q) { +static inline size_t dns_question_size(DnsQuestion *q) { return q ? q->n_keys : 0; } @@ -51,7 +51,7 @@ static inline bool dns_question_isempty(DnsQuestion *q) { DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuestion*, dns_question_unref); #define _DNS_QUESTION_FOREACH(u, key, q) \ - for (unsigned UNIQ_T(i, u) = ({ \ + for (size_t UNIQ_T(i, u) = ({ \ (key) = ((q) && (q)->n_keys > 0) ? (q)->keys[0] : NULL; \ 0; \ }); \ diff --git a/src/resolve/resolved-mdns.c b/src/resolve/resolved-mdns.c index aa6daf2971..e27b0f4b70 100644 --- a/src/resolve/resolved-mdns.c +++ b/src/resolve/resolved-mdns.c @@ -133,7 +133,7 @@ static int mdns_packet_extract_matching_rrs(DnsPacket *p, DnsResourceKey *key, D assert(ret_rrs); assert_return(DNS_PACKET_NSCOUNT(p) > 0, -EINVAL); - for (unsigned i = DNS_PACKET_ANCOUNT(p); i < (DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)); i++) { + for (size_t i = DNS_PACKET_ANCOUNT(p); i < (DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)); i++) { r = dns_resource_key_match_rr(key, p->answer->items[i].rr, NULL); if (r < 0) return r; @@ -148,7 +148,7 @@ static int mdns_packet_extract_matching_rrs(DnsPacket *p, DnsResourceKey *key, D if (!list) return -ENOMEM; - for (unsigned i = DNS_PACKET_ANCOUNT(p); i < (DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)); i++) { + for (size_t i = DNS_PACKET_ANCOUNT(p); i < (DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)); i++) { r = dns_resource_key_match_rr(key, p->answer->items[i].rr, NULL); if (r < 0) return r; @@ -166,8 +166,7 @@ static int mdns_packet_extract_matching_rrs(DnsPacket *p, DnsResourceKey *key, D static int mdns_do_tiebreak(DnsResourceKey *key, DnsAnswer *answer, DnsPacket *p) { _cleanup_free_ DnsResourceRecord **our = NULL, **remote = NULL; DnsResourceRecord *rr; - unsigned i = 0; - unsigned size; + size_t i = 0, size; int r; size = dns_answer_size(answer); diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c index 53091b8001..5bc10de9fb 100644 --- a/src/shared/base-filesystem.c +++ b/src/shared/base-filesystem.c @@ -50,8 +50,8 @@ static const BaseFilesystem table[] = { int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { _cleanup_close_ int fd = -1; - unsigned i; int r = 0; + size_t i; fd = open(root, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW); if (fd < 0) diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index de232309c2..a0d1f81df8 100644 --- a/src/shared/bootspec.c +++ b/src/shared/bootspec.c @@ -125,7 +125,7 @@ int boot_entry_load(const char *path, BootEntry *entry) { } void boot_config_free(BootConfig *config) { - unsigned i; + size_t i; assert(config); @@ -247,7 +247,7 @@ int boot_entries_find(const char *dir, BootEntry **ret_entries, size_t *ret_n_en } static bool find_nonunique(BootEntry *entries, size_t n_entries, bool *arr) { - unsigned i, j; + size_t i, j; bool non_unique = false; assert(entries || n_entries == 0); @@ -267,7 +267,7 @@ static bool find_nonunique(BootEntry *entries, size_t n_entries, bool *arr) { static int boot_entries_uniquify(BootEntry *entries, size_t n_entries) { char *s; - unsigned i; + size_t i; int r; bool arr[n_entries]; diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c index 49cee2939e..1d3f991bef 100644 --- a/src/shared/bus-unit-util.c +++ b/src/shared/bus-unit-util.c @@ -2003,7 +2003,7 @@ int bus_wait_for_jobs_one(BusWaitForJobs *d, const char *path, bool quiet) { return bus_wait_for_jobs(d, quiet, NULL); } -int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes) { +int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes) { const char *type, *path, *source; int r; diff --git a/src/shared/bus-unit-util.h b/src/shared/bus-unit-util.h index e243b0c726..934ca21fc4 100644 --- a/src/shared/bus-unit-util.h +++ b/src/shared/bus-unit-util.h @@ -41,7 +41,7 @@ int bus_wait_for_jobs_one(BusWaitForJobs *d, const char *path, bool quiet); DEFINE_TRIVIAL_CLEANUP_FUNC(BusWaitForJobs*, bus_wait_for_jobs_free); -int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes); +int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes); int unit_show_processes(sd_bus *bus, const char *unit, const char *cgroup_path, const char *prefix, unsigned n_columns, OutputFlags flags, sd_bus_error *error); diff --git a/src/shared/fdset.c b/src/shared/fdset.c index e97a52619d..a6eccff692 100644 --- a/src/shared/fdset.c +++ b/src/shared/fdset.c @@ -29,8 +29,8 @@ FDSet *fdset_new(void) { return MAKE_FDSET(set_new(NULL)); } -int fdset_new_array(FDSet **ret, const int *fds, unsigned n_fds) { - unsigned i; +int fdset_new_array(FDSet **ret, const int *fds, size_t n_fds) { + size_t i; FDSet *s; int r; @@ -217,10 +217,10 @@ int fdset_close_others(FDSet *fds) { void *e; Iterator i; int *a; - unsigned j, m; + size_t j = 0, m; - j = 0, m = fdset_size(fds); - a = alloca(sizeof(int) * m); + m = fdset_size(fds); + a = newa(int, m); SET_FOREACH(e, MAKE_SET(fds), i) a[j++] = PTR_TO_FD(e); diff --git a/src/shared/fdset.h b/src/shared/fdset.h index 4691bd51d3..178b9abf79 100644 --- a/src/shared/fdset.h +++ b/src/shared/fdset.h @@ -24,7 +24,7 @@ int fdset_put_dup(FDSet *s, int fd); bool fdset_contains(FDSet *s, int fd); int fdset_remove(FDSet *s, int fd); -int fdset_new_array(FDSet **ret, const int *fds, unsigned n_fds); +int fdset_new_array(FDSet **ret, const int *fds, size_t n_fds); int fdset_new_fill(FDSet **ret); int fdset_new_listen_fds(FDSet **ret, bool unset); diff --git a/src/shared/install.c b/src/shared/install.c index 98a289cc65..550c553117 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -285,7 +285,7 @@ static int path_is_vendor(const LookupPaths *p, const char *path) { int unit_file_changes_add( UnitFileChange **changes, - unsigned *n_changes, + size_t *n_changes, UnitFileChangeType type, const char *path, const char *source) { @@ -321,8 +321,8 @@ int unit_file_changes_add( return 0; } -void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes) { - unsigned i; +void unit_file_changes_free(UnitFileChange *changes, size_t n_changes) { + size_t i; assert(changes || n_changes == 0); @@ -334,8 +334,8 @@ void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes) { free(changes); } -void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, unsigned n_changes, bool quiet) { - unsigned i; +void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet) { + size_t i; bool logged = false; assert(changes || n_changes == 0); @@ -434,7 +434,7 @@ static int create_symlink( const char *new_path, bool force, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_free_ char *dest = NULL, *dirname = NULL; const char *rp; @@ -538,7 +538,7 @@ static int remove_marked_symlinks_fd( bool dry_run, bool *restart, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_closedir_ DIR *d = NULL; struct dirent *de; @@ -655,7 +655,7 @@ static int remove_marked_symlinks( const LookupPaths *lp, bool dry_run, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_close_ int fd = -1; bool restart; @@ -1001,7 +1001,7 @@ static int install_info_may_process( UnitFileInstallInfo *i, const LookupPaths *paths, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { assert(i); assert(paths); @@ -1669,7 +1669,7 @@ static int install_info_discover( SearchFlags flags, UnitFileInstallInfo **ret, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { UnitFileInstallInfo *i; int r; @@ -1693,7 +1693,7 @@ static int install_info_symlink_alias( const char *config_path, bool force, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { char **s; int r = 0, q; @@ -1728,7 +1728,7 @@ static int install_info_symlink_wants( char **list, const char *suffix, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_free_ char *buf = NULL; const char *n; @@ -1798,7 +1798,7 @@ static int install_info_symlink_link( const char *config_path, bool force, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_free_ char *path = NULL; int r; @@ -1827,7 +1827,7 @@ static int install_info_apply( const char *config_path, bool force, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { int r, q; @@ -1864,7 +1864,7 @@ static int install_context_apply( bool force, SearchFlags flags, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { UnitFileInstallInfo *i; int r; @@ -1927,7 +1927,7 @@ static int install_context_mark_for_removal( Set **remove_symlinks_to, const char *config_path, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { UnitFileInstallInfo *i; int r; @@ -1990,7 +1990,7 @@ int unit_file_mask( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; const char *config_path; @@ -2036,7 +2036,7 @@ int unit_file_unmask( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; @@ -2130,7 +2130,7 @@ int unit_file_link( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; _cleanup_strv_free_ char **todo = NULL; @@ -2230,7 +2230,7 @@ int unit_file_revert( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; _cleanup_(lookup_paths_free) LookupPaths paths = {}; @@ -2387,7 +2387,7 @@ int unit_file_add_dependency( const char *target, UnitDependency dep, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; _cleanup_(install_context_done) InstallContext c = {}; @@ -2461,7 +2461,7 @@ int unit_file_enable( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; _cleanup_(install_context_done) InstallContext c = {}; @@ -2507,7 +2507,7 @@ int unit_file_disable( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; _cleanup_(install_context_done) InstallContext c = {}; @@ -2549,7 +2549,7 @@ int unit_file_reenable( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { char **n; int r; @@ -2576,7 +2576,7 @@ int unit_file_set_default( const char *root_dir, const char *name, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(lookup_paths_free) LookupPaths paths = {}; _cleanup_(install_context_done) InstallContext c = {}; @@ -2928,7 +2928,7 @@ static int execute_preset( UnitFilePresetMode mode, bool force, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { int r; @@ -2972,7 +2972,7 @@ static int preset_prepare_one( const char *name, Presets presets, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(install_context_done) InstallContext tmp = {}; UnitFileInstallInfo *i; @@ -3017,7 +3017,7 @@ int unit_file_preset( char **files, UnitFilePresetMode mode, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(install_context_done) InstallContext plus = {}, minus = {}; _cleanup_(lookup_paths_free) LookupPaths paths = {}; @@ -3057,7 +3057,7 @@ int unit_file_preset_all( const char *root_dir, UnitFilePresetMode mode, UnitFileChange **changes, - unsigned *n_changes) { + size_t *n_changes) { _cleanup_(install_context_done) InstallContext plus = {}, minus = {}; _cleanup_(lookup_paths_free) LookupPaths paths = {}; diff --git a/src/shared/install.h b/src/shared/install.h index 495fa3b1df..9dc91429da 100644 --- a/src/shared/install.h +++ b/src/shared/install.h @@ -83,8 +83,8 @@ struct UnitFileChange { char *source; }; -static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, unsigned n_changes) { - unsigned i; +static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, size_t n_changes) { + size_t i; for (i = 0; i < n_changes; i++) if (IN_SET(changes[i].type, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK)) return true; @@ -129,21 +129,21 @@ int unit_file_enable( const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_disable( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_reenable( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_preset( UnitFileScope scope, UnitFileFlags flags, @@ -151,48 +151,48 @@ int unit_file_preset( char **files, UnitFilePresetMode mode, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_preset_all( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, UnitFilePresetMode mode, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_mask( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_unmask( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_link( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_revert( UnitFileScope scope, const char *root_dir, char **files, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_set_default( UnitFileScope scope, UnitFileFlags flags, const char *root_dir, const char *file, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_get_default( UnitFileScope scope, const char *root_dir, @@ -205,7 +205,7 @@ int unit_file_add_dependency( const char *target, UnitDependency dep, UnitFileChange **changes, - unsigned *n_changes); + size_t *n_changes); int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret); int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name); @@ -213,9 +213,9 @@ int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char * int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns); Hashmap* unit_file_list_free(Hashmap *h); -int unit_file_changes_add(UnitFileChange **changes, unsigned *n_changes, UnitFileChangeType type, const char *path, const char *source); -void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes); -void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, unsigned n_changes, bool quiet); +int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, UnitFileChangeType type, const char *path, const char *source); +void unit_file_changes_free(UnitFileChange *changes, size_t n_changes); +void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet); int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name); diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c index 554ba73bf8..95c40cc91d 100644 --- a/src/shared/path-lookup.c +++ b/src/shared/path-lookup.c @@ -717,7 +717,7 @@ void lookup_paths_free(LookupPaths *p) { int lookup_paths_reduce(LookupPaths *p) { _cleanup_free_ struct stat *stats = NULL; size_t n_stats = 0, allocated = 0; - unsigned c = 0; + size_t c = 0; int r; assert(p); @@ -730,7 +730,7 @@ int lookup_paths_reduce(LookupPaths *p) { while (p->search_path[c]) { struct stat st; - unsigned k; + size_t k; /* Never strip the transient and control directories from the path */ if (path_equal_ptr(p->search_path[c], p->transient) || diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 69a6d940ef..c6342243f8 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -2098,7 +2098,7 @@ static int get_default(int argc, char *argv[], void *userdata) { static int set_default(int argc, char *argv[], void *userdata) { _cleanup_free_ char *unit = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; int r; assert(argc >= 2); @@ -6115,7 +6115,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) { _cleanup_strv_free_ char **names = NULL; const char *verb = argv[0]; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; int carries_install_info = -1; bool ignore_carries_install_info = arg_quiet; int r; @@ -6311,7 +6311,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) { if (arg_now && STR_IN_SET(argv[0], "enable", "disable", "mask")) { sd_bus *bus; - unsigned len, i; + size_t len, i; r = acquire_bus(BUS_MANAGER, &bus); if (r < 0) @@ -6341,7 +6341,7 @@ static int add_dependency(int argc, char *argv[], void *userdata) { _cleanup_free_ char *target = NULL; const char *verb = argv[0]; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; UnitDependency dep; int r = 0; @@ -6422,7 +6422,7 @@ finish: static int preset_all(int argc, char *argv[], void *userdata) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; int r; if (install_client_side()) { @@ -6477,7 +6477,7 @@ finish: static int show_installation_targets_client_side(const char *name) { UnitFileChange *changes = NULL; - unsigned n_changes = 0, i; + size_t n_changes = 0, i; UnitFileFlags flags; char **p; int r; @@ -6809,7 +6809,7 @@ static int run_editor(char **paths) { const char **args; char *editor, **editor_args = NULL; char **tmp_path, **original_path, *p; - unsigned n_editor_args = 0, i = 1; + size_t n_editor_args = 0, i = 1; size_t argc; argc = strv_length(paths)/2 + 1; diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c index 24eda9c44f..194e483294 100644 --- a/src/test/test-install-root.c +++ b/src/test/test-install-root.c @@ -17,7 +17,7 @@ static void test_basic_mask_and_enable(const char *root) { const char *p; UnitFileState state; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; log_set_max_level(LOG_DEBUG); @@ -158,7 +158,7 @@ static void test_linked_units(const char *root) { const char *p, *q; UnitFileState state; UnitFileChange *changes = NULL; - unsigned n_changes = 0, i; + size_t n_changes = 0, i; /* * We'll test three cases here: @@ -303,7 +303,7 @@ static void test_linked_units(const char *root) { static void test_default(const char *root) { _cleanup_free_ char *def = NULL; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; const char *p; p = strjoina(root, "/usr/lib/systemd/system/test-default-real.target"); @@ -338,7 +338,7 @@ static void test_default(const char *root) { static void test_add_dependency(const char *root) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; const char *p; p = strjoina(root, "/usr/lib/systemd/system/real-add-dependency-test-target.target"); @@ -365,7 +365,7 @@ static void test_add_dependency(const char *root) { static void test_template_enable(const char *root) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; UnitFileState state; const char *p; @@ -479,7 +479,7 @@ static void test_template_enable(const char *root) { static void test_indirect(const char *root) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; UnitFileState state; const char *p; @@ -528,7 +528,7 @@ static void test_indirect(const char *root) { static void test_preset_and_list(const char *root) { UnitFileChange *changes = NULL; - unsigned n_changes = 0, i; + size_t n_changes = 0, i; const char *p, *q; UnitFileState state; bool got_yes = false, got_no = false; @@ -638,7 +638,7 @@ static void test_revert(const char *root) { const char *p; UnitFileState state; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; assert(root); @@ -687,7 +687,7 @@ static void test_revert(const char *root) { static void test_preset_order(const char *root) { UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; const char *p; UnitFileState state; @@ -758,7 +758,7 @@ static void test_with_dropin(const char *root) { const char *p; UnitFileState state; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT); assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT); @@ -891,7 +891,7 @@ static void test_with_dropin_template(const char *root) { const char *p; UnitFileState state; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT); assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT); diff --git a/src/test/test-install.c b/src/test/test-install.c index a5328c9230..ab83a6aa0b 100644 --- a/src/test/test-install.c +++ b/src/test/test-install.c @@ -31,7 +31,7 @@ int main(int argc, char* argv[]) { const char *const files[] = { "avahi-daemon.service", NULL }; const char *const files2[] = { "/home/lennart/test.service", NULL }; UnitFileChange *changes = NULL; - unsigned n_changes = 0; + size_t n_changes = 0; UnitFileState state = 0; log_set_max_level(LOG_DEBUG); From 1232c44718b04024d1cccecb5c0ae75c311eaea3 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 27 Apr 2018 14:27:14 +0200 Subject: [PATCH 2/4] alloca: add an overflow check too Of course, alloca() shouldn't be used with anything that can grow without bounds anyway, but let's better safe than sorry, and catch this early. Since alloca() is not supposed to return an error we trigger an assert() instead, which is still better than heap trickery. --- src/basic/alloc-util.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h index 88cd6b0bc2..bae6a28451 100644 --- a/src/basic/alloc-util.h +++ b/src/basic/alloc-util.h @@ -18,9 +18,17 @@ #define new0(t, n) ((t*) calloc((n), sizeof(t))) -#define newa(t, n) ((t*) alloca(sizeof(t)*(n))) +#define newa(t, n) \ + ({ \ + assert(!size_multiply_overflow(sizeof(t), n)); \ + (t*) alloca(sizeof(t)*(n)); \ + }) -#define newa0(t, n) ((t*) alloca0(sizeof(t)*(n))) +#define newa0(t, n) \ + ({ \ + assert(!size_multiply_overflow(sizeof(t), n)); \ + (t*) alloca0(sizeof(t)*(n)); \ + }) #define newdup(t, p, n) ((t*) memdup_multiply(p, sizeof(t), (n))) From cf409d15fa78275e2606c4c53b550198ab5ef5c1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 27 Apr 2018 14:28:35 +0200 Subject: [PATCH 3/4] tree-wide: use newa() rather than alloca() where we can --- src/basic/calendarspec.c | 2 +- src/basic/process-util.c | 2 +- src/cgtop/cgtop.c | 2 +- src/journal/journal-file.c | 4 ++-- src/journal/journal-send.c | 2 +- src/test/test-condition.c | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/basic/calendarspec.c b/src/basic/calendarspec.c index 24867f807b..a30de78dc2 100644 --- a/src/basic/calendarspec.c +++ b/src/basic/calendarspec.c @@ -104,7 +104,7 @@ static void normalize_chain(CalendarComponent **c) { if (n <= 1) return; - j = b = alloca(sizeof(CalendarComponent*) * n); + j = b = newa(CalendarComponent*, n); for (i = *c; i; i = i->next) *(j++) = i; diff --git a/src/basic/process-util.c b/src/basic/process-util.c index 960920d3dd..4180769ee8 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -1433,7 +1433,7 @@ int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret va_end(ap); /* Allocate strv */ - l = alloca(sizeof(char *) * (n + 1)); + l = newa(char*, n + 1); /* Fill in arguments */ va_start(ap, path); diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index de5083bdde..de7ecf54cd 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -627,7 +627,7 @@ static void display(Hashmap *a) { if (!terminal_is_dumb()) fputs(ANSI_HOME_CLEAR, stdout); - array = alloca(sizeof(Group*) * hashmap_size(a)); + array = newa(Group*, hashmap_size(a)); HASHMAP_FOREACH(g, a, i) if (g->n_tasks_valid || g->cpu_valid || g->memory_valid || g->io_valid) diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c index 07c25abb89..036594c735 100644 --- a/src/journal/journal-file.c +++ b/src/journal/journal-file.c @@ -1965,7 +1965,7 @@ int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const st #endif /* alloca() can't take 0, hence let's allocate at least one */ - items = alloca(sizeof(EntryItem) * MAX(1u, n_iovec)); + items = newa(EntryItem, MAX(1u, n_iovec)); for (i = 0; i < n_iovec; i++) { uint64_t p; @@ -3581,7 +3581,7 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6 n = journal_file_entry_n_items(o); /* alloca() can't take 0, hence let's allocate at least one */ - items = alloca(sizeof(EntryItem) * MAX(1u, n)); + items = newa(EntryItem, MAX(1u, n)); for (i = 0; i < n; i++) { uint64_t l, h; diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c index 0da07a1941..e0526a02ca 100644 --- a/src/journal/journal-send.c +++ b/src/journal/journal-send.c @@ -518,7 +518,7 @@ _public_ int sd_journal_sendv_with_location( assert_return(iov, -EINVAL); assert_return(n > 0, -EINVAL); - niov = alloca(sizeof(struct iovec) * (n + 3)); + niov = newa(struct iovec, (n + 3)); memcpy(niov, iov, sizeof(struct iovec) * n); ALLOCA_CODE_FUNC(f, func); diff --git a/src/test/test-condition.c b/src/test/test-condition.c index 18f325f72f..eeea778679 100644 --- a/src/test/test-condition.c +++ b/src/test/test-condition.c @@ -608,7 +608,7 @@ static void test_condition_test_group(void) { ngroups_max = sysconf(_SC_NGROUPS_MAX); assert(ngroups_max > 0); - gids = alloca(sizeof(gid_t) * ngroups_max); + gids = newa(gid_t, ngroups_max); ngroups = getgroups(ngroups_max, gids); assert(ngroups >= 0); From 8a97ff0e648dc166e052ba91a52310f55b324646 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 27 Apr 2018 14:28:51 +0200 Subject: [PATCH 4/4] update TODO --- TODO | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODO b/TODO index cc310c95d2..b576521798 100644 --- a/TODO +++ b/TODO @@ -24,6 +24,8 @@ Janitorial Clean-ups: Features: +* the error paths in usbffs_dispatch_ep() leak memory + * cgroups: figure out if we can somehow communicate in a cleaner way whether a systemd instance not running in the cgroup root shall or shall not manage the attributes of its top-level cgroup. Currently it assumes it manages all, but