Commit graph

1,467,778 commits

Author SHA1 Message Date
Hyunchul Lee
766062a82e ntfs: reject invalid empty mapping pairs
Reject an attribute with empty mapping pairs if it has inconsistent
highest VCN and size.

Fixes: 11ccc9107d ("ntfs: update runlist handling and cluster allocator")
Reported-by: Robert Morris <rtm@csail.mit.edu>
Closes: https://lore.kernel.org/all/9519.1786907182@localhost/
Cc: stable@vger.kernel.org
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-20 20:15:22 +09:00
Hongling Zeng
9969d58a9b ntfs: fix resource leak in ntfs_new_attr_flags
When handling resident attributes that don't need sparse/compressed
changes, ntfs_new_attr_flags() returns 0 directly at line 678 without
calling unmap_mft_record() or ntfs_attr_put_search_ctx(). This leaks
the MFT record mapping and attribute search context.

An unprivileged user can cause a denial of service by repeatedly
calling setxattr(2) with system.ntfs_attrib on files with resident
attributes, eventually exhausting kernel memory.

Fix by replacing the direct return with goto err_out to ensure proper
cleanup of resources via the existing cleanup code.

Fixes: e791930240a5 ("ntfs: fix resident conversion in ntfs_new_attr_flags")
Cc: stable@vger.kernel.org
Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-20 20:05:48 +09:00
Dennis Tighe
8168434096 ntfs: validate usa_ofs before preserving the update sequence number
When ntfs_mft_record_alloc() reuses a free mft record it reads the old
update sequence number straight from the on-disk record:

     usn = *(__le16 *)((u8 *)m + le16_to_cpu(m->usa_ofs));

Here m points into the raw $MFT page-cache folio, which still holds
unvalidated, MST-protected bytes: the folio is read by a plain
iomap_read_folio() and neither post_read_mst_fixup() nor
ntfs_mft_record_check() has run on it (both work on private copies).
m->usa_ofs is therefore an untrusted u16, and a corrupted record can put
it past the end of the record so the two-byte read lands outside the
folio.  Reading such a record while creating a file gives, under KASAN:

   BUG: KASAN: use-after-free in ntfs_mft_record_alloc+...
   Read of size 2 at addr ...
    ntfs_mft_record_alloc -> __ntfs_create -> ntfs_create -> path_openat

Only preserve the old update sequence number when usa_ofs is even and in
range, mirroring the check ntfs_mft_record_check() already applies;
otherwise leave usn zero, which the existing restore below skips.

Fixes: 495e90fa33 ("ntfs: update attrib operations")
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Dennis Tighe <dennis.tighe@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-20 19:29:39 +09:00
Dennis Tighe
98716c9fce ntfs: fix off-by-one page overflow in ntfs_decompress()
The per-token range check in ntfs_decompress() uses

	if (cb >= cb_sb_end || dp_addr > dp_sb_end)
		break;

so dp_addr == dp_sb_end falls through to the symbol copy
`*dp_addr++ = *cb++`, writing one byte past the destination page.  Since
NTFS_SB_SIZE == PAGE_SIZE the destination is a single page, so the byte
lands in the adjacent page, and *dest_ofs is left one past the sub-block
end (the later `*dest_ofs &= ~PAGE_MASK` then yields 1, not 0, so the page
is never finalized and later sub-blocks keep writing further past it).  A
corrupted compressed $DATA attribute thus produces a bounded run of
out-of-bounds writes when the file is read.

Break as soon as dp_addr reaches dp_sb_end; a full sub-block still
completes, as its final copy advances dp_addr to exactly dp_sb_end.

Fixes: 1e9ea7e044 ("Revert "fs: Remove NTFS classic"")
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Dennis Tighe <dennis.tighe@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-20 19:23:11 +09:00
Baolin Liu
60038154b4 ntfs: do not update ctime when setxattr fails
ntfs_setxattr() updates ctime and marks the inode dirty even when
the operation fails. A failed setxattr(2) must not change file
metadata.

Update ctime only on success.

Fixes: fc053f05ca ("ntfs: add reparse and ea operations")
Signed-off-by: Baolin Liu <liubaolin@kylinos.cn>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 19:12:02 +09:00
Hyunchul Lee
cc9d09fef7 ntfs: reject invalid MFT LCNs from boot sector
The NTFS boot sector stores the MFT and MFTMirr locations as unsigned
64-bit LCNs, but parse_ntfs_boot_sector() decoded them into an s64.

A crafted high-bit value could therefore become negative and pass
the existing upper-bound check. The invalid value then propagated into
the MFT zone allocator and could result in an out-of-bounds access to
lcn_empty_bits_per_page.

Fixes: 11ccc9107d ("ntfs: update runlist handling and cluster allocator")
Reported-by: Robert Morris <rtm@csail.mit.edu>
Closes: https://lore.kernel.org/all/57514.1787000602@localhost
Cc: stable@vger.kernel.org
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:31:26 +09:00
Hyeontae Lee
d9e00c457d ntfs: serialize resident iomap reads with mrec_lock
ntfs_read_iomap_begin_resident() walks the MFT record through
ntfs_attr_lookup() -> ntfs_attr_find() without taking ni->mrec_lock,
while ntfs_attr_record_resize(), ntfs_make_room_for_attr() and
ntfs_resident_attr_record_add() memmove() the same base_ni->mrec buffer
under that lock. map_mft_record() only takes a reference and does not
serialize, so the reader can observe torn attribute length and offset
fields while a writer is relocating the records.

KCSAN reports the race between the mmap read fault path and both link()
and unlink():

  BUG: KCSAN: data-race in ntfs_attr_find / ntfs_attr_record_resize

  write to 0xffff888100af1018 of 4 bytes by task 96 on cpu 1:
   ntfs_attr_record_resize+0xd2/0x130
   ntfs_attr_record_rm+0xad/0x530
   ntfs_delete+0x224/0x640
   ntfs_unlink+0x14d/0x280
   vfs_unlink+0x157/0x520

  read to 0xffff888100af1018 of 4 bytes by task 95 on cpu 0:
   ntfs_attr_find+0x104/0x5b0
   ntfs_attr_lookup+0x39c/0x10c0
   ntfs_read_iomap_begin_resident+0xc6/0x230
   ntfs_read_iomap_begin+0x5d/0xa0
   iomap_iter+0x2e2/0x6e0
   iomap_read_folio+0x147/0x2a0
   ntfs_read_folio+0x108/0x170
   filemap_read_folio+0x35/0x100
   filemap_fault+0x993/0x1000

  value changed: 0x00000250 -> 0x000001f0

The address is mrec + 0x18, i.e. mft_record.bytes_in_use, and the change
is the 96 bytes of one $FILE_NAME attribute being removed.

Keep base_ni->mrec_lock from the resident read iomap lookup through
iomap_end(). This protects both the attribute walk and the subsequent copy
from iomap->inline_data, which points into the MFT record. The non-resident
path is left alone: ntfs_lookup() already holds the directory inode's
mrec_lock when it reads an index folio through read_mapping_folio(), and
taking the lock in the shared wrapper deadlocks there with recursive locking
on mrec_lock. The comment above the read_mapping_folio() call in
fs/ntfs/dir.c notes the same hazard.

The seek path uses the same lookup helper but does not dereference
iomap->inline_data. Release the lock before returning from that path,
whereas the regular read path records base_ni in iomap->private and releases
the lock from its iomap_end() callback.

