diff options
| author | Yichong Chen <chenyichong@uniontech.com> | 2026-07-15 13:20:06 +0800 |
|---|---|---|
| committer | Tyler Hicks <code@tyhicks.com> | 2026-07-20 22:11:14 -0500 |
| commit | e97bbe1b2bd82ec2ae37ad2e4965b4d3e78bbf7f (patch) | |
| tree | f237deb40d0a95c766d1f11e9b7ba3a5b0e7127f | |
| parent | 8b2ec0f56f55477f547d332526c9ae2a8fabc0a5 (diff) | |
| download | linux-e97bbe1b2bd82ec2ae37ad2e4965b4d3e78bbf7f.tar.gz linux-e97bbe1b2bd82ec2ae37ad2e4965b4d3e78bbf7f.zip | |
ecryptfs: reject too-small tag 70 packets
ecryptfs_parse_tag_70_packet() subtracts fixed metadata fields from the
parsed packet body size to derive the encrypted filename size. A
malformed packet with a body smaller than those fixed fields can underflow
that size calculation.
Reject tag 70 packets before the subtraction unless the body contains the
signature, cipher code, and at least one byte of encrypted filename data.
Fixes: 9c79f34f7ee7 ("eCryptfs: Filename Encryption: Tag 70 packets")
Cc: <stable@vger.kernel.org>
Signed-off-by: Yichong Chen <chenyichong@uniontech.com>
Signed-off-by: Tyler Hicks <code@tyhicks.com>
| -rw-r--r-- | fs/ecryptfs/keystore.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c index 19bccba74c82..51651314b7a6 100644 --- a/fs/ecryptfs/keystore.c +++ b/fs/ecryptfs/keystore.c @@ -894,6 +894,12 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, "rc = [%d]\n", __func__, rc); goto out; } + if (s->parsed_tag_70_packet_size < (ECRYPTFS_SIG_SIZE + 2)) { + ecryptfs_printk(KERN_WARNING, "Invalid packet size [%zd]\n", + s->parsed_tag_70_packet_size); + rc = -EINVAL; + goto out; + } s->block_aligned_filename_size = (s->parsed_tag_70_packet_size - ECRYPTFS_SIG_SIZE - 1); if ((1 + s->packet_size_len + s->parsed_tag_70_packet_size) |
