diff options
author | Marc Dionne <[email protected]> | 2024-05-24 17:17:55 +0100 |
---|---|---|
committer | Christian Brauner <[email protected]> | 2024-05-25 14:02:40 +0200 |
commit | 29be9100aca2915fab54b5693309bc42956542e5 (patch) | |
tree | ed984039f37b960c0cba76fa9efe1b62c8f888c1 | |
parent | 712182b67e831912f90259102ae334089e7bccd1 (diff) |
afs: Don't cross .backup mountpoint from backup volume
Don't cross a mountpoint that explicitly specifies a backup volume
(target is <vol>.backup) when starting from a backup volume.
It it not uncommon to mount a volume's backup directly in the volume
itself. This can cause tools that are not paying attention to get
into a loop mounting the volume onto itself as they attempt to
traverse the tree, leading to a variety of problems.
This doesn't prevent the general case of loops in a sequence of
mountpoints, but addresses a common special case in the same way
as other afs clients.
Reported-by: Jan Henrik Sylvester <[email protected]>
Link: http://lists.infradead.org/pipermail/linux-afs/2024-May/008454.html
Reported-by: Markus Suvanto <[email protected]>
Link: http://lists.infradead.org/pipermail/linux-afs/2024-February/008074.html
Signed-off-by: Marc Dionne <[email protected]>
Signed-off-by: David Howells <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Reviewed-by: Jeffrey Altman <[email protected]>
cc: [email protected]
Signed-off-by: Christian Brauner <[email protected]>
-rw-r--r-- | fs/afs/mntpt.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/afs/mntpt.c b/fs/afs/mntpt.c index 97f50e9fd9eb..297487ee8323 100644 --- a/fs/afs/mntpt.c +++ b/fs/afs/mntpt.c @@ -140,6 +140,11 @@ static int afs_mntpt_set_params(struct fs_context *fc, struct dentry *mntpt) put_page(page); if (ret < 0) return ret; + + /* Don't cross a backup volume mountpoint from a backup volume */ + if (src_as->volume && src_as->volume->type == AFSVL_BACKVOL && + ctx->type == AFSVL_BACKVOL) + return -ENODEV; } return 0; |