Tested with a reproducer that faults in a 16-byte resident file while
another thread runs link()/unlink() on it. Before: 40 KCSAN reports in
about one second. After: no reports in 180 seconds over 206,090 read
iterations and 423,540 link/unlink cycles. A PROVE_LOCKING build shows no
lockdep splat with the same reproducer running for 60 seconds.

Fixes: b041ca5625 ("ntfs: update iomap and address space operations")
Link: https://lore.kernel.org/all/20260725042421.109599-1-wonju345@naver.com/
Signed-off-by: Hyeontae Lee <wonju345@naver.com>
Co-developed-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:47 +09:00
Hongling Zeng
fea9e4488f ntfs: verify run length exceeding volume boundary
The mapping pairs decoder validates that the starting LCN is within the
volume but does not check if the run extends beyond the volume boundary.

A malformed NTFS image with a crafted mapping pairs array could cause
the kernel to access memory beyond the volume boundary, potentially leading
to memory corruption and privilege escalation.

Add validation to ensure lcn + length stays within nr_clusters.

Cc: stable@vger.kernel.org
Fixes: b4be3a47f8ba4 ("ntfs: bound the free-cluster bitmap scan to the volume")
Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:46 +09:00
Namjae Jeon
9badcfb91b ntfs: allow index root relocation
Allow a resident attribute record to move to an extent MFT record when the
base record needs room for an attribute list. Retry the root conversion
after creating the list, but do not relocate a root that is already
external.

Roll the root back to the base record if persisting the attribute list
fails, and free extent MFT records left empty by relocation or rollback.
Also preserve bitmap allocation errors in index operations.

Fixes: af0db57d42 ("ntfs: update inode operations")
Reported-by: yi <691464208@qq.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:46 +09:00
Hongling Zeng
a83e82b0ec ntfs: validate non-resident attribute offsets
ntfs_attr_update_meta() shifts the attribute name when converting between
non-sparse and sparse attributes. Converting to sparse also adds the
compressed_size field before the name and mapping pairs, requiring eight
additional bytes in the attribute record.

However, the validator does not check that name_offset is within safe
boundaries for these operations or that the additional space is available.
A malicious MFT record could set name_offset such that:

1. The name is positioned at the very end of a non-sparse attribute.
   Converting to sparse would shift the name forward by 8 bytes,
   writing beyond the attribute boundary.

2. The name overlaps with the mapping pairs, causing corruption during
   conversion.

Add validation to ensure:
- For named attributes, name_offset is within valid bounds
- Name does not extend beyond the attribute or overlap with mapping pairs
- For non-sparse, non-compressed attributes, eight bytes are available
  after mapping_pairs_offset for the compressed_size field

The space check also covers unnamed attributes, for which name_offset = 0
is valid and no name range needs to be checked.

Fixes: 7e2a1c554bc4 ("ntfs: Fix min_len for compressed/sparse attributes in ntfs_non_resident_attr_value_is_valid()")
Cc: stable@vger.kernel.org
Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Co-developed-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:46 +09:00
Dmitry Antipov
121dedb3b6 ntfs: simplify ntfs_reparse_set_native_symlink()
Avoid redundant 'strlen()' and use the convenient 'strreplace()'
to simplify 'ntfs_reparse_set_native_symlink()'.

Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:46 +09:00
Pisit Preechapramoth
ea6a67ef64 ntfs: reject unprivileged writes to reserved $LX* xattrs
Reject setxattr of the reserved $LXUID, $LXGID, $LXMOD and $LXDEV names
from userspace unless the caller has CAP_SYS_ADMIN.

Fixes: fc053f05ca ("ntfs: add reparse and ea operations")
Signed-off-by: Pisit Preechapramoth <kml.delusion501@slmail.me>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:45 +09:00
Bryam Vargas
19cac7902a ntfs: bound the free-cluster bitmap scan to the volume
vol->lcn_empty_bits_per_page is sized from vol->nr_clusters at mount, but
ntfs_cluster_alloc() bounds its scan of that array by the size of $Bitmap.
Those are independent on-disk quantities and the mount-time check only
rejects a $Bitmap that is too small, so an image whose $Bitmap covers more
clusters than the volume has lets the scan index past the array.  A run
whose LCN lies in that gap takes the allocator straight there, since the
caller passes the file's own last LCN as its locality hint.  KASAN reports
a slab out-of-bounds read when a file on such a volume is extended.

Clamp the scan to what that array covers, mirroring the max_index
calculation the mount-time scan already uses, and reject a decoded LCN
at or beyond nr_clusters in the mapping pairs decoder.  Conforming
volumes are unaffected.

Fixes: 11ccc9107d ("ntfs: update runlist handling and cluster allocator")
Cc: stable@vger.kernel.org
Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:45 +09:00
Namjae Jeon
4d730a4dd7 ntfs: respect per-file chmod mode over mount masks
fmask and dmask provide the default permissions for files without WSL
metadata. Once chmod stores a mode in $LXMOD, however, that per-file mode
must take precedence so selected files can retain permissions such as
execute across remounts.

Record whether $LXMOD was found while loading an inode and apply the mount
masks only when it is absent. Do not remask the in-memory mode after
setattr persists it. Continue loading $LXMOD even when optional $LXUID or
$LXGID metadata is missing, since chmod may create only $LXMOD.

Fixes: fc053f05ca ("ntfs: add reparse and ea operations")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:45 +09:00
Namjae Jeon
71feaa7686 ntfs: apply Windows name checks only with windows_names
The windows_names mount option is documented to reject names containing
characters forbidden by Windows. However, ntfs_check_bad_windows_name()
unconditionally rejects those characters before checking the mount option.

Move the character validation after the option check so a default NTFS
mount accepts POSIX names such as names containing ':'. Mounts using
windows_names retain the existing Windows-compatible validation, including
reserved device names and trailing spaces or dots.

Fixes: af0db57d42 ("ntfs: update inode operations")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:45 +09:00
Alexandro Calo
dc09bf79b7 ntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()
ntfs_ir_to_ib copies all entries from index_root into a freshly allocated
index_block_size-byte buffer without verifying that the entries fit in the
available space. The entries in index_root may be larger than the usable
entry space in the index block.

This can cause OOB writes past the end of the allocation.

The validator ntfs_index_root_inconsistent() checks that entries are
self-consistent within the IR value, but never cross-checks them against
index_block_size. There is no bounds check in ntfs_ir_to_ib() before the
memcpy.

Fixing this at the sink in ntfs_ir_to_ib() since
ntfs_index_root_inconsistent() validates the logical consistency of
index_root as a structure and a root with large entries is a structurally
valid root. The bug is a size conflict of ntfs_ir_to_ib().
Also, the validator is called once per inode load in
ntfs_read_locked_inode() while ntfs_ir_to_ib() is only called during a
reparent, a check there adds no overhead to the common path.
Moreover, even a future call path that bypasses the validator would still
be protected.

With NULL as first parameter of ntfs_error(), the volume error flag is
never set by this call, so the device name will be absent from the error
message. In any case, that the caller, ntfs_ir_reparent(), prints an error
message that includes the device name on NULL returns.
I think this is the best solution available without adding
'struct super_block *sb' as a parameter to ntfs_ir_to_ib().

This heap out-of-bounds write is triggered by a crafted filesystem image,
which is not in the kernel threat model, anyway, fixing memory errors would
be nice to keep  things secure.

