Free resources on error in mkstemp and fdopen
authordoug <doug@openbsd.org>
Thu, 21 Aug 2014 01:08:52 +0000 (01:08 +0000)
committerdoug <doug@openbsd.org>
Thu, 21 Aug 2014 01:08:52 +0000 (01:08 +0000)
ok djm@

usr.bin/ssh/moduli.c
usr.bin/ssh/ssh-keygen.c

index 0457cf8..2072afa 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: moduli.c,v 1.28 2013/10/24 00:49:49 dtucker Exp $ */
+/* $OpenBSD: moduli.c,v 1.29 2014/08/21 01:08:52 doug Exp $ */
 /*
  * Copyright 1994 Phil Karn <karn@qualcomm.com>
  * Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com>
@@ -457,6 +457,7 @@ write_checkpoint(char *cpfile, u_int32_t lineno)
        }
        if ((fp = fdopen(r, "w")) == NULL) {
                logit("write_checkpoint: fdopen: %s", strerror(errno));
+               unlink(tmp);
                close(r);
                return;
        }
index 9031683..bddac02 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keygen.c,v 1.249 2014/07/03 03:47:27 djm Exp $ */
+/* $OpenBSD: ssh-keygen.c,v 1.250 2014/08/21 01:08:52 doug Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -953,12 +953,14 @@ do_gen_all_hostkeys(struct passwd *pw)
                f = fdopen(fd, "w");
                if (f == NULL) {
                        printf("fdopen %s failed\n", identity_file);
+                       close(fd);
                        key_free(public);
                        first = 0;
                        continue;
                }
                if (!key_write(public, f)) {
                        fprintf(stderr, "write key failed\n");
+                       fclose(f);
                        key_free(public);
                        first = 0;
                        continue;