Skip to content

Commit 43bc42f

Browse files
xabrouckolsajiri
authored andcommitted
bpf: Fix CO-RE issue with SKB extensions when CONFIG_XFRM=n
CO-RE relocation fails when CONFIG_XFRM is disabled because SKB_EXT_SEC_PATH may be undefined. Use bpf_core_enum_value() instead of hardcoded values and replace probe_read() with bpf_core_read() for proper CO-RE behavior. Signed-off-by: Xavier Brouckaert <[email protected]>
1 parent 4fec43a commit 43bc42f

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

bpf/process/types/skb.h

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,22 +184,26 @@ set_event_from_skb(struct skb_type *event, struct sk_buff *skb)
184184
struct sec_path *sp;
185185
struct skb_ext *ext;
186186
u64 offset;
187+
int sec_path_id;
187188

188-
#define SKB_EXT_SEC_PATH 1 // TBD do this with BTF
189-
probe_read(&ext, sizeof(ext), _(&skb->extensions));
189+
if (!bpf_core_enum_value_exists(enum skb_ext_id,
190+
SKB_EXT_SEC_PATH))
191+
return 0;
192+
sec_path_id = bpf_core_enum_value(enum skb_ext_id,
193+
SKB_EXT_SEC_PATH);
194+
195+
bpf_core_read(&ext, sizeof(ext), &skb->extensions);
190196
if (ext) {
191-
probe_read(&offset, sizeof(offset),
192-
_(&ext->offset[SKB_EXT_SEC_PATH]));
197+
bpf_core_read(&offset, sizeof(offset),
198+
&ext->offset[sec_path_id]);
193199
sp = (void *)ext + (offset << 3);
194-
195-
probe_read(&event->secpath_len,
196-
sizeof(event->secpath_len),
197-
_(&sp->len));
198-
probe_read(&event->secpath_olen,
199-
sizeof(event->secpath_olen),
200-
_(&sp->olen));
200+
bpf_core_read(&event->secpath_len,
201+
sizeof(event->secpath_len), &sp->len);
202+
bpf_core_read(&event->secpath_olen,
203+
sizeof(event->secpath_olen), &sp->olen);
201204
}
202205
}
206+
203207
return 0;
204208
}
205209
#endif // __SKB_H__

0 commit comments

Comments
 (0)