[PATCH master 1/3] glob: use empty globfree when compiling without CONFIG_GLOB

Sascha Hauer sha at pengutronix.de
Mon Mar 22 04:47:06 GMT 2021


On Fri, Mar 19, 2021 at 07:26:06PM +0100, Ahmad Fatoum wrote:
> We already return an error code unconditionally when building with
> !CONFIG_GLOB. We need to do the same for globfree. Otherwise,
> we run risk of corrupting memory.
> 
> This issue exists since the code was first added, but it became
> more acute with 90cde3b9ff46 ("startup: Execute init scripts in
> alphabetical order"), which added a globfree into the shell init.
> Configuration without CONFIG_GLOB would from then on experience
> memory corruption during startup.
> 
> Reported-by: Antony Pavlov <antonynpavlov at gmail.com>
> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
> ---

Applied, thanks

Sascha

>  include/glob.h |  6 +++++-
>  lib/glob.c     | 24 ++++++++++++------------
>  2 files changed, 17 insertions(+), 13 deletions(-)
> 
> diff --git a/include/glob.h b/include/glob.h
> index 5f532e6652c3..ec0ac66f8765 100644
> --- a/include/glob.h
> +++ b/include/glob.h
> @@ -177,6 +177,7 @@ extern int glob __P ((__const char *__restrict __pattern, int __flags,
>  		      int (*__errfunc) (__const char *, int),
>  		      glob_t *__restrict __pglob));
>  
> +extern void globfree __P ((glob_t *__pglob));
>  #else
>  static inline int glob __P ((__const char *__restrict __pattern, int __flags,
>  		      int (*__errfunc) (__const char *, int),
> @@ -184,9 +185,12 @@ static inline int glob __P ((__const char *__restrict __pattern, int __flags,
>  {
>  	return GLOB_ABORTED;
>  }
> +
> +static inline void globfree __P ((glob_t *__pglob))
> +{
> +}
>  #endif
>  /* Free storage allocated in PGLOB by a previous `glob' call.  */
> -extern void globfree __P ((glob_t *__pglob));
>  #else
>  extern int glob __P ((__const char *__restrict __pattern, int __flags,
>  		      int (*__errfunc) (__const char *, int),
> diff --git a/lib/glob.c b/lib/glob.c
> index 32f7afdce81b..8523bad9a7ef 100644
> --- a/lib/glob.c
> +++ b/lib/glob.c
> @@ -406,6 +406,18 @@ static int glob_in_dir(const char *pattern, const char *directory,
>  	}
>  	return nfound == 0 ? GLOB_NOMATCH : 0;
>  }
> +
> +/* Free storage allocated in PGLOB by a previous `glob' call.  */
> +void globfree(glob_t *pglob)
> +{
> +	if (pglob->gl_pathv != NULL) {
> +		int i = pglob->gl_flags & GLOB_DOOFFS ? pglob->gl_offs : 0;
> +		for (; i < pglob->gl_pathc; ++i)
> +			if (pglob->gl_pathv[i] != NULL)
> +				free((__ptr_t) pglob->gl_pathv[i]);
> +		free((__ptr_t) pglob->gl_pathv);
> +	}
> +}
>  #endif /* CONFIG_GLOB */
>  
>  #ifdef CONFIG_FAKE_GLOB
> @@ -443,15 +455,3 @@ glob_t *pglob;
>  	return 0;
>  }
>  #endif /* CONFIG_FAKE_GLOB */
> -
> -/* Free storage allocated in PGLOB by a previous `glob' call.  */
> -void globfree(glob_t *pglob)
> -{
> -	if (pglob->gl_pathv != NULL) {
> -		int i = pglob->gl_flags & GLOB_DOOFFS ? pglob->gl_offs : 0;
> -		for (; i < pglob->gl_pathc; ++i)
> -			if (pglob->gl_pathv[i] != NULL)
> -				free((__ptr_t) pglob->gl_pathv[i]);
> -		free((__ptr_t) pglob->gl_pathv);
> -	}
> -}
> -- 
> 2.29.2
> 
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list