dm table: check that a dm device doesn't reference itself
authorBenjamin Marzinski <bmarzins@redhat.com>
Tue, 31 Jan 2023 21:22:57 +0000 (15:22 -0600)
committerMike Snitzer <snitzer@kernel.org>
Sun, 12 Feb 2023 15:20:56 +0000 (10:20 -0500)
If a DM device's table references itself, it will crash the kernel with an
infinite recursion.  Check for a self-reference in dm_get_device(). This
is a quick check, but it won't catch more complicated circular references.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-table.c

index 8541d56..24ad42b 100644 (file)
@@ -364,6 +364,8 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,
                if (!dev)
                        return -ENODEV;
        }
+       if (dev == disk_devt(t->md->disk))
+               return -EINVAL;
 
        dd = find_device(&t->devices, dev);
        if (!dd) {