]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/glibc/glibc-rh809602.patch
Merge remote-tracking branch 'origin/next' into thirteen
[people/teissler/ipfire-2.x.git] / src / patches / glibc / glibc-rh809602.patch
1 diff -rup a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
2 --- a/nscd/nscd_getserv_r.c 2012-04-04 16:37:27.873951850 -0600
3 +++ b/nscd/nscd_getserv_r.c 2012-04-04 16:37:49.904837348 -0600
4 @@ -124,6 +123,7 @@ nscd_getserv_r (const char *crit, size_t
5 s_name = (char *) (&found->data[0].servdata + 1);
6 serv_resp = found->data[0].servdata;
7 s_proto = s_name + serv_resp.s_name_len;
8 + alloca_aliases_len = 1;
9 aliases_len = (uint32_t *) (s_proto + serv_resp.s_proto_len);
10 aliases_list = ((char *) aliases_len
11 + serv_resp.s_aliases_cnt * sizeof (uint32_t));
12 @@ -154,7 +154,9 @@ nscd_getserv_r (const char *crit, size_t
13 + (serv_resp.s_aliases_cnt
14 * sizeof (uint32_t)));
15 if (alloca_aliases_len)
16 - tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t));
17 + tmp = alloca_account (serv_resp.s_aliases_cnt
18 + * sizeof (uint32_t),
19 + alloca_used);
20 else
21 {
22 tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t));
23 @@ -249,8 +251,9 @@ nscd_getserv_r (const char *crit, size_t
24 + (serv_resp.s_aliases_cnt
25 * sizeof (uint32_t)));
26 if (alloca_aliases_len)
27 - aliases_len = alloca (serv_resp.s_aliases_cnt
28 - * sizeof (uint32_t));
29 + aliases_len = alloca_account (serv_resp.s_aliases_cnt
30 + * sizeof (uint32_t),
31 + alloca_used);
32 else
33 {
34 aliases_len = malloc (serv_resp.s_aliases_cnt
35 @@ -368,7 +371,11 @@ nscd_getserv_r (const char *crit, size_t
36 }
37
38 if (retval != -1)
39 - goto retry;
40 + {
41 + if (!alloca_aliases_len)
42 + free ((void *) aliases_len);
43 + goto retry;
44 + }
45 }
46
47 if (!alloca_aliases_len)