From: Alexei Starovoitov alexei.starovoitov@gmail.com Date: Thu, 23 Jan 2025 21:14:04 -0800
On Wed, Jan 22, 2025 at 10:38 AM Saket Kumar Bhaskar skb99@linux.ibm.com wrote:
For platforms on powerpc architecture with a default page size greater than 4096, there was an inconsistency in fragment size calculation. This caused the BPF selftest xdp_adjust_tail/xdp_adjust_frags_tail_grow to fail on powerpc.
The issue occurred because the fragment buffer size in bpf_prog_test_run_xdp() was set to 4096, while the actual data size in the fragment within the shared skb was checked against PAGE_SIZE (65536 on powerpc) in min_t, causing it to exceed 4096 and be set accordingly. This discrepancy led to an overflow when bpf_xdp_frags_increase_tail() checked for tailroom, as skb_frag_size(frag) could be greater than rxq->frag_size (when PAGE_SIZE > 4096).
This commit updates the page size references to 4096 to ensure consistency and prevent overflow issues in fragment size calculations.
This isn't right. Please fix the selftest instead.
It's not _that_ easy, I had tried in the past. Anyway, this patch is *not* a good "solution".
If you (Saket) really want to fix this, both test_run and the selftest must be in sync, so you need to (both are arch-dependent): 1) get the correct PAGE_SIZE; 2) calculate the correct tailroom in userspace (which depends on sizeof(shinfo) and SKB_DATA_ALIGN -> SMP_CACHE_BYTES).
pw-bot: cr
Thanks, Olek