Fixes: 0a8ac0c1fa ("ntfs: update directory operations")
Signed-off-by: Alexandro Calo <alexandro.calo@nozominetworks.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:44 +09:00
Namjae Jeon
0ab6dc1ac4 ntfs: move attribute payload before shrinking its record
ntfs_new_attr_flags() resizes the non-resident attribute record before
moving its name and mapping pairs to their shorter-header offsets when
compression or sparse state is cleared.

Shrinking the record first moves the following attribute over the tail of
the old record. The subsequent memmove() therefore copies bytes from that
following attribute instead of the old mapping pairs. Re-enabling
compression on an empty file persists those bytes as a malformed mapping
pairs array, which ntfsck reports as a missing or invalid run length.

Move the payload before shrinking the record, while retaining the existing
resize-before-move ordering when growing it.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:44 +09:00
Hyunchul Lee
7ed0028126 ntfs: fix resident conversion in ntfs_new_attr_flags
When setting sparse/compressed flags on a resident attribute, the
function skipped the resident-to-non-resident conversion and
terminated.

Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:43 +09:00
Namjae Jeon
5b676a77f3 ntfs: skip reads for full compression unit overwrites
ntfs_compress_write() reads every page in a compression unit before copying
new data into it. The read is unnecessary when an aligned write replaces
every byte covered by the page-cache folios.

Detect full page-aligned compression unit overwrites and grab locked cache
folios without reading them. Keep the read-modify-write path for partial
units and units that cover only part of a large page.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:43 +09:00
Namjae Jeon
a8a4681f2b ntfs: submit one bio per compressed write unit
ntfs_write_cb() allocates a single-vector bio and synchronously submits it
whenever another output page cannot be added. A 64 KiB uncompressed unit
therefore requires up to sixteen separate bio submissions.

Allocate enough vectors for the complete unit, add all output pages, and
perform one synchronous submission.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:43 +09:00
Namjae Jeon
8cd2bf1d7a ntfs: reuse compression output workspace across write units
ntfs_write_cb() allocates output pages and creates input and output
vmaps for every compression unit. Sequential writes repeatedly pay
those allocation and page-table costs even though each unit has the
same maximum output size.
Allocate and map the output workspace once per write request. Access

input sub-blocks with kmap_local_page(), and reuse the output pages and
mapping for every compression unit in the request.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:43 +09:00
Namjae Jeon
33200693eb ntfs: reuse the compression context during writes
ntfs_compress_block() allocates and initializes a roughly 40 KiB match
finder context for every 4 KiB sub-block. A 64 KiB compression unit thus
performs sixteen large allocations even though the calls are serialized.

Allocate one context for the complete write request and reset its hash
chains for each sub-block as before.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:42 +09:00
Namjae Jeon
b54559689a ntfs: fix initialized size and page state after compressed writes
The write iterator now expands attributes before calling
ntfs_compress_write(), so compressed writes must not expand the
attribute themselves. However, the compressed path still needs to reject
zero-byte iterator copies, advance initialized_size after successful I/O,
and invalidate modified folios after a failed compression-unit write.
Reject no-progress copies, persist the new initialized size on success,

and clear folio uptodate state when the synchronous write fails.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:42 +09:00
Namjae Jeon
eb67671cd8 ntfs: write compressed data before replacing old clusters
ntfs_write_cb() punches the old compression unit and publishes the new
mapping before submitting the replacement data. An allocation or I/O
failure after the punch loses the previous contents and can leave the
mapping pointing at unwritten clusters.

Allocate and write the replacement clusters first. Replace the runlist only
after the synchronous write succeeds, and free new clusters on failure.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:41 +09:00
Namjae Jeon
2bd734ee2c ntfs: punch all-zero compressed blocks
When a rewritten compression block consists entirely of zeroes,
ntfs_write_cb() returns without replacing its existing runlist mapping.
The old on-disk contents therefore remain visible after cache eviction.

Punch the compression unit so that reads resolve it as a sparse block and
release any clusters that held the previous contents.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:41 +09:00
Namjae Jeon
f2b2aeeaad ntfs: support large pages in compressed writes
ntfs_compress_write() derives its page count by shifting the compression
block size and assumes that every compression block begins at a page
boundary. This produces a zero page count for small compression blocks on
large-page systems and ignores an in-page compression block offset.

Map every page covering the compression block, pass the in-page offset to
ntfs_write_cb(), and stage uncompressed output in page-aligned pages.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:40 +09:00
Namjae Jeon
3e497af637 ntfs: propagate compression context allocation errors
ntfs_compress_block() returns -ENOMEM when its compression context cannot
be allocated, but its unsigned return type turns the error into a large
positive value. ntfs_write_cb() then hides the allocation failure.

Use a signed return type and propagate negative errors to the caller.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:40 +09:00
Mohammad Shahid
34d22551ad ntfs: dir: use kmemdup() instead of kmalloc() and memcpy()
Use kmemdup() instead of a separate kmalloc() and memcpy()
pair, simplifying the code while preserving the existing
behavior.

This issue was reported by memdup.cocci.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:39 +09:00
Mohammad Shahid
eec908b5c0 ntfs: mft: use kmemdup() instead of kmalloc() and memcpy()
Use kmemdup() instead of a separate kmalloc() and memcpy()
pair, simplifying the code while preserving the existing
behavior.

This issue was reported by memdup.cocci.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:38 +09:00
Mohammad Shahid
5e150dc65d ntfs: reparse: remove redundant NULL checks before kvfree()
kvfree() safely handles NULL pointers, so the explicit NULL checks
before calling kvfree() are unnecessary.

This issue was reported by ifnullfree.cocci.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:38 +09:00
Namjae Jeon
e36dbad088 MAINTAINERS: update mailing list address for ntfs
Add the newly created official mailing list for the ntfs.
This mailing list will be shared and used for both the kernel driver
and the ntfsprogs-plus utility project.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:37 +09:00
Namjae Jeon
5c32f0b8d7 ntfs: use pagecache_isize_extended() on size extension
When extending file size, call truncate_pagecache() first, then update
i_size, and use pagecache_isize_extended() instead of manual
iomap_zero_range(). This ensures the straddling folio is properly marked
RO so page_mkwrite() is called and post-EOF area is zeroed.

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:37 +09:00
Namjae Jeon
fbd74e665e ntfs: file extension before write submission
Prepare non-resident file allocation and initialized-size extension in
->write_iter() before entering the buffered or direct iomap write paths.

Previously, the iomap write callback extended initialized_size. When a
direct write started beyond initialized_size,
ntfs_extend_initialized_size() used iomap_zero_range() to zero the gap
through the page cache. This created dirty folios after iomap DIO had
invalidated its target cache range. The bsync path then had to
synchronously write back the entire zeroed gap to prevent the post-DIO
invalidation from encountering a dirty boundary folio.

Move allocation and initialized-size preparation ahead of iomap submission.
For DIO, kiocb_invalidate_pages() now sees any dirty boundary folio created
by iomap_zero_range(), writes it back when necessary, and invalidates it
before the direct I/O is issued. This removes the explicit synchronous
writeback of the zeroed gap while preserving the required boundary-folio
ordering.

Keep compressed writes out of the early initialized-size extension so their
existing write path can zero uninitialized data before compression. Move
compressed-file allocation expansion to write_iter as well, eliminating the
now-redundant expansion from ntfs_compress_write().

Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:36 +09:00
Namjae Jeon
6e03fbd5f7 ntfs: fix kmap_local_page() usage in compress
Several compressed I/O paths discard the address returned by
kmap_local_page() and later access or unmap the page using page_address().
This is invalid for highmem pages, and local mappings must also be unmapped
using the address returned by kmap_local_page().

