From: Kent Overstreet Date: Mon, 15 Aug 2022 18:05:44 +0000 (-0400) Subject: bcachefs: Add an overflow check in set_bkey_val_u64s() X-Git-Tag: v6.7-rc1~201^2~831 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=15bc0948e73d9a858a6b69fc4eb34d176436044c;p=thirdparty%2Fkernel%2Flinux.git bcachefs: Add an overflow check in set_bkey_val_u64s() For now this is just a BUG_ON() - we may want to change this to return an error in the future. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/bkey.h b/fs/bcachefs/bkey.h index 6a637a408a9f1..8e9405f895377 100644 --- a/fs/bcachefs/bkey.h +++ b/fs/bcachefs/bkey.h @@ -50,12 +50,15 @@ static inline size_t bkey_val_bytes(const struct bkey *k) static inline void set_bkey_val_u64s(struct bkey *k, unsigned val_u64s) { - k->u64s = BKEY_U64s + val_u64s; + unsigned u64s = BKEY_U64s + val_u64s; + + BUG_ON(u64s > U8_MAX); + k->u64s = u64s; } static inline void set_bkey_val_bytes(struct bkey *k, unsigned bytes) { - k->u64s = BKEY_U64s + DIV_ROUND_UP(bytes, sizeof(u64)); + set_bkey_val_u64s(k, DIV_ROUND_UP(bytes, sizeof(u64))); } #define bkey_val_end(_k) ((void *) (((u64 *) (_k).v) + bkey_val_u64s((_k).k)))