lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <tencent_F5A5644EB770B776C6C9B369E36F0963A305@qq.com>
Date: Wed,  7 Feb 2024 14:23:13 +0800
From: Edward Adam Davis <eadavis@...com>
To: slava@...eyko.com
Cc: eadavis@...com,
	linux-fsdevel@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	syzbot+57028366b9825d8e8ad0@...kaller.appspotmail.com,
	syzkaller-bugs@...glegroups.com
Subject: Re: [PATCH next] hfsplus: fix oob in hfsplus_bnode_read_key

On Tue, 6 Feb 2024 15:05:23 +0300, Viacheslav Dubeyko <slava@...eyko.com> 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@...kaller.appspotmail.com
> > Signed-off-by: Edward Adam Davis <eadavis@...com>
> > ---
> > 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?
The code after "skip:" only adds size at this point, so currently there is no
need to add variables for separate management.
> 
> > + 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.
As the case may be, other code is just complex but no issues have been reported.
It is not recommended to make unfounded optimizations.
> 
> What do you think?
Thanks,
Edward.


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