> On 4 Feb 2024, at 14:51, Edward Adam Davis <eadavis@xxxxxx> wrote: > > In hfs_brec_insert(), if data has not been moved to "data_off + size", the size > should not be added when reading search_key from node->page. > > Reported-and-tested-by: syzbot+57028366b9825d8e8ad0@xxxxxxxxxxxxxxxxxxxxxxxxx > Signed-off-by: Edward Adam Davis <eadavis@xxxxxx> > --- > fs/hfsplus/brec.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/hfsplus/brec.c b/fs/hfsplus/brec.c > index 1918544a7871..9e0e0c1f15a5 100644 > --- a/fs/hfsplus/brec.c > +++ b/fs/hfsplus/brec.c > @@ -138,7 +138,8 @@ int hfs_brec_insert(struct hfs_find_data *fd, void *entry, int entry_len) > * at the start of the node and it is not the new node > */ > if (!rec && new_node != node) { > - hfs_bnode_read_key(node, fd->search_key, data_off + size); As far as I can see, likewise pattern 'data_off + size’ is used multiple times in hfs_brec_insert(). It’s real source of potential bugs, for my taste. Could we introduce a special variable (like offset) that can keep calculated value? > + hfs_bnode_read_key(node, fd->search_key, data_off + > + (idx_rec_off == data_rec_off ? 0 : size)); I believe the code of hfs_brec_insert() is complicated enough. It will be great to rework this code and to add comments with reasonable explanation of the essence of modification. It’s not so easy to follow how moving is related to read the key operation. What do you think? Thanks, Slava. > hfs_brec_update_parent(fd); > } > > -- > 2.43.0 > >