Skip to content

Commit

Permalink
Fix double free (droe#319)
Browse files Browse the repository at this point in the history
Bug found by Svace static analyzer:

  Pointer 'pem' is passed to a function free at log.c:1468 by calling function 'free'
  after the referenced memory was deallocated at logbuf.c:54 by passing as 1st parameter
  to function 'logbuf_new' at log.c:1464

Thanks to @disaykin
  • Loading branch information
disaykin authored May 15, 2023
1 parent 31727da commit bfe74d3
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 15 deletions.
4 changes: 1 addition & 3 deletions log.c
Original file line number Diff line number Diff line change
Expand Up @@ -1454,10 +1454,8 @@ log_cert_submit(const char *fn, X509 *crt)
if (!(pem = ssl_x509_to_pem(crt)))
goto errout2;
if (!(lb = logbuf_new(pem, strlen(pem), NULL)))
goto errout3;
goto errout2;
return logger_submit(cert_log, fh, 0, lb);
errout3:
free(pem);
errout2:
free(fh);
errout1:
Expand Down
11 changes: 1 addition & 10 deletions logger.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,6 @@ logger_printf(logger_t *logger, void *fh, unsigned long prepflags,

if (!(lb = logbuf_new(NULL, 0, NULL)))
return -1;
lb->fh = fh;
va_start(ap, fmt);
lb->sz = vasprintf((char**)&lb->buf, fmt, ap);
va_end(ap);
Expand All @@ -324,7 +323,6 @@ logger_write(logger_t *logger, void *fh, unsigned long prepflags,

if (!(lb = logbuf_new_copy(buf, sz, NULL)))
return -1;
lb->fh = fh;
return logger_submit(logger, fh, prepflags, lb);
}
int
Expand All @@ -335,7 +333,6 @@ logger_print(logger_t *logger, void *fh, unsigned long prepflags,

if (!(lb = logbuf_new_copy(s, strlen(s), NULL)))
return -1;
lb->fh = fh;
return logger_submit(logger, fh, prepflags, lb);
}
int
Expand All @@ -346,19 +343,13 @@ logger_write_freebuf(logger_t *logger, void *fh, unsigned long prepflags,

if (!(lb = logbuf_new(buf, sz, NULL)))
return -1;
lb->fh = fh;
return logger_submit(logger, fh, prepflags, lb);
}
int
logger_print_freebuf(logger_t *logger, void *fh, unsigned long prepflags,
char *s)
{
logbuf_t *lb;

if (!(lb = logbuf_new(s, strlen(s), NULL)))
return -1;
lb->fh = fh;
return logger_submit(logger, fh, prepflags, lb);
return logger_write_freebuf(logger, fh, prepflags, s, strlen(s));
}

/* vim: set noet ft=c: */
2 changes: 0 additions & 2 deletions pxyconn.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,6 @@ pxy_log_connect_nonhttp(pxy_conn_ctx_t *ctx)
}
if (ctx->opts->connectlog) {
if (log_connect_print_free(msg) == -1) {
free(msg);
log_err_printf("Warning: Connection logging failed\n");
}
} else {
Expand Down Expand Up @@ -567,7 +566,6 @@ pxy_log_connect_http(pxy_conn_ctx_t *ctx)
}
if (ctx->opts->connectlog) {
if (log_connect_print_free(msg) == -1) {
free(msg);
log_err_printf("Warning: Connection logging failed\n");
}
} else {
Expand Down

0 comments on commit bfe74d3

Please sign in to comment.