mirror of
git://github.com/lxc/lxc
synced 2025-08-30 20:39:33 +00:00
Merge pull request #3736 from brauner/2021-03-26/fixes_3
oss-fuzz: fixes
This commit is contained in:
@@ -626,8 +626,8 @@ static int set_config_net_ipvlan_isolation(const char *key, const char *value,
|
||||
static int set_config_net_hwaddr(const char *key, const char *value,
|
||||
struct lxc_conf *lxc_conf, void *data)
|
||||
{
|
||||
__do_free char *new_value = NULL;
|
||||
struct lxc_netdev *netdev = data;
|
||||
char *new_value;
|
||||
|
||||
if (lxc_config_value_empty(value))
|
||||
return clr_config_net_hwaddr(key, lxc_conf, data);
|
||||
@@ -641,13 +641,10 @@ static int set_config_net_hwaddr(const char *key, const char *value,
|
||||
|
||||
rand_complete_hwaddr(new_value);
|
||||
|
||||
if (lxc_config_value_empty(new_value)) {
|
||||
free(new_value);
|
||||
netdev->hwaddr = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
netdev->hwaddr = new_value;
|
||||
if (lxc_config_value_empty(new_value))
|
||||
free_disarm(netdev->hwaddr);
|
||||
else
|
||||
netdev->hwaddr = move_ptr(new_value);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1600,9 +1597,6 @@ static int set_config_log_file(const char *key, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!abspath(value))
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
/*
|
||||
* Store these values in the lxc_conf, and then try to set for actual
|
||||
* current logging.
|
||||
|
@@ -169,7 +169,6 @@ struct lxc_netdev *lxc_network_add(struct lxc_list *networks, int idx, bool tail
|
||||
if (!netdev)
|
||||
return ret_set_errno(NULL, ENOMEM);
|
||||
|
||||
memset(netdev, 0, sizeof(*netdev));
|
||||
lxc_list_init(&netdev->ipv4);
|
||||
lxc_list_init(&netdev->ipv6);
|
||||
|
||||
@@ -177,11 +176,9 @@ struct lxc_netdev *lxc_network_add(struct lxc_list *networks, int idx, bool tail
|
||||
netdev->idx = idx;
|
||||
|
||||
/* prepare new list */
|
||||
newlist = zalloc(sizeof(*newlist));
|
||||
newlist = lxc_list_new();
|
||||
if (!newlist)
|
||||
return ret_set_errno(NULL, ENOMEM);
|
||||
|
||||
lxc_list_init(newlist);
|
||||
newlist->elem = netdev;
|
||||
|
||||
if (tail)
|
||||
@@ -199,25 +196,27 @@ struct lxc_netdev *lxc_network_add(struct lxc_list *networks, int idx, bool tail
|
||||
struct lxc_netdev *lxc_get_netdev_by_idx(struct lxc_conf *conf,
|
||||
unsigned int idx, bool allocate)
|
||||
{
|
||||
struct lxc_netdev *netdev = NULL;
|
||||
struct lxc_list *networks = &conf->network;
|
||||
struct lxc_list *insert = networks;
|
||||
|
||||
/* lookup network */
|
||||
if (!lxc_list_empty(networks)) {
|
||||
lxc_list_for_each(insert, networks) {
|
||||
netdev = insert->elem;
|
||||
struct lxc_netdev *netdev = insert->elem;
|
||||
|
||||
/* found network device */
|
||||
if (netdev->idx == idx)
|
||||
return netdev;
|
||||
else if (netdev->idx > idx)
|
||||
|
||||
if (netdev->idx > idx)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!allocate)
|
||||
return ret_set_errno(NULL, EINVAL);
|
||||
if (allocate)
|
||||
return lxc_network_add(insert, idx, true);
|
||||
|
||||
return lxc_network_add(insert, idx, true);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void lxc_log_configured_netdevs(const struct lxc_conf *conf)
|
||||
@@ -452,19 +451,21 @@ static void lxc_free_netdev(struct lxc_netdev *netdev)
|
||||
free(netdev);
|
||||
}
|
||||
|
||||
define_cleanup_function(struct lxc_netdev *, lxc_free_netdev);
|
||||
|
||||
bool lxc_remove_nic_by_idx(struct lxc_conf *conf, unsigned int idx)
|
||||
{
|
||||
call_cleaner(lxc_free_netdev) struct lxc_netdev *netdev = NULL;
|
||||
struct lxc_list *cur, *next;
|
||||
|
||||
if (lxc_list_empty(&conf->network))
|
||||
return false;
|
||||
|
||||
lxc_list_for_each_safe(cur, &conf->network, next) {
|
||||
netdev = cur->elem;
|
||||
struct lxc_netdev *netdev = cur->elem;
|
||||
|
||||
if (netdev->idx != idx)
|
||||
continue;
|
||||
|
||||
lxc_list_del(cur);
|
||||
lxc_free_netdev(netdev);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -492,9 +492,6 @@ static int build_dir(const char *name)
|
||||
if (is_empty_string(name))
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
if (!abspath(name))
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
/* Make copy of the string since we'll be modifying it. */
|
||||
n = strdup(name);
|
||||
if (!n)
|
||||
|
@@ -906,7 +906,7 @@ int parse_byte_size_string(const char *s, int64_t *converted)
|
||||
char dup[INTTYPE_TO_STRLEN(int64_t)];
|
||||
char suffix[3] = {0};
|
||||
|
||||
if (!s || strequal(s, ""))
|
||||
if (is_empty_string(s))
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
end = stpncpy(dup, s, sizeof(dup) - 1);
|
||||
@@ -920,17 +920,26 @@ int parse_byte_size_string(const char *s, int64_t *converted)
|
||||
else
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
if (suffix_len > 0 && (end - 2) == dup && !isdigit(*(end - 2)))
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
if (suffix_len > 0 && isalpha(*(end - 2)))
|
||||
suffix_len++;
|
||||
|
||||
if (suffix_len > 0) {
|
||||
if ((end - 1) == dup)
|
||||
return ret_errno(EINVAL);
|
||||
|
||||
if ((end - 2) == dup) {
|
||||
if (isalpha(*(end - 2)))
|
||||
return ret_errno(EINVAL);
|
||||
/* 1B */
|
||||
} else {
|
||||
if (isalpha(*(end - 2))) /* 12MB */
|
||||
suffix_len++;
|
||||
|
||||
/* 12B */
|
||||
}
|
||||
|
||||
memcpy(suffix, end - suffix_len, suffix_len);
|
||||
*(suffix + suffix_len) = '\0';
|
||||
*(end - suffix_len) = '\0';
|
||||
}
|
||||
|
||||
dup[lxc_char_right_gc(dup, strlen(dup))] = '\0';
|
||||
|
||||
ret = lxc_safe_long_long(dup, &conv);
|
||||
|
Reference in New Issue
Block a user