Map each destination page in ntfs_decompress() only while producing the
current sub-block. Use memcpy_from_page(), memcpy_to_page(), and
memzero_page() for the other page accesses. Remove unnecessary local
mappings from ntfs_write_cb(), where pages are accessed through the vmap()
mapping.

Fixes: 495e90fa33 ("ntfs: update attrib operations")
Reported-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:36 +09:00
Matthew Wilcox (Oracle)
f6ce4cbcc5 ntfs: Remove references to page->__folio_index
Pages don't have indexes, folios have indexes.  Correct this in
ntfs_read_compressed_block() and also remove a use of page->mapping
while I'm in here.  Also convert the calls to unlock_page() and
flush_dcache_page().

Fixes: 495e90fa33 ("ntfs: update attrib operations")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hyunchul Lee <hyc.lee@gmail.com>
Cc: Namjae Jeon <linkinjeon@kernel.org>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:35 +09:00
Matthew Wilcox (Oracle)
8a81803f87 ntfs: Use zero_user_segment() in handle_bounds_compressed_page()
This fixes handle_bounds_compressed_page() on highmem memory
as page_address() does not work on memory which has been kmap_local(),
only on kmap() memory.

Fixes: 495e90fa33 ("ntfs: update attrib operations")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:35 +09:00
Matthew Wilcox (Oracle)
a3976da121 ntfs: Remove use of __folio_index in handle_bounds_compressed_page()
Nobody is supposed to use page->__folio_index.  Use page_offset()
instead, and simplify by working exclusively in loff_t instead of mixing
up loff_t and pgoff_t.

Link: https://lore.kernel.org/all/20260608210618.3437216-3-willy@infradead.org/
Fixes: 495e90fa33 ("ntfs: update attrib operations")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Co-developed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:34 +09:00
Matthew Wilcox (Oracle)
f98d80d517 ntfs: Inline zero_partial_compressed_page()
zero_partial_compressed_page() has one caller and the next commit
will make changes to it that make it inelegant to split across two
functions.

Fixes: 495e90fa33 ("ntfs: update attrib operations")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:34 +09:00
Alexandro Calo
ffc755828d ntfs: Fix min_len for compressed/sparse attributes in ntfs_non_resident_attr_value_is_valid()
Here the attribute validator computes a single min_len = 64 (as the end of
initialized_size) for all non-resident attributes regardless of the flags
field. This is correct for regular non-resident attributes but for sparse
or compressed non-resident attributes the fixed header is 8 bytes longer,
it includes a compressed_size field at bytes 64-71, min_len should be 72.

Since the validator lets a sparse/compressed attr_record be less than the
correct length, caller's accesses to compressed_size
(e.g., ntfs_read_locked_inode() or ntfs_attr_update_mapping_pairs()) can
extend past the attribute declared boundary.
This can cause OOB reads or OOB writes past the MFT record buffer if the
attribute is positioned near the end of the MFT record.

The compressed_size field is accessed from:
- ntfs_read_locked_inode()
- ntfs_read_locked_attr_inode()
- ntfs_attr_open()
- ntfs_attr_update_mapping_pairs()

ntfs_attr_make_non_resident() seems to be safe.

Fixing this by raising min_len for sparse/compressed attributes in the
validator.

The OOB reads and the OOB writes require a crafted filesystem image, which
is not in the kernel threat model, anyway, fixing memory errors would be
nice to keep things secure.

Signed-off-by: Alexandro Calo <alexandro.calo@nozominetworks.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:34 +09:00
Namjae Jeon
41e1cf4ec1 ntfs: rewrite EA stream before updating metadata
Updating an EA removes the old record and appends its replacement.
Build the complete $EA stream in memory and rewrite it from offset zero,
rather than committing a compacted stream followed by a separate append.
generic/642 shows that the append path can leave an invalid record layout
on disk, including when a new EA entry is added.

When removing an EA, write the compacted stream before updating
$EA_INFORMATION and restore the original pair if the metadata update
fails.

When the final EA entry is removed the $EA/$EA_INFORMATION pair is torn
down. If removing $EA_INFORMATION fails after $EA has already been
removed, the original $EA is restored so the two attributes stay
consistent.

Fixes: fc053f05ca ("ntfs: add reparse and ea operations")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:33 +09:00
Namjae Jeon
772e4c8f25 ntfs: remove empty EA attribute pair
Removing the final xattr leaves an empty $EA stream. An empty $EA
attribute paired with $EA_INFORMATION is not a valid EA chain and
ntfsck reports it as corrupt.

Remove both attributes when the final EA entry is deleted.

Fixes: fc053f05ca ("ntfs: add reparse and ea operations")
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:33 +09:00
Namjae Jeon
650a2751c9 ntfs: validate final EA attribute size
A replacement first removes the existing EA record, then adds the
replacement.  Check the size of that final $EA stream before mutating
the current stream.

This avoids committing the shortened $EA stream or $EA_INFORMATION before
discovering that the replacement exceeds the AttrDef size limit.

Fixes: fc053f05ca ("ntfs: add reparse and ea operations")
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-08-19 18:16:33 +09:00
Linus Torvalds
bd5f485f3f soc: Arm platform updates for 7.3
The 32-bit Arm platforms are a bit more interesting this time: I refreshed
 an earlier series to mark code as deprecated that does have the tendency
 of getting in the way of cleanups and new features but has close to zero
 users. Among these are:
 
  - 22 of the remaining 28 legacy board files that predate the current
    devicetree based descriptions, using old chips from Intel and Marvell.
    The remaining six board files are for TI OMAP1 and Samsung s3c64xx
    chips and all still have known users.
 
  - support for Cortex-M3/M4/M7 and ARM1136r0 CPU cores and the 25
    machines based on these. These all use devicetree but the CPU
    support causes disproportional work. Most of them are just
    reference boards, the notable exceptions being the Nokia N800/N810
    tablet and the Buglabs BUG platform.
 
  - be8, be32, oabi and iwmmxt userspace binaries, which were mostly
    associated with the platforms now scheduled for removal and
    are increasingly problematic to support with modern toolchains.
 
 Nothing is actually removed at this point, to ensure that any remaining
 users continue to have the 7.3-LTS for a while longer. Patches for
 removal are currently being tested.
 
 Other updates include a continued work to convert GPIO number based
 interfaces to descriptors, a patch to restore little-endian mode
 on the one Arm platform (ixp4xx) that only worked in big-endian mode
 recently, and some minor cleanups and bugfixes.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmqDZgkACgkQmmx57+YA
 GNkxaRAAxCSAoS6sqq8qoRKcRAfJOVYiaSv5O4sHFt7lzoSUZD1kVn0USNrHLcbZ
 mdeFBCQTiyjMD7IqS+gF+G9LshuE6g7h7D9fr/YeMMog2tzTfEdjiMBRlNUtXHri
 OUqP35navxMiP1B9yoGhWFbvZ7I2STkJSQ6atNye8dlFOHE22SWDSFRd7X/kVrN9
 DJne9qMrcUOHwJv7hxTJXoCbtKxLyfQtwg+MLHz6dEcVYhf2XJKZYeVUiVA6UT4S
 6219qQ/WFiug4ALZRbjmAuaPQu+nf9kI1ZrzGFsFkNAhZ44GPUK1n+MBieQKp5pF
 zf8wp3159Erg+0XM2/dVPXH49oX+Nllz3C1b3mmfIoBdSdJ/D8PNyZzwbQRQPjwd
 p7Mh5Vdq/hz+9XxRPKGLqNik/IzyXifMbC+uQR1++SRT/JWTcH3fedwQvKuX/5vS
 uPvMekbkVRrYfBgrTJTmtlxQJz5iLpS69QnHmI+nwKTPsY18LKHMVG8VXZxeP9iY
 RDJw5mPGv84RaTTM0NaVYSmk5vsNv5YQeUfLWojovBC83mTe9RKZDloJsOYXRRXh
 CgcjhCskNPfWoKUUFk9NqOjBjXtzcOcxXFXrJw0ADT7JC9r1E1PdUIW0ND4LKypP
 OnXxJL9TGTmNEvPEKlOyD6FymbOrLAoHsr33CD3TTLwB/8ZKKmw=
 =FH1e
 -----END PGP SIGNATURE-----

