Re: [PATCH] libxfs: fix crash on second attempt to initialize library

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/5/21 5:32 PM, Darrick J. Wong wrote:
From: Darrick J. Wong <djwong@xxxxxxxxxx>

xfs_repair crashes when it tries to initialize the libxfs library but
the initialization fails because the fs is already mounted:

Sorry for missing this; looks right to me. For some reason I did not hit
it in testing, old library version I guess.

Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx>


# xfs_repair /dev/sdd
xfs_repair: /dev/sdd contains a mounted filesystem
xfs_repair: urcu.c:553: urcu_memb_register_thread: Assertion `!URCU_TLS(rcu_reader).registered' failed.
Aborted

This is because libxfs_init() registers the main thread with liburcu,
but doesn't unregister the thread if libxfs library initialization
fails.  When repair sets more dangerous options and tries again, the
second initialization attempt causes liburcu to abort.  Fix this by
unregistering the thread with liburcu if libxfs initialization fails.

Observed by running xfs/284.

Fixes: e4da1b16 ("xfsprogs: introduce liburcu support")
Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
---
  libxfs/init.c |    4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libxfs/init.c b/libxfs/init.c
index d0753ce5..14911596 100644
--- a/libxfs/init.c
+++ b/libxfs/init.c
@@ -407,8 +407,10 @@ libxfs_init(libxfs_init_t *a)
  		unlink(rtpath);
  	if (fd >= 0)
  		close(fd);
-	if (!rval)
+	if (!rval) {
  		libxfs_close_devices(a);
+		rcu_unregister_thread();
+	}
return rval;
  }




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux