Bug 216259

Summary: Setting SO_OOBINLINE after receiving OOB data over TCP can cause that data to be received again
Product: Networking Reporter: Zebediah Figura (zfigura)
Component: IPV4Assignee: Stephen Hemminger (stephen)
Status: NEW ---    
Severity: low    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 5.17.0 Subsystem:
Regression: No Bisected commit-id:
Attachments: test program demonstrating the bug

Description Zebediah Figura 2022-07-18 17:34:38 UTC
Created attachment 301451 [details]
test program demonstrating the bug

I'm not sure if this is a bug—I haven't fully read specs and perhaps it's within spec for OOBINLINE or TCP or something—but it certainly looks like one.

The attached test program demonstrates the bug, and probably more clearly than any verbal description. It sends and receives a byte of OOB data over a (loopback) socket pair, sets the receiving socket to SO_OOBINLINE, and then calls recv() again (without MSG_OOB). This results in the same byte being received again.

If on the other hand a recv() call is made before setting SO_OOBINLINE [guarded out with if(0)], the offending call does not succeed, which heightens my suspicion that this is a bug.
Comment 1 Zebediah Figura 2022-07-18 17:40:15 UTC
FWIW, I don't think this is a high priority. It's something that came up while trying to write Wine unit tests, so it certainly isn't known to affect any real applications.