Skip to content

fix: update bytes from 1.10.1 to 1.11.1 (RUSTSEC-2026-0007)#5099

Merged
driftluo merged 2 commits intodevelopfrom
copilot/fix-integer-overflow-bytesmut
Feb 4, 2026
Merged

fix: update bytes from 1.10.1 to 1.11.1 (RUSTSEC-2026-0007)#5099
driftluo merged 2 commits intodevelopfrom
copilot/fix-integer-overflow-bytesmut

Conversation

Copy link
Contributor

Copilot AI commented Feb 4, 2026

What problem does this PR solve?

Problem Summary:

RUSTSEC-2026-0007: Integer overflow in BytesMut::reserve allows unchecked addition of new_cap + offset to wrap in release builds, corrupting capacity tracking and enabling out-of-bounds memory access.

What is changed and how it works?

What's Changed:

  • Bump bytes dependency from 1.10.1 to 1.11.1 in workspace Cargo.toml
  • Update Cargo.lock to reflect patched version

Version 1.11.1 adds overflow checks to the reserve path, preventing capacity corruption.

Related changes

  • N/A

Check List

Tests

  • No code

Side effects

  • N/A
Original prompt

This section details on the original issue you should resolve

<issue_title>RUSTSEC-2026-0007: Integer overflow in BytesMut::reserve</issue_title>
<issue_description>

Integer overflow in BytesMut::reserve

Details
Package bytes
Version 1.10.1
URL GHSA-434x-w66g-qw3r
Date 2026-02-03
Patched versions >=1.11.1
Unaffected versions <1.2.1

In the unique reclaim path of BytesMut::reserve, the condition

if v_capacity &gt;= new_cap + offset

uses an unchecked addition. When new_cap + offset overflows usize in release builds, this condition may incorrectly pass, causing self.cap to be set to a value that exceeds the actual allocated capacity. Subsequent APIs such as spare_capacity_mut() then trust this corrupted cap value and may create out-of-bounds slices, leading to UB.

This behavior is observable in release builds (integer overflow wraps), whereas debug builds panic due to overflow checks.

PoC

use bytes::*;

fn main() {
    let mut a = BytesMut::from(&amp;b&quot;hello world&quot;[..]);
    let mut b = a.split_off(5);

    // Ensure b becomes the unique owner of the backing storage
    drop(a);

    // Trigger overflow in new_cap + offset inside reserve
    b.reserve(usize::MAX - 6);

    // This call relies on the corrupted cap and may cause UB &amp; HBO
    b.put_u8(b&#39;h&#39;);
}

Workarounds

Users of BytesMut::reserve are only affected if integer overflow checks are configured to wrap. When integer overflow is configured to panic, this issue does not apply.

See advisory page for additional details.
</issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Co-authored-by: eval-exec <46400566+eval-exec@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix integer overflow in BytesMut::reserve fix: update bytes from 1.10.1 to 1.11.1 (RUSTSEC-2026-0007) Feb 4, 2026
Copilot AI requested a review from eval-exec February 4, 2026 01:53
@driftluo driftluo marked this pull request as ready for review February 4, 2026 02:07
@driftluo driftluo requested a review from a team as a code owner February 4, 2026 02:07
@driftluo driftluo requested review from quake and removed request for a team February 4, 2026 02:07
@driftluo driftluo added this pull request to the merge queue Feb 4, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Feb 4, 2026
@driftluo driftluo added this pull request to the merge queue Feb 4, 2026
github-merge-queue bot pushed a commit that referenced this pull request Feb 4, 2026
### What problem does this PR solve?

Problem Summary:

RUSTSEC-2026-0007: Integer overflow in `BytesMut::reserve` allows
unchecked addition of `new_cap + offset` to wrap in release builds,
corrupting capacity tracking and enabling out-of-bounds memory access.

### What is changed and how it works?

What's Changed:

- Bump `bytes` dependency from `1.10.1` to `1.11.1` in workspace
`Cargo.toml`
- Update `Cargo.lock` to reflect patched version

Version 1.11.1 adds overflow checks to the reserve path, preventing
capacity corruption.

### Related changes

- N/A

### Check List

Tests

- No code

Side effects

- N/A

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>RUSTSEC-2026-0007: Integer overflow in
`BytesMut::reserve`</issue_title>
> <issue_description>
> > Integer overflow in `BytesMut::reserve`
> 
> | Details | |
> | ------------------- | ----------------------------------------------
|
> | Package             | `bytes`                      |
> | Version             | `1.10.1`                   |
> | URL |
[https://github.com/advisories/GHSA-434x-w66g-qw3r](https://github.com/advisories/GHSA-434x-w66g-qw3r)
|
> | Date                | 2026-02-03                         |
> | Patched versions    | `>=1.11.1`                  |
> | Unaffected versions | `<1.2.1`               |
> 
> In the unique reclaim path of `BytesMut::reserve`, the condition
> ```rs
> if v_capacity &gt;= new_cap + offset
> ```
> uses an unchecked addition. When `new_cap + offset` overflows `usize`
in release builds, this condition may incorrectly pass, causing
`self.cap` to be set to a value that exceeds the actual allocated
capacity. Subsequent APIs such as `spare_capacity_mut()` then trust this
corrupted `cap` value and may create out-of-bounds slices, leading to
UB.
> 
> This behavior is observable in release builds (integer overflow
wraps), whereas debug builds panic due to overflow checks.
> 
> ## PoC
> 
> ```rs
> use bytes::*;
> 
> fn main() {
>     let mut a = BytesMut::from(&amp;b&quot;hello world&quot;[..]);
>     let mut b = a.split_off(5);
> 
>     // Ensure b becomes the unique owner of the backing storage
>     drop(a);
> 
>     // Trigger overflow in new_cap + offset inside reserve
>     b.reserve(usize::MAX - 6);
> 
> // This call relies on the corrupted cap and may cause UB &amp; HBO
>     b.put_u8(b&#39;h&#39;);
> }
> ```
> 
> # Workarounds
> 
> Users of `BytesMut::reserve` are only affected if integer overflow
checks are configured to wrap. When integer overflow is configured to
panic, this issue does not apply.
> 
> See [advisory
page](https://rustsec.org/advisories/RUSTSEC-2026-0007.html) for
additional details.
> </issue_description>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> </comments>
> 


</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes #5098

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: eval-exec <46400566+eval-exec@users.noreply.github.com>
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Feb 4, 2026
@driftluo driftluo added this pull request to the merge queue Feb 4, 2026
Merged via the queue into develop with commit 696455d Feb 4, 2026
67 checks passed
@driftluo driftluo deleted the copilot/fix-integer-overflow-bytesmut branch February 4, 2026 12:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RUSTSEC-2026-0007: Integer overflow in BytesMut::reserve

3 participants