BPF List
 help / color / mirror / Atom feed
* No direct copy from ctx to map possible, why?
@ 2024-04-14 21:34 Fabian Pfitzner
  2024-04-15 16:01 ` Yonghong Song
  2024-04-16  5:12 ` Hengqi Chen
  0 siblings, 2 replies; 9+ messages in thread
From: Fabian Pfitzner @ 2024-04-14 21:34 UTC (permalink / raw)
  To: bpf

Hello,

is there a specific reason why it is not allowed to copy data from ctx 
directly into a map via the bpf_map_update_elem helper?
I develop a XDP program where I need to store incoming packets 
(including the whole payload) into a map in order to buffer them.
I thought I could simply put them into a map via the mentioned helper 
function, but the verifier complains about expecting another type as 
"ctx" (R3 type=ctx expected=fp, pkt, pkt_meta, .....).

I was able to circumvent this error by first putting the packet onto the 
stack (via xdp->data) and then write it into the map.
The only limitation with this is that I cannot store packets larger than 
512 bytes due to the maximum stack size.

I was also able to circumvent this by slicing chunks, that are smaller 
than 512 bytes, out of the packet so that I can use the stack as a 
clipboard before putting them into the map. This is a really ugly 
solution, but I have not found a better one yet.

So my question is: Why does this limitation exist? I am not sure if its 
only related to XDP programs as this restriction is defined inside of 
the bpf_map_update_elem_proto struct (arg3_type restricts this), so I 
think it is a general limitation that affects all program types.

Best regards,
Fabian Pfitzner




^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-04-19  0:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-14 21:34 No direct copy from ctx to map possible, why? Fabian Pfitzner
2024-04-15 16:01 ` Yonghong Song
2024-04-15 20:25   ` Fabian Pfitzner
2024-04-16  3:22     ` Yonghong Song
2024-04-17 19:38       ` Fabian Pfitzner
2024-04-18  0:09         ` Yonghong Song
2024-04-19  0:20         ` Andrii Nakryiko
2024-04-16  5:12 ` Hengqi Chen
2024-04-17 19:42   ` Fabian Pfitzner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox