mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-06 13:17:44 +03:00
cryptsetup: use uint64_t for keyfile-offset= (#7689)
On 32bit, refuse large offsets. Once https://gitlab.com/cryptsetup/cryptsetup/issues/359 is resolved, we should switch to the new api, whatever it is. Fixes #7677.
This commit is contained in:
parent
bf0e0a4df2
commit
dc0a35550e
@ -47,7 +47,7 @@ static char *arg_cipher = NULL;
|
||||
static unsigned arg_key_size = 0;
|
||||
static int arg_key_slot = CRYPT_ANY_SLOT;
|
||||
static unsigned arg_keyfile_size = 0;
|
||||
static unsigned arg_keyfile_offset = 0;
|
||||
static uint64_t arg_keyfile_offset = 0;
|
||||
static char *arg_hash = NULL;
|
||||
static char *arg_header = NULL;
|
||||
static unsigned arg_tries = 3;
|
||||
@ -131,13 +131,22 @@ static int parse_one_option(const char *option) {
|
||||
}
|
||||
|
||||
} else if ((val = startswith(option, "keyfile-offset="))) {
|
||||
uint64_t off;
|
||||
|
||||
r = safe_atou(val, &arg_keyfile_offset);
|
||||
r = safe_atou64(val, &off);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to parse %s, ignoring: %m", option);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((size_t) off != off) {
|
||||
/* https://gitlab.com/cryptsetup/cryptsetup/issues/359 */
|
||||
log_error("keyfile-offset= value would truncated to %zu, ignoring.", (size_t) off);
|
||||
return 0;
|
||||
}
|
||||
|
||||
arg_keyfile_offset = off;
|
||||
|
||||
} else if ((val = startswith(option, "hash="))) {
|
||||
r = free_and_strdup(&arg_hash, val);
|
||||
if (r < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user