Merge tag 'soc-arm-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM SoC platform updates from Arnd Bergmann:
 "The 32-bit Arm platforms are a bit more interesting this time: I
  refreshed an earlier series to mark code as deprecated that does have
  the tendency of getting in the way of cleanups and new features but
  has close to zero users. Among these are:

   - 22 of the remaining 28 legacy board files that predate the current
     devicetree based descriptions, using old chips from Intel and
     Marvell. The remaining six board files are for TI OMAP1 and Samsung
     s3c64xx chips and all still have known users.

   - support for Cortex-M3/M4/M7 and ARM1136r0 CPU cores and the 25
     machines based on these. These all use devicetree but the CPU
     support causes disproportional work. Most of them are just
     reference boards, the notable exceptions being the Nokia N800/N810
     tablet and the Buglabs BUG platform.

   - be8, be32, oabi and iwmmxt userspace binaries, which were mostly
     associated with the platforms now scheduled for removal and are
     increasingly problematic to support with modern toolchains.

  Nothing is actually removed at this point, to ensure that any
  remaining users continue to have the 7.3-LTS for a while longer.
  Patches for removal are currently being tested.

  Other updates include a continued work to convert GPIO number based
  interfaces to descriptors, a patch to restore little-endian mode on
  the one Arm platform (ixp4xx) that only worked in big-endian mode
  recently, and some minor cleanups and bugfixes"

* tag 'soc-arm-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (41 commits)
  MAINTAINERS: Drop redundant lists from various Samsung entries
  ARM: tegra: Replace __ASSEMBLY__ with __ASSEMBLER__
  ARM: tegra: Fix OF node reference leaks in IRQ init
  ARM: lpc32xx: remove a few manually populated OF devices
  ARM: lpc32xx: only run SoC init on LPC32xx hardware
  firmware: imx: scu: manage mailbox channels and global handle
  ARM: sa1100: h3xxx: convert gpio-keys to use software nodes
  ARM: sa1100: collie: convert gpio-keys to use software nodes
  ARM: sa1100: assabet: convert gpio-keys to use software nodes
  gpio: sa1100: register software node for GPIO controller
  ARM: ixp4xx: Relax endianness
  ARM: replace linux/gpio.h inclusions
  soc: imx9: devm_kasprintf error handling
  ARM: mark mv78xx0 support as deprecated
  ARM: mark axxia platform as deprecated
  ARM: mark Cortex-M3/M4/M7 based boards as deprecated
  ARM: mark footbridge as deprecated
  ARM: mark RiscPC as deprecated
  ARM: mark mach-sa1100 as deprecated
  ARM: orion5x: mark all board files as deprecated
  ...
2026-08-18 19:50:40 -07:00
Linus Torvalds
6eb1ea5ff4 soc: defconfig updates for 7.3
Just the usual updates to the main defconfig files as well as the omap2
 specific one, to enable more loadable modules for better default
 hardware support.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmqDZfQACgkQmmx57+YA
 GNmmRA//b6TBVM2OAAqAM+gjUeY1pGQJab3kJHGpE+13vOn39PhQv8/V8qUcv9mv
 i9w15ivsaS/KKjTYuGc09A7fctSt5g1oPY2PA5v3d4ao4dygqVEIGwUIE0hldNAy
 1BZF+dMoRd07doKFZesG1d0l85Mec5j999OI+MluFfSWwO9sg8Ht9LxAwHCwrxcl
 Go4oJd16l47FIJ4G6eE8qa+qUy44zWeamhQGpEStQOyQIZsFjAk1OFpIvdRH7MEg
 zB0T41vTtYuxyZ8gEv71rrDkK74HS/Zychxw+I7snhna5jTfh11smm1zr9fHUiwN
 93vrrzqqpldanJiExaAxF9z5LLYTajpQB/uM7Em5ytD+zSxlra1r/KCQrfmRGjdZ
 XdaP25vx6ivUhyJDFUPXzb6s8ujmybxdNfn7uxq24IzwZAsntJEvP1hbpSssZP7K
 s7Z0kCfjUurvVXiIC557AHI38C1tH7IN+shFR1I+Iql8K4X1tWODWWp8ghLryQxe
 V92F7WghM1wgE72M38sN3/knkNr/OjCJp2sjkl1rLxEtHWXg1sXS3uvxALiOAPsu
 z363cPF3L0FmlaEiZ577D+7q864fowbfgpZJzsaY4Xij7zE1XILUgThQRRPwno9S
 dwhgnUmy5rAc8SsF9K+tGWMQVlUneVKgZe+Evh4uFdBIfc4T47E=
 =iSun
 -----END PGP SIGNATURE-----

Merge tag 'soc-defconfig-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull SoC defconfig updates from Arnd Bergmann:
 "Just the usual updates to the main defconfig files as well as the
  omap2 specific one, to enable more loadable modules for better default
  hardware support"

* tag 'soc-defconfig-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:
  riscv: defconfig: thead: enable PCA953X GPIO driver
  arm64: defconfig: Enable drivers for BeagleBadge
  arm64: defconfig: Enable Qualcomm BAM-DMUX WWAN driver
  arm64: defconfig: Enable Sound DMIC driver
  arm: omap2plus_defconfig: Enable multi-LED
  arm64: defconfig: Enable Qualcomm reference device EC driver
  ARM: omap2plus_defconfig: enable things required by iwd
  arm: multi_v7_defconfig: Enable BRIDGE and DP83848_PHY for TI AM57xx, AM437x and AM335x
  arm64: defconfig: Enable Allwinner LRADC input driver
