Skip to content

Commit

Permalink
upstream: fix leak of CanonicalizePermittedCNAMEs on error path;
Browse files Browse the repository at this point in the history
spotted by Coverity (CID 438039)

OpenBSD-Commit-ID: 208839699939721f452a4418afc028a9f9d3d8af
  • Loading branch information
djmdjm committed Mar 4, 2024
1 parent 65a44a8 commit 3deb501
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions readconf.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: readconf.c,v 1.385 2024/03/04 02:16:11 djm Exp $ */
/* $OpenBSD: readconf.c,v 1.386 2024/03/04 04:13:18 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
Expand Down Expand Up @@ -890,6 +890,20 @@ parse_token(const char *cp, const char *filename, int linenum,
return oBadOption;
}

static void
free_canon_cnames(struct allowed_cname *cnames, u_int n)
{
u_int i;

if (cnames == NULL || n == 0)
return;
for (i = 0; i < n; i++) {
free(cnames[i].source_list);
free(cnames[i].target_list);
}
free(cnames);
}

/* Multistate option parsing */
struct multistate {
char *key;
Expand Down Expand Up @@ -2160,13 +2174,10 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host,
if (found && *activep) {
options->permitted_cnames = cnames;
options->num_permitted_cnames = ncnames;
} else {
for (i = 0; i < ncnames; i++) {
free(cnames[i].source_list);
free(cnames[i].target_list);
}
free(cnames);
cnames = NULL; /* transferred */
ncnames = 0;
}
/* un-transferred cnames is cleaned up before exit */
break;

case oCanonicalizeHostname:
Expand Down Expand Up @@ -2405,6 +2416,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host,
/* success */
ret = 0;
out:
free_canon_cnames(cnames, ncnames);
opt_array_free2(strs, NULL, nstrs);
argv_free(oav, oac);
return ret;
Expand Down

0 comments on commit 3deb501

Please sign in to comment.