]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
- (djm) [loginrec.c] Fix some fd leaks on error paths. ok dtucker
authorDamien Miller <djm@mindrot.org>
Sun, 2 Jan 2011 10:43:59 +0000 (21:43 +1100)
committerDamien Miller <djm@mindrot.org>
Sun, 2 Jan 2011 10:43:59 +0000 (21:43 +1100)
ChangeLog
loginrec.c

index 16100a052d9798b598c9ea0955217b9adfe29c47..5007e8c520daa2934ee347b94120e1d540742261 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+20110102
+ - (djm) [loginrec.c] Fix some fd leaks on error paths. ok dtucker
+
 20101226
  - (dtucker) OpenBSD CVS Sync
    - djm@cvs.openbsd.org 2010/12/08 04:02:47
index cccaa47ae35de9f35450bbe7d580b89ba9cb45a0..587d55f7dd7be68be905b67e2f925590bdbed7fc 100644 (file)
@@ -873,11 +873,13 @@ utmp_write_direct(struct logininfo *li, struct utmp *ut)
                pos = (off_t)tty * sizeof(struct utmp);
                if ((ret = lseek(fd, pos, SEEK_SET)) == -1) {
                        logit("%s: lseek: %s", __func__, strerror(errno));
+                       close(fd);
                        return (0);
                }
                if (ret != pos) {
                        logit("%s: Couldn't seek to tty %d slot in %s",
                            __func__, tty, UTMP_FILE);
+                       close(fd);
                        return (0);
                }
                /*
@@ -893,16 +895,20 @@ utmp_write_direct(struct logininfo *li, struct utmp *ut)
 
                if ((ret = lseek(fd, pos, SEEK_SET)) == -1) {
                        logit("%s: lseek: %s", __func__, strerror(errno));
+                       close(fd);
                        return (0);
                }
                if (ret != pos) {
                        logit("%s: Couldn't seek to tty %d slot in %s",
                            __func__, tty, UTMP_FILE);
+                       close(fd);
                        return (0);
                }
                if (atomicio(vwrite, fd, ut, sizeof(*ut)) != sizeof(*ut)) {
                        logit("%s: error writing %s: %s", __func__,
                            UTMP_FILE, strerror(errno));
+                       close(fd);
+                       return (0);
                }
 
                close(fd);
@@ -1206,7 +1212,7 @@ wtmp_get_entry(struct logininfo *li)
                        close (fd);
                        return (0);
                }
-               if ( wtmp_islogin(li, &ut) ) {
+               if (wtmp_islogin(li, &ut) ) {
                        found = 1;
                        /*
                         * We've already checked for a time in struct
@@ -1502,6 +1508,7 @@ lastlog_openseek(struct logininfo *li, int *fd, int filemode)
                if (lseek(*fd, offset, SEEK_SET) != offset) {
                        logit("%s: %s->lseek(): %s", __func__,
                            lastlog_file, strerror(errno));
+                       close(*fd);
                        return (0);
                }
        }