2026-08-18 19:47:08 -07:00
Linus Torvalds
368cf60c36 soc: drivers for 7.3
The SoC driver changes once more consist of many small fixes and
 cleanups, that are to a large part the result of automated testing. On
 platform specific drivers, this includes SoC specific code for xilinx,
 freescale/nxp, qualcomm, TI, aspeed, omap, tegra, samsung, rockchip,
 renesas, ixp4xx. In firmware drivers, we see a similar picture for
 SCMI and qcomtee.
 
 Aside from these, we see actual new hardware support in a few
 areas:
 
  - The Apple platform gets a new driver for low power states
 
  - Updates to Qualcomm platform drivers add several new
    hardware specific features and additional SoCs.
 
  - Amlogic SoC support for A1 and T7 is added
 
  - The Mediatek MMSYS driver is refactored as a cleanup.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmqEtqAACgkQmmx57+YA
 GNlpfQ//VD7d15DccC3OJCsG9s9vBF0Hd7etv8ceX3PWbIuLon8QBOR91/uJaaYd
 33yWieJa3zNajOYqfNOAX7hD1N1UsXGmxJxpWcWlsfrhfXGiSctrQGxnOMdf0d6X
 LLhWR5Q+7H9utKSFshFzdUA0aDDvsQhSBl/zmnC68+qd105XAddaPMXmw5jfDNNQ
 6PO1f0iXwkkHel3Eq9EkNDomEWBndL7/s17f7IdRS0Sr+7iBp+Ey3ePG0sJ0MQBU
 H7IifUfMr5GxfVhIM9yVmnvLH07OhNunJyzKhQkCiWQzFa/8biNhEvGH4kJ67Is0
 XVB74chM/bo1EF6TVIY64ylpmCXPk5XWVwXZlhnwEI8npBFYrcSZJBAZ5vNUHMsT
 2Rw4lCczQemFaBFVGzNw+8j8K7712Sm1yfiU2LlN871JfGYxpeaC9N6o+NB8Oikt
 lS9fY8B3K2VzRM5w4Etp9SL3DPJ3N3LQ2gkCO0f/y+pu6n3IwrYGsJhocMOubcMn
 ImkI+StNUtCizWUGhHqcsOlXIdyoYRXx+Ex3y6hk1QqBIPNQHdY1lfkCXHicbpxf
 YVeUaelTGJp6mXFwx7Q10vD2679UyZYrMh4/cVsNskk1GlgDiiNCozVVdIa2/YnV
 qQNyoAzwPupI9fhyoFSoSzblhrESgTPnuTc6Rkl9I0y4ki3cqVM=
 =NeRc
 -----END PGP SIGNATURE-----

Merge tag 'soc-drivers-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull SoC driver updates from Arnd Bergmann:
 "The SoC driver changes once more consist of many small fixes and
  cleanups, that are to a large part the result of automated testing.

  On platform specific drivers, this includes SoC specific code for
  xilinx, freescale/nxp, qualcomm, TI, aspeed, omap, tegra, samsung,
  rockchip, renesas, ixp4xx. In firmware drivers, we see a similar
  picture for SCMI and qcomtee.

  Aside from these, we see actual new hardware support in a few areas:

   - The Apple platform gets a new driver for low power states

   - Updates to Qualcomm platform drivers add several new hardware
     specific features and additional SoCs.

   - Amlogic SoC support for A1 and T7 is added

   - The Mediatek MMSYS driver is refactored as a cleanup"

* tag 'soc-drivers-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (157 commits)
  soc: qcom: make QCOM_PDR_MSG selectable
  soc: qcom: ubwc: Fix missing include
  soc: qcom: ubwc: Fix link error when QCOM_SMEM=n
  media: iris: Guard the QCOM_UBWC_CONFIG select with QCOM_SMEM
  drm/msm: Guard the QCOM_UBWC_CONFIG select with QCOM_SMEM
  dt-bindings: arm: qcom,ids: Add SoC ID for Snapdragon SDM 850
  firmware: xilinx: Clear firmware notifiers across kexec transitions
  firmware: xilinx: Release all peripheral devices from firmware
  firmware: xilinx: Add support to clear EL3 PM state
  firmware: xilinx: Propagate actual error from feature check
  firmware: xilinx: Use TF-A feature check for TF-A-specific APIs
  bus: fsl-mc: drop unused assignment of acpi_device_id::driver_data
  soc: fsl: qe: check platform_driver_register() in qe_ic_of_init()
  phy: lynx-10g: use RCW override procedure for dynamic protocol change
  soc: fsl: guts: implement the RCW override procedure
  dt-bindings: fsl: layerscape-dcfg: define DCFG_DCSR region
  soc: fsl: guts: make fsl_soc_data available after fsl_guts_init()
  soc: fsl: guts: make it easier to determine on which SoC we are running
  soc: fsl: guts: add a central fsl_guts_read() function
  soc: fsl: guts: add a global structure to hold state
  ...
2026-08-18 19:40:29 -07:00
Linus Torvalds
cbe8aadf15 soc: devicetree updates for 7.3
There are two new mystery SoCs with very little public information
 about them so far, Qualcomm's Cortex-A78C based "Shikra" and
 Altera's Cortex-A720 based Agilex72 SOCFPGA.
 
 We have also gained support for a couple of SoCs from the
 2023/2024 timeframe that have been in the making for a while:
 
  - The Apple platform gains support for M3 Pro, Max and Ultra SoC,
    following the basic M3 support from 7.2.
 
  - Samsung Exynos 1580 is a high-end mobile phone SoC from 2024
 
  - Canaan K230 is a RISC-V based 64-bit AI SoC, based on the
    earlier K210 chip
 
  - Sophgo SG2000 is a mixed Arm/RISC-V chip that was already
    supported using the Arm core but is now also added for RISC-V
    along with several other variants of the cv18xx series
 
 In terms of newly added machines we have reference platforms
 for all the chips above, plus
 
  - only four 32-bit Arm boards: two older phones and two
    older industrial/embedded boards; using Allwinner, Qualcomm and
    Rockchip SoCs
 
  - Three laptops und three phones using Qualcomm SoCs
 
  - Ten 64-bit Rockchips based single-board computers, along with one
  NAS box and a game console.
 
  - Seven industrial/embedded boards and modules using NXP i.MX8/9 SoCs.
 
  - A Lenovo desktop box based on NVIDIA Jetson Xavier NX
 
  - A few more single-board computers based on Allwinnner A133,
    Spacemit K1 and TI AM62.
 
 As usual, there is a constant stream of minor cleanups and fixes
 towards addressing the 'dt-check-style --mode strict' warnings,
 and everyone is expected to address those warnings for new
 submissions now.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmqDZaMACgkQmmx57+YA
 GNkkiRAAusVNTkNVcpq+QGDhd6DfLd+d4vcvTJkBZ5WyJuqKs1qZPFIMQ0iMW1cY
 hahBeYoowRX1oaB7KZc/MBE0IkOna35CEwiL6dm553xq+P208auqpNLpXTSKWsvx
 jW4eYpdA6Bt6SM9J/583Ix71b5UFsLV+W3YKT2CBUZYn9yilAEz6kPa/Hxxa1Sia
 3841Fdy6jcqusw1alzLQvrR7FxdtPFCs1f/a/GzBmZI7fxnj/cBwVghinSF9F0XW
 BzDaUjMDzBYqSlMb7auNH0IpDeVuTx2Pch+YLrE8YVVPVf3nawd48ziwXO6zRsGx
 HccLDuHpBqwnHsAh+bWi9UdxUSzjGW4KQ/W8Fj6O2SNqxPqrK2hyRYMp+76Tl65x
 2diQOajmnZ4m8E5ToWsxpRxrlo6TKo33W63HglGIA24vr0gEi9FpA3kYiaWP2ZBD
 qZz5xMeRmO1son1vtWX1CzsWFdogqBuGdztOyMoY4viSeY/ltT1EvIC0AiTIeSOt
 krOFFDxwHvu+HOPJJ15VCVwEutUnGytB2nwBc/krhNS6MSlwg9DpY53RAhBxl0Jh
 KXpPqBUpbl0Flty2rxdPx2EAt7MqeLTNXSSdzP7tvvumsT1Ik+zlPk+MkgLZ0Y5u
 71fJrcij+0LeFDCzw81jGLoYSCw+9aNaELcF+OluL6rK8YFaBOE=
 =RQan
 -----END PGP SIGNATURE-----

