char match[] = "/dev/";
        FILE *mounts;
        struct mntent *ent;
+       char errdir[1024] = {0};
        unsigned int cmd;
        int error = 0, root_seen = 0, save_errno = 0;
 
                        goto err;
        }
 
+       endmntent(mounts);
+
        if (root_seen) {
                error |= vss_do_freeze("/", cmd);
                if (error && operation == VSS_OP_FREEZE)
        goto out;
 err:
        save_errno = errno;
+       if (ent) {
+               strncpy(errdir, ent->mnt_dir, sizeof(errdir)-1);
+               endmntent(mounts);
+       }
        vss_operate(VSS_OP_THAW);
        /* Call syslog after we thaw all filesystems */
        if (ent)
                syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
-                      ent->mnt_dir, save_errno, strerror(save_errno));
+                      errdir, save_errno, strerror(save_errno));
        else
                syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
                       strerror(save_errno));
 out:
-       endmntent(mounts);
        return error;
 }