Merge branch 'master' of ssh://sources.redhat.com/git/glibc

Conflicts:
	ChangeLog
This commit is contained in:
Ulrich Drepper 2010-03-25 19:45:20 -07:00
commit 70c90289ff
4 changed files with 25 additions and 2 deletions

View File

@ -8,6 +8,10 @@
* sysdeps/unix/sysv/linux/clock_gettime.c: Likewise. * sysdeps/unix/sysv/linux/clock_gettime.c: Likewise.
* sysdeps/unix/sysv/linux/clock_settime.c: Likewise. * sysdeps/unix/sysv/linux/clock_settime.c: Likewise.
2010-03-25 Andreas Schwab <schwab@redhat.com>
* sysdeps/posix/cuserid.c: Fix typo.
2010-03-16 Chris Demetriou <cgd@google.com> 2010-03-16 Chris Demetriou <cgd@google.com>
[BZ #11394] [BZ #11394]

View File

@ -4852,7 +4852,8 @@ _int_free(mstate av, mchunkptr p)
free_perturb (chunk2mem(p), size - SIZE_SZ); free_perturb (chunk2mem(p), size - SIZE_SZ);
set_fastchunks(av); set_fastchunks(av);
fb = &fastbin (av, fastbin_index(size)); unsigned int idx = fastbin_index(size);
fb = &fastbin (av, idx);
#ifdef ATOMIC_FASTBINS #ifdef ATOMIC_FASTBINS
mchunkptr fd; mchunkptr fd;
@ -4866,6 +4867,12 @@ _int_free(mstate av, mchunkptr p)
errstr = "double free or corruption (fasttop)"; errstr = "double free or corruption (fasttop)";
goto errout; goto errout;
} }
if (old != NULL
&& __builtin_expect (fastbin_index(chunksize(old)) != idx, 0))
{
errstr = "invalid fastbin entry (free)";
goto errout;
}
p->fd = fd = old; p->fd = fd = old;
} }
while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd); while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd);
@ -4877,6 +4884,12 @@ _int_free(mstate av, mchunkptr p)
errstr = "double free or corruption (fasttop)"; errstr = "double free or corruption (fasttop)";
goto errout; goto errout;
} }
if (*fb != NULL
&& __builtin_expect (fastbin_index(chunksize(*fb)) != idx, 0))
{
errstr = "invalid fastbin entry (free)";
goto errout;
}
p->fd = *fb; p->fd = *fb;
*fb = p; *fb = p;

View File

@ -51,6 +51,7 @@ main (void)
for (i=0; i<100; ++i) for (i=0; i<100; ++i)
{ {
printf("round %li\n", i);
save_state = malloc_get_state (); save_state = malloc_get_state ();
if (save_state == NULL) if (save_state == NULL)
{ {
@ -64,13 +65,18 @@ main (void)
merror ("realloc (i*4) failed."); merror ("realloc (i*4) failed.");
free (save_state); free (save_state);
} }
puts("done");
p1 = realloc (p1, 40); p1 = realloc (p1, 40);
puts("after realloc");
free (p2); free (p2);
puts("after free 1");
p2 = malloc (10); p2 = malloc (10);
puts("after malloc");
if (p2 == NULL) if (p2 == NULL)
merror ("malloc (10) failed."); merror ("malloc (10) failed.");
free (p1); free (p1);
puts("after free 2");
return errors != 0; return errors != 0;
} }

View File

@ -44,6 +44,6 @@ cuserid (s)
if (s == NULL) if (s == NULL)
s = name; s = name;
s[L_userid - 1] = '\0'; s[L_cuserid - 1] = '\0';
return strncpy (s, pwptr->pw_name, L_cuserid - 1); return strncpy (s, pwptr->pw_name, L_cuserid - 1);
} }