Merge tag 'soc-dt-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull SoC devicetree updates from Arnd Bergmann:
 "There are two new mystery SoCs with very little public information
  about them so far, Qualcomm's Cortex-A78C based "Shikra" and Altera's
  Cortex-A720 based Agilex72 SOCFPGA.

  We have also gained support for a couple of SoCs from the 2023/2024
  timeframe that have been in the making for a while:

   - The Apple platform gains support for M3 Pro, Max and Ultra SoC,
     following the basic M3 support from 7.2.

   - Samsung Exynos 1580 is a high-end mobile phone SoC from 2024

   - Canaan K230 is a RISC-V based 64-bit AI SoC, based on the earlier
     K210 chip

   - Sophgo SG2000 is a mixed Arm/RISC-V chip that was already supported
     using the Arm core but is now also added for RISC-V along with
     several other variants of the cv18xx series

  In terms of newly added machines we have reference platforms for all
  the chips above, plus

   - Only four 32-bit Arm boards: two older phones and two older
     industrial/embedded boards; using Allwinner, Qualcomm and Rockchip
     SoCs

   - Three laptops und three phones using Qualcomm SoCs

   - Ten 64-bit Rockchips based single-board computers, along with one
     NAS box and a game console.

   - Seven industrial/embedded boards and modules using NXP i.MX8/9
     SoCs.

   - A Lenovo desktop box based on NVIDIA Jetson Xavier NX

   - A few more single-board computers based on Allwinnner A133,
     Spacemit K1 and TI AM62.

  As usual, there is a constant stream of minor cleanups and fixes
  towards addressing the 'dt-check-style --mode strict' warnings, and
  everyone is expected to address those warnings for new submissions
  now"

* tag 'soc-dt-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (864 commits)
  Revert "riscv: dts: spacemit: k3: add i2s0-i2s5 nodes"
  Documentation/process: maintainer-soc: Mention expectation about dt-check-style
  ARM: dts: helios4: add SATA regulator supplies
  ARM: dts: helios4: add vcc-supply to GPIO expander
  ARM: dts: helios4: add vcc-supply to EEPROM
  arm64: dts: turris-mox: fix usb3 phys
  arm64: dts: ti: Correct white-space style
  arm64: dts: ti: k3-am64: Fix MDIO clock reference for ICSSG0 node
  arm64: dts: qcom: talos-evk: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: sa8155p-adp: Fix swapped USB and UFS QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: eliza-mtp: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: lemans: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: glymur: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: kaanapali: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: sar2130p: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: sm8750: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: sm8650: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: purwa: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: hamoa: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  arm64: dts: qcom: sc8180x: Fix swapped USB QMP PHY vdda-phy/vdda-pll supplies
  ...
2026-08-18 19:36:32 -07:00
Linus Torvalds
ca58a3dde6 alpha updates for v7.3
- alpha: read $gp and $sp explicitly for clang
 - alpha: pass -Wa,-mev6 only when using GNU as
 - alpha: annotate hardirqs-off on IPL 7 interrupt entry
 - alpha: run the remote RTC access in a worker, not an IPI callback
 - alpha: don't leak hardware-fabricated FP exception bits to user space
 - alpha: fix ieee_swcr_to_fpcr setting FPCR_DNOD unconditionally
 - alpha: enable lockdep hardirq state tracking
 - alpha: use raw spinlocks for low-level platform locks
 - alpha: provide ftrace return address support for lockdep
 - alpha: make irqflags helpers operate on IPL state
 - alpha: add ARCH_STACKWALK-based stacktrace support
 - alpha: enable regset-based ptrace and core dumps
 - alpha: marvel: Fix lock ordering in init_io7_irqs()
 - alpha: marvel: Fix irq_set_status_flags to use correct IRQ number
 - alpha: remove unnecessary architecture-specific <asm/device.h>
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQTIw07U9ivnHy+tugnaDr6nZQzE/AUCaoNScQAKCRDaDr6nZQzE
 /N/VAQC7mKFoSOIYkyCFCu0+XQM8GTCog8bsnvnUphqNMpK5GAD+MIg5Jw3Xyr3S
 dLhniCgl7mhG1tTcdJCO6iqvYAq4eA4=
 =Es5X
 -----END PGP SIGNATURE-----

Merge tag 'alpha-for-v7.3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/lindholm/alpha

Pull alpha updates from Magnus Lindholm:
 "This contains two fixes for Alpha floating-point exception handling,
  two clang-related fixes, the preparatory changes from the
  generic-entry series, an interrupt-entry lockdep fix, two Marvel/EV7
  IRQ fixes, an RTC fix, and one header cleanup.

  The generic-entry preparation adds regset-based ptrace and core dumps,
  ARCH_STACKWALK and lockdep hardirq-state tracking. These changes are
  useful independently and enable previously missing debugging
  facilities on Alpha.

  The final patch switching Alpha to GENERIC_ENTRY is intentionally not
  included in this pull request. I am deferring that change to allow
  further testing and to reduce the risk of conflicts with ongoing
  entry-path work elsewhere in the kernel"

* tag 'alpha-for-v7.3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/lindholm/alpha:
  alpha: read $gp and $sp explicitly for clang
  alpha: pass -Wa,-mev6 only when using GNU as
  alpha: annotate hardirqs-off on IPL 7 interrupt entry
  alpha: run the remote RTC access in a worker, not an IPI callback
  alpha: don't leak hardware-fabricated FP exception bits to user space
  alpha: fix ieee_swcr_to_fpcr setting FPCR_DNOD unconditionally
  alpha: enable lockdep hardirq state tracking
  alpha: use raw spinlocks for low-level platform locks
  alpha: provide ftrace return address support for lockdep
  alpha: make irqflags helpers operate on IPL state
  alpha: add ARCH_STACKWALK-based stacktrace support
  alpha: enable regset-based ptrace and core dumps
  alpha: marvel: Fix lock ordering in init_io7_irqs()
  alpha: marvel: Fix irq_set_status_flags to use correct IRQ number
  alpha: remove unnecessary architecture-specific <asm/device.h>
2026-08-18 19:33:32 -07:00
Linus Torvalds
d10e148b27 csky 7.3 Release Notes
- Fix a4/a5 restoration in syscall trace path
 -----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEE2KAv+isbWR/viAKHAXH1GYaIxXsFAmqDoKgSHGd1b3JlbkBr
 ZXJuZWwub3JnAAoJEAFx9RmGiMV75qIP+QHF0YLconew7zBRAwSLtIYApTpZOqKa
 btIs20Tw4H4NpwQXAzYlRj1MOJXFZUl4/7FIfAnlHK7F2K63s54M6flrwKMomSNb
 w/vSpiMhFwAPioXMO+/C5yBEqUCi9xv9uhF50BRcnbdFrtPIVdMaLxnfGLsCR5JL
 ZD814UmniatzbM5HZbdlr6BWluC+3dUUTqltuo8lJPKD4boksi5RD0l1dLtktxxT
 XxDjjiNLF3SLWxXharjOSsNtG2elEQ0NBalQuT7yHwbefCmZKZgrV+YNEt1dVTOM
 m/BdG2LivzdAHJ4TvZzR1MMFs5IvK1iMvBdsjXfmccnAtOQRhoG/0LNyQHnA2B5J
 WcsCNRgfkoWpyo5GP8hbO6XrQ9qqhdQnfIahbJRc+sBe/eKYOBq8o1qE+w22OEnd
 GaPuB/PevnNwH3pCO4j/SVARqfpN1SvQ47JA+8ChjlxpnahIhSCdsur8gIoe7eDx
 qsw9o51DrBf5T4ifo2C/9CbTR9KZYuwKb9GcgJ7fvbACpaaJcojBURCpnmLFbm2U
 ESMRLWrm93+O7GBsXM2wd/G7/M3mxx+BoDji7ST43m5t7Ufj196JthS7CVXbFA7n
 tjKGoowFTRLnQwDfQNVO7RVVhv+8/lT5H2WPQrCobsvvuMBfWzUBjBSR/e4Y13eO
 axVFernowXgN
 =B+B5
 -----END PGP SIGNATURE-----

