[Ocfs2-devel] [PATCH 1/4] ocfs2: Fix freeing uninitialized resource on ocfs2_dlm_shutdown
Heming Zhao
heming.zhao at suse.com
Mon Aug 8 12:09:41 UTC 2022
On Mon, Aug 08, 2022 at 02:51:12PM +0800, Joseph Qi wrote:
>
>
> On 7/30/22 9:14 AM, Heming Zhao wrote:
> > On local mount mode, there is no dlm resource initalized. If
> > ocfs2_mount_volume() fails in ocfs2_find_slot(), error handling
> > flow will call ocfs2_dlm_shutdown(), then does dlm resource
> > cleanup job, which will trigger kernel crash.
> >
> > Fixes: 0737e01de9c4 ("ocfs2: ocfs2_mount_volume does cleanup job before
> > return error")
>
> Should be put at the same line.
OK
>
> > Signed-off-by: Heming Zhao <heming.zhao at suse.com>
> > ---
> > fs/ocfs2/dlmglue.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
> > index 801e60bab955..1438ac14940b 100644
> > --- a/fs/ocfs2/dlmglue.c
> > +++ b/fs/ocfs2/dlmglue.c
> > @@ -3385,6 +3385,9 @@ int ocfs2_dlm_init(struct ocfs2_super *osb)
> > void ocfs2_dlm_shutdown(struct ocfs2_super *osb,
> > int hangup_pending)
> > {
> > + if (ocfs2_mount_local(osb))
> > + return;
> > +
>
> IMO, we have to do part of ocfs2_dlm_shutdown() jobs such as
> ocfs2_lock_res_free(), which will remove lockres from d_lockres_tracking
> added by ocfs2_xxx_lock_res_init().
>
ocfs2_dlm_shutdown does the cleanup job for ocfs2_dlm_init.
This patch fixed crash in local mount error flow.
In local mount mode, ocfs2_dlm_init does nothing, which should make
ocfs2_dlm_shutdown do nothing.
And I checked all calling ocfs2_dlm_shutdown cases:
1. mount flow:
ocfs2_fill_super
+ xxx =fails=> label:out_super (checked, work fine)
|
+ ocfs2_mount_volume =fails=> label:out_debugfs (checked, work fine)
| |
| + xxx =fails=> cleanup everything before returning
|
+ xxx =fails=> label:out_dismout
At this time, dlm has been init successfully, we can call all lines
of ocfs2_dlm_shutdown.
2. ocfs2_dismount_volume => 'osb->cconn' is true.
this MUST be dlm successfully init case. everything looks fine.
In previous mail/patch: [PATCH] test error handling during mount stage, I may
forget to test local mount mode. So this crash didn't be triggered.
> Before commit 0737e01de9c4, it seems this issue also exists since
> osb->cconn is already set under local mount mode.
Yes. The bug exists since local mount feature was introduced, commit number:
c271c5c22b0a7ca45fda15f1f4d258bca36a5b94. I will change 'Fixes' on next version.
(Hope 'CC' list takes effect for this mail. -_-# )
Thanks,
Heming
More information about the Ocfs2-devel
mailing list