/*
* utils - miscellaneous device utilities for cryptsetup
*
- * Copyright (C) 2004, Christophe Saout <christophe@saout.de>
+ * Copyright (C) 2004, Jana Saout <jana@saout.de>
* Copyright (C) 2004-2007, Clemens Fruhwirth <clemens@endorphin.org>
* Copyright (C) 2009-2012, Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2012, Milan Broz
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
unsigned crypt_getpagesize(void)
{
- return (unsigned)sysconf(_SC_PAGESIZE);
+ long r = sysconf(_SC_PAGESIZE);
+ return r < 0 ? DEFAULT_MEM_ALIGNMENT : r;
}
static int get_alignment(int fd)
goto out;
r = read(fd, hangover_buf, bsize);
- if (r < 0 || r != bsize)
+ if (r < 0 || r < hangover)
goto out;
+ if (r < bsize)
+ bsize = r;
+
r = lseek(fd, -bsize, SEEK_CUR);
if (r < 0)
goto out;
memcpy(hangover_buf, (char*)buf + solid, hangover);
r = write(fd, hangover_buf, bsize);
- if (r < 0 || r != bsize)
+ if (r < 0 || r < hangover)
goto out;
}
ret = count;
if (!hangover_buf)
goto out;
r = read(fd, hangover_buf, bsize);
- if (r < 0 || r != bsize)
+ if (r < 0 || r < hangover)
goto out;
memcpy((char *)buf + solid, hangover_buf, hangover);
if (!_memlock_count++) {
log_dbg("Locking memory.");
if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) {
- log_err(ctx, _("WARNING!!! Possibly insecure memory. Are you root?\n"));
+ log_dbg("Cannot lock memory with mlockall.");
_memlock_count--;
return 0;
}
log_err(ctx, _("Cannot get process priority.\n"));
else
if (setpriority(PRIO_PROCESS, 0, DEFAULT_PROCESS_PRIORITY))
- log_err(ctx, _("setpriority %d failed: %s\n"),
+ log_dbg("setpriority %d failed: %s",
DEFAULT_PROCESS_PRIORITY, strerror(errno));
}
return _memlock_count ? 1 : 0;
if (munlockall() == -1)
log_err(ctx, _("Cannot unlock memory.\n"));
if (setpriority(PRIO_PROCESS, 0, _priority))
- log_err(ctx, _("setpriority %d failed: %s\n"), _priority, strerror(errno));
+ log_dbg("setpriority %d failed: %s", _priority, strerror(errno));
}
return _memlock_count ? 1 : 0;
}