> > Handling immediate as unsigned is questionable, especially in the
> > BPF_IND case
> > it may produce incorrect results.
> 
> In Classic BPF (cBPF), when the immediate "k" is negative (when cast to 
> signed integer), it is used
> for getting packet metadata (e.g. SKF_AD_VLAN_TAG gets the VLAN ID); 
> otherwise it is considered
> unsigned.

Yes. Since we don't support it, we should probably consider these offsets 
invalid.

And in the BPF_IND case one might be tempted to load end of some packet area in
the register and use negative offsets, we probably should handle it correctly.

> > To make things worse, `__rte_pktmbuf_read` is also buggy when passed
> > very large
> > lengths (again, technically not ARM eBPF fault).
> 
> Are you referring to the potential integer wraparound in the off+len > 
> rte_pktmbuf_pkt_len(m)
> comparison?
> [BZ1724]
> Or some other bug in __rte_pktmbuf_read()?
> 
> [BZ1724]: https://bugs.dpdk.org/show_bug.cgi?id=1724

Technically that one manifested itself in rte_pktmbuf_read (without
underscores), but essentially the root cause is the same. In the eBPF BPF_ABS
case we could potentially rely on `__rte_pktmbuf_read` for refusing to accept
negative values converted to large integers, but due to overflows we cannot.

Reply via email to