Re: [PATCH] smb: client: fix use-before-check of ReparseDataLength in reparse_buf_ptr()
Namjae Jeon <[email protected]>
| Newsgroups | org.kernel.vger.linux-cifs,org.kernel.vger.stable |
|---|---|
| Message-ID | <CAKYAXd8sLqY_j4yRQy1vassOwqovocJACH71Y2Zsv1YSetYs+w@mail.gmail.com> |
On Tue, Aug 18, 2026 at 2:17 AM Frank Sorenson <[email protected]> wrote: > > reparse_buf_ptr() reads buf->ReparseDataLength before checking that > count covers the full fixed header: > > buf = (struct reparse_data_buffer *)((u8 *)io + off); > len = sizeof(*buf); /* 8 bytes */ > rdlen = le16_to_cpu(buf->ReparseDataLength); /* offset 4, 2 bytes */ > > if (count < len || count < rdlen + len) /* check comes after */ > > struct reparse_data_buffer has ReparseDataLength at offset 4. If a > server returns OutputCount < 6, the read at offset 4-5 reaches past > the end of the received data. The off+count bounds against iov_len > were already validated, but that does not protect against count being > smaller than sizeof(*buf). > > Split the check: verify count >= sizeof(*buf) before reading > ReparseDataLength, then verify count covers the data region. > > Fixes: a158bb66b137 ("smb: client: optimise reparse point querying") > Cc: [email protected] > Signed-off-by: Frank Sorenson <[email protected]> Will appy it to #for-next with Paulo's acked-by tag. Thanks!