When TCP over IPv4 via INET6 API, sk->sk_family is AF_INET6, but it is a v4 pkt. inet_csk(sk)->icsk_af_ops is ipv6_mapped and use ip_queue_xmit. The tos sockopt does not work for bpf [get,set]sockopt() helpers.
Changelog: v3 -> v4: * Add 'sk->sk_type != SOCK_RAW && !ipv6_only_sock(sk)' check. * Re-implement test with LLM assistance. * v3: https://lore.kernel.org/all/[email protected]/ v2->v3: * Use sk_is_inet() helper. (Eric Dumazet) * https://lore.kernel.org/bpf/CANn89i+9GmBLCdgsfH=wwe-tyfypio27wonyxaxiu6aobc6...@mail.gmail.com/T/ v1->v2: * Fix compilation error. (kernel test robot) * https://lore.kernel.org/bpf/[email protected]/T/ Leon Hwang (2): bpf: Fix bpf_get/setsockopt to tos for ipv4-mapped ipv6 socket selftests/bpf: Add test to verify the fix for bpf_setsockopt() helper net/core/filter.c | 15 +++- .../selftests/bpf/prog_tests/setget_sockopt.c | 78 +++++++++++++++++++ .../selftests/bpf/progs/setget_sockopt.c | 23 ++++++ 3 files changed, 115 insertions(+), 1 deletion(-) -- 2.54.0

