This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2] locale: don't crash if locale-archive contains all zeros


On 12/01/2013 06:36 AM, Aurelien Jarno wrote:
> In case of power failure followed by filesystem issues locale-archive
> can end-up containing all zeros. In that case all calls to setlocale()
> generate a SIGFPE. This renders a system with a default non-C locale
> unbootable.
> 
> Avoid this by ignoring the locale instead of generating a SIGFPE.
> ---
>  locale/loadarchive.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> 2013-12-01  Aurelien Jarno <aurelien@aurel32.net>
> 
> 	* locale/loadarchive.c (_nl_load_locale_from_archive): Avoid
> 	division by 0.
> 
> diff --git a/locale/loadarchive.c b/locale/loadarchive.c
> index 70136dc..f723780 100644
> --- a/locale/loadarchive.c
> +++ b/locale/loadarchive.c
> @@ -274,6 +274,10 @@ _nl_load_locale_from_archive (int category, const char **namep)
>    namehashtab = (struct namehashent *) ((char *) head
>  					+ head->namehash_offset);
>  
> +  /* Avoid division by 0 if the file is corrupted.  */
> +  if (__glibc_unlikely (head->namehash_size == 0))
> +    goto close_and_out;
> +
>    idx = hval % head->namehash_size;
>    incr = 1 + hval % (head->namehash_size - 2);
>  
> 

Looks OK to me as long as you did the same testing as last time,
and no regressions in the testsuite.

Please remember to state your testing results along with your post.

Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]