From: Paulo Alcantara <pc@manguebit.org>
To: Frank Sorenson <sorenson@redhat.com>, linux-cifs@vger.kernel.org
Cc: linkinjeon@kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH] smb: client: tighten validate_t2() offset bounds against actual buffer size
Date: Wed, 26 Aug 2026 20:03:33 -0300 [thread overview]
Message-ID: <f67877e37eeede299fbbe86914cd58f2@manguebit.org> (raw)
In-Reply-To: <20260825030948.3577275-1-sorenson@redhat.com>
Frank Sorenson <sorenson@redhat.com> writes:
> validate_t2() rejects ParameterOffset and DataOffset only when they
> exceed 1024, far below the allocated buffer ceiling. Raise the
> individual offset guard to CIFSMaxBufSize + MAX_CIFS_HDR_SIZE. Add
> joint offset+count checks against frame_end — bytes from hdr.Protocol
> to the end of the received payload, derived from WordCount and BCC to
> match smbCalcSize() — so a large offset with zero count cannot reach
> beyond the received frame.
>
> In CIFSFindFirst and CIFSFindNext, bound lnoff <= DataCount: since
> validate_t2() guarantees data_off + DataCount <= frame_end, this
> transitively bounds data_off + lnoff within the frame.
>
> Add min_param_size and min_data_size parameters to verify the offset
> clears the byte past ByteCount and that offset + struct size fits in the
> frame. validate_t2() computes the minimum valid offset dynamically as
> frame_end - BCC, which accounts for SetupCount > 0 (WordCount > 10)
> responses where extra setup words shift ByteCount and the data area
> later. Non-obvious sizes at the call sites:
>
> - CIFSPOSIXCreate: sizeof(OPEN_PSX_RSP) + sizeof(FILE_UNIX_BASIC_INFO),
> as the caller memcpys FILE_UNIX_BASIC_INFO immediately after OPEN_PSX_RSP.
> - CIFSSMBQPathInfo: legacy ? offsetof(FILE_INFO_STANDARD, EASize) :
> sizeof(FILE_ALL_INFO); the legacy path skips EASize intentionally.
> - CIFSSMBQAllEAs: offsetof(struct fealist, list), not sizeof, because an
> empty EA list returns DataCount=4 (list_len only).
> - CIFSSMBPosixLock: (0, sizeof(struct cifs_posix_lock)) — pSMBr aliases
> the small request buffer on the waitFlag path; defer
> cifs_small_buf_release(pSMB) to plk_err_exit so the pLockData branch
> does not read from freed memory. validate_t2()'s frame_end bound covers
> both the waitFlag (small buffer) and !waitFlag (transport-chosen buffer)
> paths correctly.
> - CIFSGetDFSRefer: (0, 0) — parse_dfs_referrals() reads from the fixed
> dfs_data struct offset, not from DataOffset; add an explicit check that
> dfs_data + DataCount fits within the received frame.
Besides all these LLM-generated messages and comments, would you have a
reproducer or a real use case that would require such changes?
next prev parent reply other threads:[~2026-08-26 23:03 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 3:09 [PATCH] smb: client: tighten validate_t2() offset bounds against actual buffer size Frank Sorenson
2026-08-26 23:03 ` Paulo Alcantara [this message]
2026-08-27 13:45 ` Frank Sorenson
2026-08-28 1:30 ` Paulo Alcantara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f67877e37eeede299fbbe86914cd58f2@manguebit.org \
--to=pc@manguebit.org \
--cc=linkinjeon@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=sorenson@redhat.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.