diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-07 17:23:13 -0400 |
---|---|---|
committer | Hunter Shaffer <huntershaffer182456@gmail.com> | 2023-10-08 21:06:07 -0400 |
commit | 1251ea58a84e365db3754e6f5f57bd442484dc89 (patch) | |
tree | 2f568a8130f83f7a9d05fa70a2466f89ac772a3d /libbcachefs/checksum.c | |
parent | 6b175a022496572416918bd38d083120c23ba5f2 (diff) |
Update bcachefs sources to 7bf1ac0d46 bcachefs: Correctly initialize new buckets on device resize
Signed-off-by: Hunter Shaffer <huntershaffer182456@gmail.com>
Diffstat (limited to 'libbcachefs/checksum.c')
-rw-r--r-- | libbcachefs/checksum.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/libbcachefs/checksum.c b/libbcachefs/checksum.c index 1948119e..839f00dc 100644 --- a/libbcachefs/checksum.c +++ b/libbcachefs/checksum.c @@ -362,7 +362,7 @@ struct bch_csum bch2_checksum_merge(unsigned type, struct bch_csum a, state.type = type; bch2_checksum_init(&state); - state.seed = (u64 __force) a.lo; + state.seed = le64_to_cpu(a.lo); BUG_ON(!bch2_checksum_mergeable(type)); @@ -373,7 +373,7 @@ struct bch_csum bch2_checksum_merge(unsigned type, struct bch_csum a, page_address(ZERO_PAGE(0)), page_len); b_len -= page_len; } - a.lo = (__le64 __force) bch2_checksum_final(&state); + a.lo = cpu_to_le64(bch2_checksum_final(&state)); a.lo ^= b.lo; a.hi ^= b.hi; return a; @@ -535,15 +535,30 @@ static int __bch2_request_key(char *key_description, struct bch_key *key) key_serial_t key_id; key_id = request_key("user", key_description, NULL, + KEY_SPEC_SESSION_KEYRING); + if (key_id >= 0) + goto got_key; + + key_id = request_key("user", key_description, NULL, KEY_SPEC_USER_KEYRING); - if (key_id < 0) - return -errno; + if (key_id >= 0) + goto got_key; + + key_id = request_key("user", key_description, NULL, + KEY_SPEC_USER_SESSION_KEYRING); + if (key_id >= 0) + goto got_key; + + return -errno; +got_key: if (keyctl_read(key_id, (void *) key, sizeof(*key)) != sizeof(*key)) return -1; return 0; } + +#include "../crypto.h" #endif int bch2_request_key(struct bch_sb *sb, struct bch_key *key) @@ -556,6 +571,20 @@ int bch2_request_key(struct bch_sb *sb, struct bch_key *key) ret = __bch2_request_key(key_description.buf, key); printbuf_exit(&key_description); + +#ifndef __KERNEL__ + if (ret) { + char *passphrase = read_passphrase("Enter passphrase: "); + struct bch_encrypted_key sb_key; + + bch2_passphrase_check(sb, passphrase, + key, &sb_key); + ret = 0; + } +#endif + + /* stash with memfd, pass memfd fd to mount */ + return ret; } |