wok-undigest diff glibc/stuff/glibc-2.14.1-CVE-2015-0235.patch @ rev 1235
compile alsa-lib
author | Hans-G?nter Theisgen |
---|---|
date | Sat Aug 06 17:22:27 2022 +0100 (23 months ago) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/glibc/stuff/glibc-2.14.1-CVE-2015-0235.patch Sat Aug 06 17:22:27 2022 +0100 1.3 @@ -0,0 +1,149 @@ 1.4 +CVE-2015-0235 GHOST 1.5 +From https://sourceware.org/git/?p=glibc.git;a=commit;h=d5dd6189d506068ed11c8bfa1e1e9bffde04decd 1.6 +--- glibc-2.14.1/nss/digits_dots.c 1.7 ++++ glibc-2.14.1/nss/digits_dots.c 1.8 +@@ -47,7 +47,10 @@ 1.9 + { 1.10 + if (h_errnop) 1.11 + *h_errnop = NETDB_INTERNAL; 1.12 +- *result = NULL; 1.13 ++ if (buffer_size == NULL) 1.14 ++ *status = NSS_STATUS_TRYAGAIN; 1.15 ++ else 1.16 ++ *result = NULL; 1.17 + return -1; 1.18 + } 1.19 + 1.20 +@@ -84,14 +87,16 @@ 1.21 + } 1.22 + 1.23 + size_needed = (sizeof (*host_addr) 1.24 +- + sizeof (*h_addr_ptrs) + strlen (name) + 1); 1.25 ++ + sizeof (*h_addr_ptrs) 1.26 ++ + sizeof (*h_alias_ptr) + strlen (name) + 1); 1.27 + 1.28 + if (buffer_size == NULL) 1.29 + { 1.30 + if (buflen < size_needed) 1.31 + { 1.32 ++ *status = NSS_STATUS_TRYAGAIN; 1.33 + if (h_errnop != NULL) 1.34 +- *h_errnop = TRY_AGAIN; 1.35 ++ *h_errnop = NETDB_INTERNAL; 1.36 + __set_errno (ERANGE); 1.37 + goto done; 1.38 + } 1.39 +@@ -110,7 +115,7 @@ 1.40 + *buffer_size = 0; 1.41 + __set_errno (save); 1.42 + if (h_errnop != NULL) 1.43 +- *h_errnop = TRY_AGAIN; 1.44 ++ *h_errnop = NETDB_INTERNAL; 1.45 + *result = NULL; 1.46 + goto done; 1.47 + } 1.48 +@@ -150,7 +155,9 @@ 1.49 + if (! ok) 1.50 + { 1.51 + *h_errnop = HOST_NOT_FOUND; 1.52 +- if (buffer_size) 1.53 ++ if (buffer_size == NULL) 1.54 ++ *status = NSS_STATUS_NOTFOUND; 1.55 ++ else 1.56 + *result = NULL; 1.57 + goto done; 1.58 + } 1.59 +@@ -202,15 +209,6 @@ 1.60 + 1.61 + if ((isxdigit (name[0]) && strchr (name, ':') != NULL) || name[0] == ':') 1.62 + { 1.63 +- const char *cp; 1.64 +- char *hostname; 1.65 +- typedef unsigned char host_addr_t[16]; 1.66 +- host_addr_t *host_addr; 1.67 +- typedef char *host_addr_list_t[2]; 1.68 +- host_addr_list_t *h_addr_ptrs; 1.69 +- size_t size_needed; 1.70 +- int addr_size; 1.71 +- 1.72 + switch (af) 1.73 + { 1.74 + default: 1.75 +@@ -226,7 +224,10 @@ 1.76 + /* This is not possible. We cannot represent an IPv6 address 1.77 + in an `struct in_addr' variable. */ 1.78 + *h_errnop = HOST_NOT_FOUND; 1.79 +- *result = NULL; 1.80 ++ if (buffer_size == NULL) 1.81 ++ *status = NSS_STATUS_NOTFOUND; 1.82 ++ else 1.83 ++ *result = NULL; 1.84 + goto done; 1.85 + 1.86 + case AF_INET6: 1.87 +@@ -234,42 +235,6 @@ 1.88 + break; 1.89 + } 1.90 + 1.91 +- size_needed = (sizeof (*host_addr) 1.92 +- + sizeof (*h_addr_ptrs) + strlen (name) + 1); 1.93 +- 1.94 +- if (buffer_size == NULL && buflen < size_needed) 1.95 +- { 1.96 +- if (h_errnop != NULL) 1.97 +- *h_errnop = TRY_AGAIN; 1.98 +- __set_errno (ERANGE); 1.99 +- goto done; 1.100 +- } 1.101 +- else if (buffer_size != NULL && *buffer_size < size_needed) 1.102 +- { 1.103 +- char *new_buf; 1.104 +- *buffer_size = size_needed; 1.105 +- new_buf = realloc (*buffer, *buffer_size); 1.106 +- 1.107 +- if (new_buf == NULL) 1.108 +- { 1.109 +- save = errno; 1.110 +- free (*buffer); 1.111 +- __set_errno (save); 1.112 +- *buffer = NULL; 1.113 +- *buffer_size = 0; 1.114 +- *result = NULL; 1.115 +- goto done; 1.116 +- } 1.117 +- *buffer = new_buf; 1.118 +- } 1.119 +- 1.120 +- memset (*buffer, '\0', size_needed); 1.121 +- 1.122 +- host_addr = (host_addr_t *) *buffer; 1.123 +- h_addr_ptrs = (host_addr_list_t *) 1.124 +- ((char *) host_addr + sizeof (*host_addr)); 1.125 +- hostname = (char *) h_addr_ptrs + sizeof (*h_addr_ptrs); 1.126 +- 1.127 + for (cp = name;; ++cp) 1.128 + { 1.129 + if (!*cp) 1.130 +@@ -282,7 +247,9 @@ 1.131 + if (inet_pton (AF_INET6, name, host_addr) <= 0) 1.132 + { 1.133 + *h_errnop = HOST_NOT_FOUND; 1.134 +- if (buffer_size) 1.135 ++ if (buffer_size == NULL) 1.136 ++ *status = NSS_STATUS_NOTFOUND; 1.137 ++ else 1.138 + *result = NULL; 1.139 + goto done; 1.140 + } 1.141 +--- glibc-2.14.1/nss/getXXbyYY_r.c 1.142 ++++ glibc-2.14.1/nss/getXXbyYY_r.c 1.143 +@@ -180,6 +180,9 @@ 1.144 + case -1: 1.145 + return errno; 1.146 + case 1: 1.147 ++#ifdef NEED_H_ERRNO 1.148 ++ any_service = true; 1.149 ++#endif 1.150 + goto done; 1.151 + } 1.152 + #endif