Fix time of check/use Coverity report in cryptsetup-reencrypt.

This commit is contained in:
Milan Broz
2012-12-17 16:10:39 +01:00
parent b86c5a93b3
commit 0bd8b9823a

View File

@@ -348,38 +348,27 @@ static void close_log(struct reenc_ctx *rc)
static int open_log(struct reenc_ctx *rc) static int open_log(struct reenc_ctx *rc)
{ {
int flags, create_new; int flags = opt_directio ? O_DIRECT : 0;
struct stat st;
if (!stat(rc->log_file, &st)) rc->log_fd = open(rc->log_file, O_RDWR|O_EXCL|O_CREAT|flags, S_IRUSR|S_IWUSR);
create_new = 0; if (rc->log_fd != -1) {
else if (errno == ENOENT) log_dbg("Created LUKS reencryption log file %s.", rc->log_file);
create_new = 1; } else if (errno == EEXIST) {
else
return -EINVAL;
if (create_new) {
log_dbg("Creating LUKS reencryption log file %s.", rc->log_file);
flags = opt_directio ? O_RDWR|O_CREAT|O_DIRECT : O_RDWR|O_CREAT;
rc->log_fd = open(rc->log_file, flags, S_IRUSR|S_IWUSR);
if (rc->log_fd == -1)
return -EINVAL;
} else {
log_std(_("Log file %s exists, resuming reencryption.\n"), rc->log_file); log_std(_("Log file %s exists, resuming reencryption.\n"), rc->log_file);
flags = opt_directio ? O_RDWR|O_DIRECT : O_RDWR; rc->log_fd = open(rc->log_file, O_RDWR|flags);
rc->log_fd = open(rc->log_file, flags);
if (rc->log_fd == -1)
return -EINVAL;
rc->in_progress = 1; rc->in_progress = 1;
} }
if (rc->log_fd == -1)
return -EINVAL;
if (posix_memalign((void *)&rc->log_buf, alignment(rc->log_fd), SECTOR_SIZE)) { if (posix_memalign((void *)&rc->log_buf, alignment(rc->log_fd), SECTOR_SIZE)) {
log_err(_("Allocation of aligned memory failed.\n")); log_err(_("Allocation of aligned memory failed.\n"));
close_log(rc); close_log(rc);
return -ENOMEM; return -ENOMEM;
} }
if (create_new && write_log(rc) < 0) { if (!rc->in_progress && write_log(rc) < 0) {
close_log(rc); close_log(rc);
return -EIO; return -EIO;
} }