diff --git a/kmod/src/btree.c b/kmod/src/btree.c index db857103..ab2387bb 100644 --- a/kmod/src/btree.c +++ b/kmod/src/btree.c @@ -151,6 +151,8 @@ static int copy_to_val(struct scoutfs_btree_val *val, /* XXX corruption */ if (val->check_size_eq && val_len != scoutfs_btree_val_length(val)) return -EIO; + if (val->check_size_lte && val_len > scoutfs_btree_val_length(val)) + return -EOVERFLOW; for (i = 0, off = 0; val_len > 0 && i < ARRAY_SIZE(val->vec); i++) { kv = &val->vec[i]; diff --git a/kmod/src/btree.h b/kmod/src/btree.h index 7615a733..6df548d1 100644 --- a/kmod/src/btree.h +++ b/kmod/src/btree.h @@ -6,6 +6,7 @@ struct scoutfs_btree_val { struct kvec vec[3]; unsigned int check_size_eq:1; + unsigned int check_size_lte:1; }; static inline void __scoutfs_btree_init_val(struct scoutfs_btree_val *val,