Bug 42699 - vmsplice() appears to be returning to caller while buffers are still in use
Summary: vmsplice() appears to be returning to caller while buffers are still in use
Status: NEW
Alias: None
Product: Networking
Classification: Unclassified
Component: IPV4 (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: Stephen Hemminger
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-31 02:26 UTC by David VomLehn
Modified: 2016-11-09 19:32 UTC (History)
1 user (show)

See Also:
Kernel Version: 2.6.38.6-26.rc1.fc15.i686
Subsystem:
Regression: No
Bisected commit-id:


Attachments
User space code demonstrating the issue into a loopback scenario (12.55 KB, application/x-download)
2012-01-31 02:26 UTC, David VomLehn
Details

Description David VomLehn 2012-01-31 02:26:27 UTC
Created attachment 72238 [details]
User space code demonstrating the issue into a loopback scenario

This problem appears to occur both with sending packets over a network and with the loopback device, though the specifics vary slightly. The simplest case is a loopback. When task A sends a big buffer to task B, an sk_buff will be set up with the mapped buffer as sk_bufs data. The problem is that vmsplice appears to return to task A at that point, even though task B may not have read any or all of the data. When task A writes to the buffer, it overwrites the data being sent to task B, even though task B has not read the data. Thus, task B gets corrupted data.

The scenario with TCP appears similar, but can be worse because of the requirement to keep the buffer around for quite a while in order to retransmitted if necessary.

So long as task A is writing data into the buffer area intended for task B, this is only a data corruption issue. This may not be the case, however. Should task A write data intended for some other use into the memory that had been used for the buffer, that data can leak to task B.

One possible fix would be to add the ability to support sk_buff- or page-specific notifiers to handle buffer freeing, rather like Ian Campbell's recent proposal (http://lwn.net/Articles/474791/)

Note You need to log in before you can comment on or make changes to this bug.