ipnetns: harden helper functions wrt. negative netns ids
Negative values are invalid netns ids. Ensure that helper functions don't accidentally try to process them. Signed-off-by: Guillaume Nault <gnault@redhat.com> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
df6da60bcb
commit
08ba67db7b
14
ip/ipnetns.c
14
ip/ipnetns.c
|
|
@ -161,9 +161,13 @@ static struct hlist_head name_head[NSIDMAP_SIZE];
|
||||||
|
|
||||||
static struct nsid_cache *netns_map_get_by_nsid(int nsid)
|
static struct nsid_cache *netns_map_get_by_nsid(int nsid)
|
||||||
{
|
{
|
||||||
uint32_t h = NSID_HASH_NSID(nsid);
|
|
||||||
struct hlist_node *n;
|
struct hlist_node *n;
|
||||||
|
uint32_t h;
|
||||||
|
|
||||||
|
if (nsid < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
h = NSID_HASH_NSID(nsid);
|
||||||
hlist_for_each(n, &nsid_head[h]) {
|
hlist_for_each(n, &nsid_head[h]) {
|
||||||
struct nsid_cache *c = container_of(n, struct nsid_cache,
|
struct nsid_cache *c = container_of(n, struct nsid_cache,
|
||||||
nsid_hash);
|
nsid_hash);
|
||||||
|
|
@ -178,6 +182,9 @@ char *get_name_from_nsid(int nsid)
|
||||||
{
|
{
|
||||||
struct nsid_cache *c;
|
struct nsid_cache *c;
|
||||||
|
|
||||||
|
if (nsid < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
netns_nsid_socket_init();
|
netns_nsid_socket_init();
|
||||||
netns_map_init();
|
netns_map_init();
|
||||||
|
|
||||||
|
|
@ -266,6 +273,9 @@ static int netns_get_name(int nsid, char *name)
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
|
if (nsid < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
dir = opendir(NETNS_RUN_DIR);
|
dir = opendir(NETNS_RUN_DIR);
|
||||||
if (!dir)
|
if (!dir)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
@ -277,7 +287,7 @@ static int netns_get_name(int nsid, char *name)
|
||||||
continue;
|
continue;
|
||||||
id = get_netnsid_from_name(entry->d_name);
|
id = get_netnsid_from_name(entry->d_name);
|
||||||
|
|
||||||
if (nsid == id) {
|
if (id >= 0 && nsid == id) {
|
||||||
strcpy(name, entry->d_name);
|
strcpy(name, entry->d_name);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue