Message ID | 20241128032955.11711-1-zichenxie0106@gmail.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | [v2] samples/landlock: Fix possible NULL dereference in parse_path() | expand |
Thanks! I've simplified a bit your patch and pushed it to my next tree. On Wed, Nov 27, 2024 at 09:29:56PM -0600, Gax-c wrote: > From: Zichen Xie <zichenxie0106@gmail.com> > > malloc() may return NULL, leading to NULL dereference. > Add a NULL check. > > Fixes: ba84b0bf5a16 ("samples/landlock: Add a sandbox manager example") > Signed-off-by: Zichen Xie <zichenxie0106@gmail.com> > Cc: stable@vger.kernel.org > --- > v2: Modify logic & Add Fixes tag. > --- > samples/landlock/sandboxer.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/samples/landlock/sandboxer.c b/samples/landlock/sandboxer.c > index 57565dfd74a2..ef2a34173d84 100644 > --- a/samples/landlock/sandboxer.c > +++ b/samples/landlock/sandboxer.c > @@ -91,6 +91,9 @@ static int parse_path(char *env_path, const char ***const path_list) > } > } > *path_list = malloc(num_paths * sizeof(**path_list)); > + if (*path_list == NULL) > + return -1; > + > for (i = 0; i < num_paths; i++) > (*path_list)[i] = strsep(&env_path, ENV_DELIMITER); > > @@ -127,6 +130,11 @@ static int populate_ruleset_fs(const char *const env_var, const int ruleset_fd, > env_path_name = strdup(env_path_name); > unsetenv(env_var); > num_paths = parse_path(env_path_name, &path_list); > + if (num_paths == -1) { > + fprintf(stderr, "Failed to allocate memory\n"); > + ret = 1; > + goto out_free_name; > + } > if (num_paths == 1 && path_list[0][0] == '\0') { > /* > * Allows to not use all possible restrictions (e.g. use > -- > 2.34.1 > >
diff --git a/samples/landlock/sandboxer.c b/samples/landlock/sandboxer.c index 57565dfd74a2..ef2a34173d84 100644 --- a/samples/landlock/sandboxer.c +++ b/samples/landlock/sandboxer.c @@ -91,6 +91,9 @@ static int parse_path(char *env_path, const char ***const path_list) } } *path_list = malloc(num_paths * sizeof(**path_list)); + if (*path_list == NULL) + return -1; + for (i = 0; i < num_paths; i++) (*path_list)[i] = strsep(&env_path, ENV_DELIMITER); @@ -127,6 +130,11 @@ static int populate_ruleset_fs(const char *const env_var, const int ruleset_fd, env_path_name = strdup(env_path_name); unsetenv(env_var); num_paths = parse_path(env_path_name, &path_list); + if (num_paths == -1) { + fprintf(stderr, "Failed to allocate memory\n"); + ret = 1; + goto out_free_name; + } if (num_paths == 1 && path_list[0][0] == '\0') { /* * Allows to not use all possible restrictions (e.g. use