From: Kent Overstreet Date: Mon, 17 May 2021 20:43:30 +0000 (-0400) Subject: bcachefs: Fix for bch2_bkey_pack_pos() not initializing len/version fields X-Git-Tag: Ubuntu-6.8.0-17.17~2238^2~1575 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=c21d5377791d94fca0d990eee82111572412640c;p=mirror_ubuntu-kernels.git bcachefs: Fix for bch2_bkey_pack_pos() not initializing len/version fields This bug led to push_whiteout() generating whiteouts that failed bch2_bkey_invalid() due to nonzero length fields - oops. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/bkey.c b/fs/bcachefs/bkey.c index a0379f980f7e..5de88a93f33f 100644 --- a/fs/bcachefs/bkey.c +++ b/fs/bcachefs/bkey.c @@ -446,8 +446,15 @@ enum bkey_pack_pos_ret bch2_bkey_pack_pos_lossy(struct bkey_packed *out, struct bpos orig = in; #endif bool exact = true; + unsigned i; - *w = 0; + /* + * bch2_bkey_pack_key() will write to all of f->key_u64s, minus the 3 + * byte header, but pack_pos() won't if the len/version fields are big + * enough - we need to make sure to zero them out: + */ + for (i = 0; i < f->key_u64s; i++) + w[i] = 0; if (unlikely(in.snapshot < le64_to_cpu(f->field_offset[BKEY_FIELD_SNAPSHOT]))) {