Merge tag 'fs.mount.propagation.fix.v6.2-rc1' of git://git.kernel.org/pub/scm/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 21 Dec 2022 17:54:00 +0000 (09:54 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 21 Dec 2022 17:54:00 +0000 (09:54 -0800)
Pull mount propagation fix from Christian Brauner:
 "The propagate_mnt() function handles mount propagation when creating
  mounts and propagates the source mount tree @source_mnt to all
  applicable nodes of the destination propagation mount tree headed by
  @dest_mnt.

  Unfortunately it contains a bug where it fails to terminate at peers
  of @source_mnt when looking up copies of the source mount that become
  masters for copies of the source mount tree mounted on top of slaves
  in the destination propagation tree causing a NULL dereference.

  This fixes that bug (with a long commit message for a seven character
  fix but hopefully it'll help us fix issues faster in the future rather
  than having to go through the pain of having to relearn everything
  once more)"

* tag 'fs.mount.propagation.fix.v6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping:
  pnode: terminate at peers of source

fs/pnode.c

index 1106137c747a3aab8f8340751eb713d6d936797f..468e4e65a615d770919e0d952e17d0f4f1a7c02f 100644 (file)
@@ -244,7 +244,7 @@ static int propagate_one(struct mount *m)
                }
                do {
                        struct mount *parent = last_source->mnt_parent;
-                       if (last_source == first_source)
+                       if (peers(last_source, first_source))
                                break;
                        done = parent->mnt_master == p;
                        if (done && peers(n, parent))