Re: [PATCH 1/1] ntfs: add ioctl support for named data streams
Hyunchul Lee <[email protected]> Sun, 2 Aug 2026 11:40:08 +0900
| Newsgroups | dev.linux.lists.ntfs,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CANFS6bY95QuokT5bDLnVTkHbJt_jwzS9jgBSp_rFhMMZp4+p_Q@mail.gmail.com> |
> +
> + bytes = ntfs_inode_attr_pwrite(attr_vi, offset, len, data_stream,
> + false);
> + if (bytes < 0)
> + err = bytes;
offset is u64, but ntfs_inode_attr_pwrite takes s64.
If offset is U64_MAX and len = 1, pos becomes -1.
A resident stream can the reach memcpy(addr + pos, ...),
causing an out-of-bounds write.
> +static int ntfs_remove_named_stream(struct ntfs_inode *ni, __le16 *uname,
> + u32 uname_len)
> +{
> + if (!ni || !uname || uname_len == 0)
> + return -EINVAL;
> +
> + return ntfs_attr_remove(ni, AT_DATA, uname, uname_len);
Dirty folios are not guaranteed to be evicted before
ntfs_attr_rm() frees clusters. So invalidating
page caches seem to be needed.
And we have to serialize ntfs_attr_remove() against
other mft record modifications.
> + case NTFS_STREAM_OP_WRITE:
> + err = mnt_want_write_file(filp);
> + if (err)
> + break;
> + err = ntfs_write_named_stream(ni, sname, sname_len,
> + req->stream_offset, req->io_len,
> + kdata,
> + &req->bytes_returned);
> + mnt_drop_write_file(filp);
> + if (!err) {
> + if (copy_to_user(&ureq->bytes_returned,
> + &req->bytes_returned,
> + sizeof(req->bytes_returned)))
> + err = -EFAULT;
> + }
> + break;
> +
We have to check NVolShutdown().