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 Tue, Dec 03, 2013 at 12:21:33PM +0100, Andreas Schwab wrote:
> Aurelien Jarno <aurelien@aurel32.net> writes:
> 
> > 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);
> 
> That won't help for head->namehash_size == 2, or any other corruptions.
> 
Which is less common zeroed file. Proper solution would be starting
files with magic constant which is too late to add.

Do you have idea to detect corruption other than changing check to

head->namehash_size == 0 || head->namehash_size == 2


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