Comments (11)
Update: Just built v1.0.0 with the rlimit increased (as a workaround) and it seems to work fine.
from pwru.
@jschwinger233 Mind taking a look?
from pwru.
@kdrag0n @dakehero Please try https://github.com/cilium/pwru/releases/tag/v1.0.2.
from pwru.
v1.0.2 works for me on arm64. Thanks for the quick fix!
from pwru.
v1.0.2 amd64 build also works for me
from pwru.
Thanks for the issue. Does the same appear with v1.0.0?
from pwru.
v1.0.0 seems to get past the filter generation, but fails while attaching kprobes because it doesn't have 5e6011d.
from pwru.
The pwru v1.0.1 amd64 build also has this issue on kernel 5.4
from pwru.
Interesting, if I build v1.0.1 pwru from scratch (Archlinux, LLVM 16, gcc 13), I get it working. But with the released version (built by https://github.com/cilium/pwru/actions/runs/6071926301/job/16470942060, LLVM 13, gcc 12) I'm bumping into the same problem:
> sudo ./pwru 'port 80'
2023/09/05 09:49:58 Failed to inject filter ebpf for kprobe_skb_3: register r8 used twice
from pwru.
Checking out upstream locally and running make local-release
seems fine.
from pwru.
I think it could be caused by wrong registers found for skb->data
and skb->date_end
.
In a good kprobemultipwru_bpfel_x86.o
, we have
; bpf_printk("%d %d", data, data_end);
79: r1 = 16 ll
81: r2 = 6
82: r3 = r9
83: r4 = r8
84: call 6
In a bad one, we have
76: r3 = r8
77: r3 += r6
; void *data_end = skb_head + l4_off + len;
78: r8 += r7
; bpf_printk("%d %d", data, data_end);
79: r1 = 16 ll
81: r2 = 6
82: r4 = r8
83: call 6
In the pwru, the searching for registers is implemented inflexibly:
pwru/internal/libpcap/inject.go
Lines 126 to 145 in 80d7973
So pwru found r8
as both skb->data
and skb->data_end
, which explains error register r8 used twice
from pwru.
Related Issues (20)
- Trace skb with fragments. HOT 1
- Multi-arch container image HOT 3
- Would be nice if probe unloading was faster HOT 6
- Failing to load on bpf-next: calipso_skbuff_delattr: opening perf event: cannot assign requested address HOT 7
- option --filter-trace-tc not support HOT 2
- `cb[]` (array of values) is not printed correctly when dumping the full skb HOT 4
- Support --filter-mark mark/[/mask]
- Processes name stop displaying after some time HOT 6
- build error of "LoadKProbeMultiPWRUWithoutOutputSKB" and so on
- Track kfunc with parameter whose type is struct sock * HOT 3
- --filter-trace-tc option doesn't work with Cilium HOT 7
- Support for Openshift 4.12/13? HOT 1
- CPU utilization HOT 1
- Getting errors HOT 1
- CI flake: Test pcap filter using stack
- CI flake: Test --filter-ifname
- Bug: program kprobe_skb_2: load program: permission denied HOT 2
- invalid go version '1.21.0': must match format 1.23 HOT 1
- unrecognized command line option '-m64'
- Compilation issue (Invalid usage of the XADD return value)
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 pwru.