Hi,

The following patch for httpd makes sure the value of the asprintf buffer is
zeroed on error and not relied upon, so at the 'done' label free(body) and
free(hstsheader) is safe.

from asprintf(3):

        "The asprintf() and vasprintf() functions return the number of 
characters
        that were output to the newly allocated string (excluding the '\0').
        A pointer to the newly allocated string is returned in ret; it
        should be passed to free(3) to release the allocated storage when it is
        no longer needed.  If sufficient space cannot be allocated, these
        functions will return -1. >>The value of ret in this situation is
        implementation-dependent (on OpenBSD, ret will be set to the null
        pointer, but this behavior should not be relied upon)."<<


Index: server_http.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/server_http.c,v
retrieving revision 1.106
diff -u -p -r1.106 server_http.c
--- server_http.c       8 Mar 2016 09:33:15 -0000       1.106
+++ server_http.c       27 Apr 2016 12:01:00 -0000
@@ -826,8 +826,10 @@ server_abort_http(struct client *clt, un
            "<hr>\n<address>%s</address>\n"
            "</body>\n"
            "</html>\n",
-           code, httperr, style, code, httperr, HTTPD_SERVERNAME)) == -1)
+           code, httperr, style, code, httperr, HTTPD_SERVERNAME)) == -1) {
+               body = NULL;
                goto done;
+       }
 
        if (srv_conf->flags & SRVFLAG_SERVER_HSTS) {
                if (asprintf(&hstsheader, "Strict-Transport-Security: "
@@ -835,8 +837,10 @@ server_abort_http(struct client *clt, un
                    srv_conf->hsts_flags & HSTSFLAG_SUBDOMAINS ?
                    "; includeSubDomains" : "",
                    srv_conf->hsts_flags & HSTSFLAG_PRELOAD ?
-                   "; preload" : "") == -1)
+                   "; preload" : "") == -1) {
+                       hstsheader = NULL;
                        goto done;
+               }
        }
 
        /* Add basic HTTP headers */

--

Kind regards,
Hiltjo

Reply via email to