From a441cb616db547d366a796d0370d5f351b73b289 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Wed, 11 Aug 2021 19:39:19 +0200 Subject: ext2fs: clear inline data When truncating a node with inline data, it's safer to really frob the inline data, to make sure ext2fs does not wrongly interprete it as block numbers. --- ext2fs/truncate.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'ext2fs/truncate.c') diff --git a/ext2fs/truncate.c b/ext2fs/truncate.c index 6d35fd20..44aab3c7 100644 --- a/ext2fs/truncate.c +++ b/ext2fs/truncate.c @@ -296,6 +296,19 @@ diskfs_truncate (struct node *node, off_t length) is true for fast symlinks, and also apparently for some device nodes in linux. */ { + off_t froblen = node->dn_stat.st_size; + off_t frobmax = sizeof(diskfs_node_disknode (node)->info.i_data); + + if (froblen > frobmax) + { + ext2_warning ("inline data was %lld, more than max %lld", + (long long) froblen, (long long) frobmax); + froblen = frobmax; + } + froblen -= length; + memset (((char *) (diskfs_node_disknode (node)->info.i_data)) + length, + 0, froblen); + node->dn_stat.st_size = length; node->dn_set_mtime = 1; node->dn_set_ctime = 1; -- cgit v1.2.3