Merge tag 'csky-for-linus-7.3' of https://github.com/c-sky/csky-linux

Pull csky update from Guo Ren:

 - Fix a4/a5 restoration in syscall trace path

* tag 'csky-for-linus-7.3' of https://github.com/c-sky/csky-linux:
  csky: Fix a4/a5 restoration in syscall trace path
2026-08-18 19:32:34 -07:00
Linus Torvalds
5808ac1889 - Get rid of static_cpu_has() - one less API to care about testing CPU
features
 
 - Unify the handling of CPU core types (performance, efficient, etc) by
   mapping the vendor-specific types to Linux ones
 
 - Continuation of the work of Ahmed Darwish to centralize CPUID leafs
   representation
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmqEomYACgkQEsHwGGHe
 VUqrVhAAmN1E0HRaRm2zUcJqDS2TVz9a//LTWI/i9pNtlhPrdGrPtaHfps89TGj3
 1TBiFPE6I4xbuTlumFBToqfPbJ8mw41s3ZnlAUk/QVkf0J7Qkra/tZ9dRsWpjwqJ
 y/PqzgW7qTtpye881VX0fNaOlV4CRAQiGv6StALRo9fXn1lWRfwCfFBjYeuMHS0H
 e8r0shF0petS7JdHyTWmzS3E50ETrGI6XNbkKjWFyMjolaeP3r4YP1ucj/B5KY1E
 CFjdBkgXM3PQ0K4Nax96PA15VoMorIuGhpjiv0phiA9itBay3x6EQfOhXoMWtgiE
 9gbgUfWUCx/n+U5tXwOaZnFBd8gnyT0QOENmojEf8GCIBoGgeff0g6djNAm36QlF
 Zyfq7EOMBCfkooddWEz6qhZdeP7SwKz0i0dHyJ6OroQKXVjnCXAUveyA3/1venYb
 HT/xP/BNDQc4+GpO1ZPCuottpC6CVPclWsVOrcnU4jBtZJRhvNTWQMbDpZUFUefO
 FIJi40u1cnHw1hk7t5dVACJAME5p4hUz9hlfZFMETbkxjFH7cJEKaGFO2JXhSsui
 NaLkCJQWgnJynnhNhdycRsdbC6+pAiayoajGe80hiwYrr3j0YhG5UKSrgUwD6uiq
 CxuFt7C8jLEsAcWBILVB5+S6vh+3peHRAm9m9LtgiDpRAM4vGGI=
 =IKxX
 -----END PGP SIGNATURE-----

Merge tag 'x86_cpu_for_v7.3_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 cpuid updates from Borislav Petkov:

 - Get rid of static_cpu_has() - one less API to care about testing CPU
   features

 - Unify the handling of CPU core types (performance, efficient, etc) by
   mapping the vendor-specific types to Linux ones

 - Continuation of the work of Ahmed Darwish to centralize CPUID leaf
   representation

* tag 'x86_cpu_for_v7.3_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/CPU: Rename struct cpuid_read_output to struct cpuid_output
  x86/cpu/scattered: Sort it properly
  x86/cpu: Use parsed CPUID(0x1)
  x86/lib: Add CPUID(0x1) family and model calculation
  x86/cpu: Use parsed CPUID(0x0)
  x86/cpu/transmeta: Rescan CPUID(0x1) after modifying capabilities
  x86/topology: Add TOPO_CPU_TYPE_LOW_POWER
  x86/topology: Name the AMD core-type values
  x86/topo: Map vendor CPU types to generic Linux such types
  x86/bugs: Don't use cpu-type matching in cpu_vuln_blacklist
  x86/cpu: Hide and rename static_cpu_has()
2026-08-18 19:09:42 -07:00
Linus Torvalds
bbd0571269 - The usual pile of smallish cleanups and fixlets all over the place
-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmqEj4IACgkQEsHwGGHe
 VUoFdRAAvbLBiy7GJixnL2RqNuJ2AoScR09VsFeZ5yKO5y9T7dycZ6Ahkp2/CZVw
 aWTuFctTTcjF8B8nv/phw9RBnT1bSU3y+t/6w2kPgrCnjq8OZ3vH3VRsUyYLUhcN
 fxd45445bIWgbc9Jv6F8tyOdS/l9Lkc3NXTkHWKvDBru/XH4+UGU0tcNcvOiXoWi
 5UXmjm3Wj9DqsFxUkGAzFJVKXq+BD+3vqByNPqudo7HV+SY5jeGs921lgcfJtZwe
 lD3Sz8F7/eVH8Kb5pZt1uYHlorqy1SoZDIp559W9O0jmi3BLY4RmeTcvSu7fYGpT
 n5lV9n6aZDwBe45pbeoICHyRGnJP8fN2BygGNblL6Cfdh8Wx4U3UWqiAYsDKwOAi
 336bRp611RLStOBV8+mEmpTJ0KfK/HIhPxIvuk49zqHffVniRvMSbbr5DxF2iWbU
 21yRBrEtzqsWMI9c4GgZnHPSLw4pE2cznEd/xId6eAX4aBF/03y0IUvqJX9q85Lj
 9Swd2wdyZysetXN6Ibk8R7BqQqsW6gZtm+k7bdkdxN3MqDMy3rCk66bz00t2kVey
 OIfTtP8Ai1TAh7Y3mFXTT6S6y5RK4vM2L41QJalVLklhyBruYzhrpOz2RcafXm4n
 b5ebossw9TF4hRKdoxULLdNfVrnhgT+akNG6MS3ekZctrWULyt4=
 =/jsH
 -----END PGP SIGNATURE-----

Merge tag 'x86_cleanups_for_v7.3_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 cleanups from Borislav Petkov:

 - The usual pile of smallish cleanups and fixlets all over the place

* tag 'x86_cleanups_for_v7.3_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/cpu: Remove unnecessary __maybe_unused annotations
  x86/msr: Document the I/O-like write semantics in the msr driver
  x86/apic: Ensure ICR register write value is handled as 32 bits
  x86/boot/compressed/head_64.S: Clean up SEV-related comments
  Documentation/arch/x86/amd-memory-encryption.rst: Fix typo
  x86/platform/quark: Fix kernel-doc warnings in imr.c
  x86/ras: Move contents from arch/x86/ras/Kconfig into drivers/ras/Kconfig
  x86/cpu: Move intel_get_platform_id() to cpu/intel.c
  x86/mm: Fix typo in comment
  x86/fpu: Fix kernel-doc formatting above fpu_enable_guest_xfd_features()
  x86/cfi: Use symmetric SYM_START and SYM_END in __CFI_TYPE()
  x86/cfi: Add __init_or_module annotations for fineibt
2026-08-18 18:34:58 -07:00