Comments (4)
What exactly does "the code that passes the fragments to the parser is broken" mean?
from tempesta.
There was incorrect threatment of SKB's paged fragments. Please see the patch linked above.
from tempesta.
The patch (a461f6b) is right and I'll apply it. However, motivation of the patch and how does it fix the problem is unclear.
skb_frag_address
is defined in include/linux/skbuff.h as
static inline void *skb_frag_address(const skb_frag_t *frag)
{
return page_address(skb_frag_page(frag)) + frag->page_offset;
}
While kmap_atomic
is basically just page_address(page)
(see include/linux/highmem.h). So the patch fixes only the case when frag->page_offset != 0.
Please, recheck the bug with the new master branch and provide better explanation how the patch fixes the problem and/or provide test which reproduces the problem and shows that the problem is gone after the patch.
from tempesta.
In short: yes, that is correct, the patch fixes the problem only when frag->page_offset != 0
.
The patch makes things clearer, cleaner, and shorter, doing the same thing without a chance of making this kind of a bug by using the function that exists specifically for that purpose. As intended, the function takes care of that specific case as well. That was the motivation for this patch, besides making the actual fix for the bug.
I was able to reproduce the problem each and every time by sending an HTTP request over an ethernet link. No specific test is necessary, just need to make sure the skb with received packet consists of multiple parts/fragments. Note that it can be a function of a network driver. Today's network drivers often put IP and MAC headers in the linear part of an skb, and put the rest of packet's data in the fragmented parts. When an skb with the received packet is moved up the network stack, the protocol headers (such as TCP header) are pulled to the linear part of an skb from fragmented parts, and that may (and does) change an offset into a fragmented part that had some data pulled from it.
Current master branch includes this fix. This issue should be closed.
from tempesta.
Related Issues (20)
- Server failover configuration saving error. HOT 3
- Memory leak on test run HOT 1
- Rework the work queue from MPMC to MPSC
- Migrate to Ubuntu 24 LTS
- Headers processing optimization
- Move tls encryption from kernel code to Tempesta FW source code and adjuct TCP window, when we push skb to socket write queue for HTTP1 tls also HOT 2
- Zero 'sent bytes' in access log for non-empty responses HOT 1
- Integrate `checkpatch.pl` to our build/commit pipeline HOT 2
- Crash on malformed server response.
- Edge Side Application Callbacks
- Memory leak found in ping flood
- Kernel BUG in hpack. HOT 1
- Make socket callbacks `sk_fill_write_queue` and `sk_write_xmit` reentable or close connection in case of -ENOMEM HOT 2
- No `POST` processing and subsequent crash HOT 6
- New Let's Encrypt certificate with SHA384 parsing error HOT 2
- BUG at /root/tempesta/tls/x509_crt.c:874 HOT 1
- Hang with use-after-free in tfw_tls_conn_send+0x66 HOT 4
- Installer unable to operate with github
- `SETTINGS_NO_RFC7540_PRIORITIES` and RFC 9218 streams prioritization
- BUG at /root/tempesta/fw/cache.c:2027
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tempesta.