Unverified Commit f0c6219a by Stéphane Graber Committed by GitHub

Merge pull request #3773 from brauner/2021-04-06/fixes_2

confile & log: fixes
parents 9d984c3f ae393e13
...@@ -300,12 +300,22 @@ struct lxc_config_t *lxc_get_config_exact(const char *key) ...@@ -300,12 +300,22 @@ struct lxc_config_t *lxc_get_config_exact(const char *key)
return NULL; return NULL;
} }
static inline bool match_config_item(const struct lxc_config_t *entry, /* Assume a reasonable subkey size limit. */
const char *key) #define LXC_SUBKEY_LEN_MAX 256
static inline int match_config_item(const struct lxc_config_t *entry, const char *key)
{ {
size_t len;
if (entry->strict) if (entry->strict)
return strequal(entry->name, key); return strequal(entry->name, key);
return strnequal(entry->name, key, strlen(entry->name));
/* There should be no subkey longer than this. */
len = strnlen(entry->name, LXC_SUBKEY_LEN_MAX);
if (len == LXC_SUBKEY_LEN_MAX)
return error_ret(-E2BIG, "Excessive subkey length");
return strnequal(entry->name, key, len);
} }
struct lxc_config_t *lxc_get_config(const char *key) struct lxc_config_t *lxc_get_config(const char *key)
...@@ -313,8 +323,12 @@ struct lxc_config_t *lxc_get_config(const char *key) ...@@ -313,8 +323,12 @@ struct lxc_config_t *lxc_get_config(const char *key)
for (size_t i = 0; i < ARRAY_SIZE(config_jump_table); i++) { for (size_t i = 0; i < ARRAY_SIZE(config_jump_table); i++) {
struct lxc_config_t *cur = &config_jump_table[i]; struct lxc_config_t *cur = &config_jump_table[i];
if (!match_config_item(cur, key)) switch (match_config_item(cur, key)) {
case 0:
continue; continue;
case -E2BIG:
return NULL;
}
return cur; return cur;
} }
......
...@@ -583,6 +583,13 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ ...@@ -583,6 +583,13 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \
__internal_ret__; \ __internal_ret__; \
}) })
#define error_ret(__ret__, format, ...) \
({ \
typeof(__ret__) __internal_ret__ = (__ret__); \
ERROR(format, ##__VA_ARGS__); \
__internal_ret__; \
})
#define syswarn(format, ...) \ #define syswarn(format, ...) \
({ \ ({ \
SYSWARN(format, ##__VA_ARGS__); \ SYSWARN(format, ##__VA_ARGS__); \
......
...@@ -663,10 +663,10 @@ enum { ...@@ -663,10 +663,10 @@ enum {
__internal_ret__; \ __internal_ret__; \
}) })
#define ret_errno(__errno__) \ #define ret_errno(__errno__) \
({ \ ({ \
errno = (__errno__); \ errno = labs(__errno__); \
-(__errno__); \ -errno; \
}) })
/* Container's specific file/directory names */ /* Container's specific file/directory names */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment