Description
In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: fix info-leak on partial LZNT decompress in ni_read_frame() ni_read_frame() decompresses an LZNT $DATA frame into the vmapped target pages and then trusts decompress_lznt()'s return value: unc_size = decompress_lznt(frame_ondisk, ondisk_size, frame_mem, frame_size); if ((ssize_t)unc_size < 0) err = unc_size; else if (!unc_size || unc_size > frame_size) err = -EINVAL; decompress_lznt() stops as soon as the compressed stream is exhausted (e.g. a zero chunk header) and returns the number of bytes it actually wrote, which may be far less than frame_size. The bytes between unc_size and frame_size are never written. The only memset() that follows zeroes the region beyond i_valid; when the frame lies entirely within the file's valid size that memset() does not run, so the gap retains whatever was in the just-vmapped pages. All pages are then marked uptodate and returned to userspace, disclosing uninitialized (recently-freed) kernel page memory. A crafted compressed file whose stream decompresses to only a few bytes leaks the remainder of every frame on a plain read(2), which is enough to recover kernel pointers and defeat KASLR. Zero the [unc_size, frame_size) tail immediately after a successful LZNT decompress so the remainder reads back as zero.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
4342306f0f0d5ff4315a204d315c1b51b914fca5 to < 7d60a4c49af4d5cb88aa7cbf998d0408bd415055affected4342306f0f0d5ff4315a204d315c1b51b914fca5 to < cd40eee4923d104ebec9ac7513b971bc441e431daffected4342306f0f0d5ff4315a204d315c1b51b914fca5 to < 77d8efd04745cda23858546afdbd9d07b591758eaffected4342306f0f0d5ff4315a204d315c1b51b914fca5 to < 0f699ddb290a24b37e1bc9bf1e3c9dbccf564beaaffected4342306f0f0d5ff4315a204d315c1b51b914fca5 to < 376ee45659a4b943df672ad275c63da00655f929affected4342306f0f0d5ff4315a204d315c1b51b914fca5 to < 4a1b39b2e10eb8de86265e80cf2be4396bc1dce4affected4342306f0f0d5ff4315a204d315c1b51b914fca5 to < 35d1ea92c7d946e2ebdbe36cdb2c969c8704bebdaffected
Linux Linux
Default version status: affected
5.15affected0 to < 5.15unaffected5.15.221 to ≤ 5.15.*unaffected6.1.188 to ≤ 6.1.*unaffected6.6.157 to ≤ 6.6.*unaffected6.12.109 to ≤ 6.12.*unaffected6.18.50 to ≤ 6.18.*unaffected7.2.4 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/7d60a4c49af4d5cb88aa7cbf998d0408bd415055 ↗
- https://git.kernel.org/stable/c/cd40eee4923d104ebec9ac7513b971bc441e431d ↗
- https://git.kernel.org/stable/c/77d8efd04745cda23858546afdbd9d07b591758e ↗
- https://git.kernel.org/stable/c/0f699ddb290a24b37e1bc9bf1e3c9dbccf564bea ↗
- https://git.kernel.org/stable/c/376ee45659a4b943df672ad275c63da00655f929 ↗
- https://git.kernel.org/stable/c/4a1b39b2e10eb8de86265e80cf2be4396bc1dce4 ↗
- https://git.kernel.org/stable/c/35d1ea92c7d946e2ebdbe36cdb2c969c8704bebd ↗