Page MenuHomeFreeBSD

pf: Fix unaligned checksum updates
ClosedPublic

Authored by kp on Dec 21 2020, 9:09 AM.
Tags
None
Referenced Files
F170801471: D27696.id.diff
Sun, Sep 6, 5:37 PM
F170782719: D27696.diff
Sun, Sep 6, 2:44 PM
F170775633: D27696.id.diff
Sun, Sep 6, 1:52 PM
Unknown Object (File)
Sun, Sep 6, 5:35 AM
Unknown Object (File)
Sun, Sep 6, 2:04 AM
Unknown Object (File)
Sun, Sep 6, 1:44 AM
Unknown Object (File)
Sat, Sep 5, 11:32 PM
Unknown Object (File)
Sat, Sep 5, 10:51 AM

Details

Summary

The algorithm we use to update checksums only works correctly if the
updated data is aligned on 16-bit boundaries (relative to the start of
the packet).

Import the OpenBSD fix for this issue.

PR: 240416
Obtained from: OpenBSD

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 35607
Build 32507: arc lint + arc unit

Event Timeline

kp requested review of this revision.Dec 21 2020, 9:09 AM

I guess you need a similar dance (for 16-bit) in pf_normalize_tcpopt() when updating the MSS.

Also handle the MSS update case.

This revision is now accepted and ready to land.Dec 21 2020, 11:11 PM

Ensure we actually update the packet, even when checksum flags indicate the checksum doesn't need an update.

This revision now requires review to proceed.Dec 22 2020, 12:00 PM
This revision is now accepted and ready to land.Dec 22 2020, 12:18 PM