On 3/19/18 10:56 AM, Stephen Hemminger wrote: > Avoid running into buffer overflows with excessively long network > namespace. Fixes Gcc-8 warning about possible snprintf truncation. > > Signed-off-by: Stephen Hemminger <[email protected]> > --- > lib/namespace.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/lib/namespace.c b/lib/namespace.c > index 682634028587..ce5683a5f4e6 100644 > --- a/lib/namespace.c > +++ b/lib/namespace.c > @@ -18,7 +18,7 @@ > static void bind_etc(const char *name) > { > char etc_netns_path[PATH_MAX]; > - char netns_name[PATH_MAX]; > + char netns_name[2*PATH_MAX]; > char etc_name[PATH_MAX]; > struct dirent *entry; > DIR *dir; > @@ -52,6 +52,12 @@ int netns_switch(char *name) > unsigned long mountflags = 0; > struct statvfs fsstat; > > + if (strlen(name) >= NAME_MAX) { > + fprintf(stderr, "Network namespace name too long\"%s\"\n", > + name); > + return -1; > + } > + > snprintf(net_path, sizeof(net_path), "%s/%s", NETNS_RUN_DIR, name); > netns = open(net_path, O_RDONLY | O_CLOEXEC); > if (netns < 0) { >
Since PATH_MAX is a Linux limit for file paths, why not ensure strlen(name) + strlen(NETNS_RUN_DIR) + 2 <= PATH_MAX
