summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2023-01-25 17:56:06 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-09-08 07:53:13 +0200
commit6ac60f68b2dce541f874d2cf3426217b52e969ef (patch)
treee0322cb72b1d7bf10ea7bbcfe38652a78fac857a
parent63673a49d7a18569db3377a26bfffe7586fe5678 (diff)
downloadlinux-stable-6ac60f68b2dce541f874d2cf3426217b52e969ef.tar.gz
linux-stable-6ac60f68b2dce541f874d2cf3426217b52e969ef.tar.bz2
linux-stable-6ac60f68b2dce541f874d2cf3426217b52e969ef.zip
udf: Limit file size to 4TB
commit c2efd13a2ed4f29bf9ef14ac2fbb7474084655f8 upstream. UDF disk format supports in principle file sizes up to 1<<64-1. However the file space (including holes) is described by a linked list of extents, each of which can have at most 1GB. Thus the creation and handling of extents gets unusably slow beyond certain point. Limit the file size to 4TB to avoid locking up the kernel too easily. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/udf/super.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 65fbc60a88e4..3b6419f29a4c 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -86,6 +86,13 @@ enum {
#define UDF_MAX_LVID_NESTING 1000
enum { UDF_MAX_LINKS = 0xffff };
+/*
+ * We limit filesize to 4TB. This is arbitrary as the on-disk format supports
+ * more but because the file space is described by a linked list of extents,
+ * each of which can have at most 1GB, the creation and handling of extents
+ * gets unusably slow beyond certain point...
+ */
+#define UDF_MAX_FILESIZE (1ULL << 42)
/* These are the "meat" - everything else is stuffing */
static int udf_fill_super(struct super_block *, void *, int);
@@ -2299,7 +2306,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
ret = -ENOMEM;
goto error_out;
}
- sb->s_maxbytes = MAX_LFS_FILESIZE;
+ sb->s_maxbytes = UDF_MAX_FILESIZE;
sb->s_max_links = UDF_MAX_LINKS;
return 0;