net/bpf/test_run.c | 7 +++++++ 1 file changed, 7 insertions(+)
From: Feng Yang <yangfeng@kylinos.cn>
The bpf_lwt_xmit_push_encap helper needs to access skb_dst(skb)->dev to
calculate the needed headroom:
err = skb_cow_head(skb,
len + LL_RESERVED_SPACE(skb_dst(skb)->dev));
But skb->_skb_refdst may not be initialized when the skb is set up by
bpf_prog_test_run_skb function. Executing bpf_lwt_push_ip_encap function
in this scenario will trigger null pointer dereference, causing a kernel
crash as Yinhao reported:
[ 105.186365] BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 105.186382] #PF: supervisor read access in kernel mode
[ 105.186388] #PF: error_code(0x0000) - not-present page
[ 105.186393] PGD 121d3d067 P4D 121d3d067 PUD 106c83067 PMD 0
[ 105.186404] Oops: 0000 [#1] PREEMPT SMP NOPTI
[ 105.186412] CPU: 3 PID: 3250 Comm: poc Kdump: loaded Not tainted 6.19.0-rc5 #1
[ 105.186423] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 105.186427] RIP: 0010:bpf_lwt_push_ip_encap+0x1eb/0x520
[ 105.186443] Code: 0f 84 de 01 00 00 0f b7 4a 04 66 85 c9 0f 85 47 01 00 00 31 c0 5b 5d 41 5c 41 5d 41 5e c3 cc cc cc cc 48 8b 73 58 48 83 e6 fe <48> 8b 36 0f b7 be ec 00 00 00 0f b7 b6 e6 00 00 00 01 fe 83 e6 f0
[ 105.186449] RSP: 0018:ffffbb0e0387bc50 EFLAGS: 00010246
[ 105.186455] RAX: 000000000000004e RBX: ffff94c74e036500 RCX: ffff94c74874da00
[ 105.186460] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff94c74e036500
[ 105.186463] RBP: 0000000000000001 R08: 0000000000000002 R09: 0000000000000000
[ 105.186467] R10: ffffbb0e0387bd50 R11: 0000000000000000 R12: ffffbb0e0387bc98
[ 105.186471] R13: 0000000000000014 R14: 0000000000000000 R15: 0000000000000002
[ 105.186484] FS: 00007f166aa4d680(0000) GS:ffff94c8b7780000(0000) knlGS:0000000000000000
[ 105.186490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 105.186494] CR2: 0000000000000000 CR3: 000000015eade001 CR4: 0000000000770ee0
[ 105.186499] PKRU: 55555554
[ 105.186502] Call Trace:
[ 105.186507] <TASK>
[ 105.186513] bpf_lwt_xmit_push_encap+0x2b/0x40
[ 105.186522] bpf_prog_a75eaad51e517912+0x41/0x49
[ 105.186536] ? kvm_clock_get_cycles+0x18/0x30
[ 105.186547] ? ktime_get+0x3c/0xa0
[ 105.186554] bpf_test_run+0x195/0x320
[ 105.186563] ? bpf_test_run+0x10f/0x320
[ 105.186579] bpf_prog_test_run_skb+0x2f5/0x4f0
[ 105.186590] __sys_bpf+0x69c/0xa40
[ 105.186603] __x64_sys_bpf+0x1e/0x30
[ 105.186611] do_syscall_64+0x59/0x110
[ 105.186620] entry_SYSCALL_64_after_hwframe+0x76/0xe0
[ 105.186649] RIP: 0033:0x7f166a97455d
Temporarily add the setting of skb->_skb_refdst before bpf_test_run to resolve the issue.
Fixes: 52f278774e79 ("bpf: implement BPF_LWT_ENCAP_IP mode in bpf_lwt_push_encap")
Reported-by: Yinhao Hu <dddddd@hust.edu.cn>
Reported-by: Kaiyan Mei <M202472210@hust.edu.cn>
Signed-off-by: Yun Lu <luyun@kylinos.cn>
Signed-off-by: Feng Yang <yangfeng@kylinos.cn>
---
Changes in v2:
- Link to v1: https://lore.kernel.org/all/20260127084520.13890-1-luyun_611@163.com/
---
net/bpf/test_run.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c
index 178c4738e63b..c05b31cd1741 100644
--- a/net/bpf/test_run.c
+++ b/net/bpf/test_run.c
@@ -982,6 +982,7 @@ static struct proto bpf_dummy_proto = {
.obj_size = sizeof(struct sock),
};
+struct dst_entry bpf_test_run_lwt_xmit_dst;
int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
union bpf_attr __user *uattr)
{
@@ -1156,7 +1157,13 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
skb->ip_summed = CHECKSUM_COMPLETE;
}
+ if (prog->type == BPF_PROG_TYPE_LWT_XMIT) {
+ bpf_test_run_lwt_xmit_dst.dev = dev;
+ skb_dst_set(skb, &bpf_test_run_lwt_xmit_dst);
+ }
ret = bpf_test_run(prog, skb, repeat, &retval, &duration, false);
+ if (prog->type == BPF_PROG_TYPE_LWT_XMIT)
+ skb_dst_set(skb, NULL);
if (ret)
goto out;
if (!is_l2) {
--
2.43.0
Hi Feng,
kernel test robot noticed the following build warnings:
[auto build test WARNING on bpf-next/net]
[also build test WARNING on bpf-next/master bpf/master net-next/main net/main linus/master v6.19-rc8 next-20260205]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Feng-Yang/bpf-test_run-Fix-the-null-pointer-dereference-issue-in-bpf_lwt_xmit_push_encap/20260205-172527
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git net
patch link: https://lore.kernel.org/r/20260205092227.126665-1-yangfeng59949%40163.com
patch subject: [PATCH v2] bpf: test_run: Fix the null pointer dereference issue in bpf_lwt_xmit_push_encap
config: hexagon-randconfig-r132-20260205 (https://download.01.org/0day-ci/archive/20260206/202602060101.PefMJeTB-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260206/202602060101.PefMJeTB-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602060101.PefMJeTB-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
net/bpf/test_run.c:617:18: sparse: sparse: symbol 'bpf_kfunc_call_test_release_dtor' was not declared. Should it be static?
net/bpf/test_run.c:627:18: sparse: sparse: symbol 'bpf_kfunc_call_memb_release_dtor' was not declared. Should it be static?
>> net/bpf/test_run.c:984:18: sparse: sparse: symbol 'bpf_test_run_lwt_xmit_dst' was not declared. Should it be static?
vim +/bpf_test_run_lwt_xmit_dst +984 net/bpf/test_run.c
983
> 984 struct dst_entry bpf_test_run_lwt_xmit_dst;
985 int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
986 union bpf_attr __user *uattr)
987 {
988 bool is_l2 = false, is_direct_pkt_access = false, is_lwt = false;
989 u32 tailroom = SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
990 struct net *net = current->nsproxy->net_ns;
991 struct net_device *dev = net->loopback_dev;
992 u32 headroom = NET_SKB_PAD + NET_IP_ALIGN;
993 u32 linear_sz = kattr->test.data_size_in;
994 u32 repeat = kattr->test.repeat;
995 struct __sk_buff *ctx = NULL;
996 struct sk_buff *skb = NULL;
997 struct sock *sk = NULL;
998 u32 retval, duration;
999 int hh_len = ETH_HLEN;
1000 void *data = NULL;
1001 int ret;
1002
1003 if ((kattr->test.flags & ~BPF_F_TEST_SKB_CHECKSUM_COMPLETE) ||
1004 kattr->test.cpu || kattr->test.batch_size)
1005 return -EINVAL;
1006
1007 if (kattr->test.data_size_in < ETH_HLEN)
1008 return -EINVAL;
1009
1010 switch (prog->type) {
1011 case BPF_PROG_TYPE_SCHED_CLS:
1012 case BPF_PROG_TYPE_SCHED_ACT:
1013 is_direct_pkt_access = true;
1014 is_l2 = true;
1015 break;
1016 case BPF_PROG_TYPE_LWT_IN:
1017 case BPF_PROG_TYPE_LWT_OUT:
1018 case BPF_PROG_TYPE_LWT_XMIT:
1019 is_lwt = true;
1020 fallthrough;
1021 case BPF_PROG_TYPE_CGROUP_SKB:
1022 is_direct_pkt_access = true;
1023 break;
1024 default:
1025 break;
1026 }
1027
1028 ctx = bpf_ctx_init(kattr, sizeof(struct __sk_buff));
1029 if (IS_ERR(ctx))
1030 return PTR_ERR(ctx);
1031
1032 if (ctx) {
1033 if (ctx->data_end > kattr->test.data_size_in || ctx->data || ctx->data_meta) {
1034 ret = -EINVAL;
1035 goto out;
1036 }
1037 if (ctx->data_end) {
1038 /* Non-linear LWT test_run is unsupported for now. */
1039 if (is_lwt) {
1040 ret = -EINVAL;
1041 goto out;
1042 }
1043 linear_sz = max(ETH_HLEN, ctx->data_end);
1044 }
1045 }
1046
1047 linear_sz = min_t(u32, linear_sz, PAGE_SIZE - headroom - tailroom);
1048
1049 data = bpf_test_init(kattr, linear_sz, linear_sz, headroom, tailroom);
1050 if (IS_ERR(data)) {
1051 ret = PTR_ERR(data);
1052 data = NULL;
1053 goto out;
1054 }
1055
1056 sk = sk_alloc(net, AF_UNSPEC, GFP_USER, &bpf_dummy_proto, 1);
1057 if (!sk) {
1058 ret = -ENOMEM;
1059 goto out;
1060 }
1061 sock_init_data(NULL, sk);
1062
1063 skb = slab_build_skb(data);
1064 if (!skb) {
1065 ret = -ENOMEM;
1066 goto out;
1067 }
1068 skb->sk = sk;
1069
1070 data = NULL; /* data released via kfree_skb */
1071
1072 skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
1073 __skb_put(skb, linear_sz);
1074
1075 if (unlikely(kattr->test.data_size_in > linear_sz)) {
1076 void __user *data_in = u64_to_user_ptr(kattr->test.data_in);
1077 struct skb_shared_info *sinfo = skb_shinfo(skb);
1078 u32 copied = linear_sz;
1079
1080 while (copied < kattr->test.data_size_in) {
1081 struct page *page;
1082 u32 data_len;
1083
1084 if (sinfo->nr_frags == MAX_SKB_FRAGS) {
1085 ret = -ENOMEM;
1086 goto out;
1087 }
1088
1089 page = alloc_page(GFP_KERNEL);
1090 if (!page) {
1091 ret = -ENOMEM;
1092 goto out;
1093 }
1094
1095 data_len = min_t(u32, kattr->test.data_size_in - copied,
1096 PAGE_SIZE);
1097 skb_fill_page_desc(skb, sinfo->nr_frags, page, 0, data_len);
1098
1099 if (copy_from_user(page_address(page), data_in + copied,
1100 data_len)) {
1101 ret = -EFAULT;
1102 goto out;
1103 }
1104 skb->data_len += data_len;
1105 skb->truesize += PAGE_SIZE;
1106 skb->len += data_len;
1107 copied += data_len;
1108 }
1109 }
1110
1111 if (ctx && ctx->ifindex > 1) {
1112 dev = dev_get_by_index(net, ctx->ifindex);
1113 if (!dev) {
1114 ret = -ENODEV;
1115 goto out;
1116 }
1117 }
1118 skb->protocol = eth_type_trans(skb, dev);
1119 skb_reset_network_header(skb);
1120
1121 switch (skb->protocol) {
1122 case htons(ETH_P_IP):
1123 sk->sk_family = AF_INET;
1124 if (sizeof(struct iphdr) <= skb_headlen(skb)) {
1125 sk->sk_rcv_saddr = ip_hdr(skb)->saddr;
1126 sk->sk_daddr = ip_hdr(skb)->daddr;
1127 }
1128 break;
1129 #if IS_ENABLED(CONFIG_IPV6)
1130 case htons(ETH_P_IPV6):
1131 sk->sk_family = AF_INET6;
1132 if (sizeof(struct ipv6hdr) <= skb_headlen(skb)) {
1133 sk->sk_v6_rcv_saddr = ipv6_hdr(skb)->saddr;
1134 sk->sk_v6_daddr = ipv6_hdr(skb)->daddr;
1135 }
1136 break;
1137 #endif
1138 default:
1139 break;
1140 }
1141
1142 if (is_l2)
1143 __skb_push(skb, hh_len);
1144 if (is_direct_pkt_access)
1145 bpf_compute_data_pointers(skb);
1146
1147 ret = convert___skb_to_skb(skb, ctx);
1148 if (ret)
1149 goto out;
1150
1151 if (kattr->test.flags & BPF_F_TEST_SKB_CHECKSUM_COMPLETE) {
1152 const int off = skb_network_offset(skb);
1153 int len = skb->len - off;
1154
1155 skb->csum = skb_checksum(skb, off, len, 0);
1156 skb->ip_summed = CHECKSUM_COMPLETE;
1157 }
1158
1159 if (prog->type == BPF_PROG_TYPE_LWT_XMIT) {
1160 bpf_test_run_lwt_xmit_dst.dev = dev;
1161 skb_dst_set(skb, &bpf_test_run_lwt_xmit_dst);
1162 }
1163 ret = bpf_test_run(prog, skb, repeat, &retval, &duration, false);
1164 if (prog->type == BPF_PROG_TYPE_LWT_XMIT)
1165 skb_dst_set(skb, NULL);
1166 if (ret)
1167 goto out;
1168 if (!is_l2) {
1169 if (skb_headroom(skb) < hh_len) {
1170 int nhead = HH_DATA_ALIGN(hh_len - skb_headroom(skb));
1171
1172 if (pskb_expand_head(skb, nhead, 0, GFP_USER)) {
1173 ret = -ENOMEM;
1174 goto out;
1175 }
1176 }
1177 memset(__skb_push(skb, hh_len), 0, hh_len);
1178 }
1179
1180 if (kattr->test.flags & BPF_F_TEST_SKB_CHECKSUM_COMPLETE) {
1181 const int off = skb_network_offset(skb);
1182 int len = skb->len - off;
1183 __wsum csum;
1184
1185 csum = skb_checksum(skb, off, len, 0);
1186
1187 if (csum_fold(skb->csum) != csum_fold(csum)) {
1188 ret = -EBADMSG;
1189 goto out;
1190 }
1191 }
1192
1193 convert_skb_to___skb(skb, ctx);
1194
1195 if (skb_is_nonlinear(skb))
1196 /* bpf program can never convert linear skb to non-linear */
1197 WARN_ON_ONCE(linear_sz == kattr->test.data_size_in);
1198 ret = bpf_test_finish(kattr, uattr, skb->data, skb_shinfo(skb), skb->len,
1199 skb->data_len, retval, duration);
1200 if (!ret)
1201 ret = bpf_ctx_finish(kattr, uattr, ctx,
1202 sizeof(struct __sk_buff));
1203 out:
1204 if (dev && dev != net->loopback_dev)
1205 dev_put(dev);
1206 kfree_skb(skb);
1207 kfree(data);
1208 if (sk)
1209 sk_free(sk);
1210 kfree(ctx);
1211 return ret;
1212 }
1213
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
syzbot ci has tested the following series [v2] bpf: test_run: Fix the null pointer dereference issue in bpf_lwt_xmit_push_encap https://lore.kernel.org/all/20260205092227.126665-1-yangfeng59949@163.com * [PATCH v2] bpf: test_run: Fix the null pointer dereference issue in bpf_lwt_xmit_push_encap and found the following issues: * WARNING in skb_dst_set * general protection fault in percpu_counter_add_batch * general protection fault in tnl_update_pmtu * general protection fault in xfrm_lookup_with_ifid Full report is available here: https://ci.syzbot.org/series/c278e614-0520-4be1-8e1b-b6ed06beb3cd *** WARNING in skb_dst_set tree: bpf-next URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git base: 75cd3beb64d0977009e3d1a2d0c03715d3e5e156 arch: amd64 compiler: Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50), Debian LLD 21.1.8 config: https://ci.syzbot.org/builds/8d5f34b6-d9df-4c4a-9d51-7f4f910f379a/config C repro: https://ci.syzbot.org/findings/9f4f73a7-44d6-4d8b-8fed-818bb8ca054d/c_repro syz repro: https://ci.syzbot.org/findings/9f4f73a7-44d6-4d8b-8fed-818bb8ca054d/syz_repro ------------[ cut here ]------------ (skb->_skb_refdst & ~(1UL)) && !(skb->_skb_refdst & 1UL) WARNING: ./include/linux/skbuff.h:1171 at skb_dst_check_unset include/linux/skbuff.h:1170 [inline], CPU#1: syz.0.17/5978 WARNING: ./include/linux/skbuff.h:1171 at skb_dst_set+0xfd/0x140 include/linux/skbuff.h:1217, CPU#1: syz.0.17/5978 Modules linked in: CPU: 1 UID: 0 PID: 5978 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:skb_dst_check_unset include/linux/skbuff.h:1170 [inline] RIP: 0010:skb_dst_set+0xfd/0x140 include/linux/skbuff.h:1217 Code: 2d 00 00 74 08 4c 89 f7 e8 80 13 98 f8 49 89 1e 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc cc e8 64 5c 30 f8 90 <0f> 0b 90 e9 6d ff ff ff 44 89 e1 80 e1 07 38 c1 7c 8f be 04 00 00 RSP: 0018:ffffc90005367b58 EFLAGS: 00010293 RAX: ffffffff89923bbc RBX: dffffc0000000001 RCX: ffff8881037d8000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 RBP: 1ffff1102edaad5b R08: ffffffff8fced777 R09: 1ffffffff1f9daee R10: dffffc0000000000 R11: ffffffff817422b0 R12: 0000000000000000 R13: ffff888176d56b01 R14: ffff888176d56ad8 R15: ffff888176d56a80 FS: 0000555564e8a500(0000) GS:ffff8882a9928000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000001b2fe63fff CR3: 000000016852c000 CR4: 00000000000006f0 Call Trace: <TASK> bpf_prog_test_run_skb+0xe46/0x1ea0 net/bpf/test_run.c:1166 bpf_prog_test_run+0x2c7/0x340 kernel/bpf/syscall.c:4714 __sys_bpf+0x643/0x950 kernel/bpf/syscall.c:6236 __do_sys_bpf kernel/bpf/syscall.c:6331 [inline] __se_sys_bpf kernel/bpf/syscall.c:6329 [inline] __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:6329 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7f51a119acb9 Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fff3a40e428 EFLAGS: 00000246 ORIG_RAX: 0000000000000141 RAX: ffffffffffffffda RBX: 00007f51a1415fa0 RCX: 00007f51a119acb9 RDX: 0000000000000050 RSI: 00002000000003c0 RDI: 000000000000000a RBP: 00007f51a1208bf7 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007f51a1415fac R14: 00007f51a1415fa0 R15: 00007f51a1415fa0 </TASK> *** general protection fault in percpu_counter_add_batch tree: bpf-next URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git base: 75cd3beb64d0977009e3d1a2d0c03715d3e5e156 arch: amd64 compiler: Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50), Debian LLD 21.1.8 config: https://ci.syzbot.org/builds/8d5f34b6-d9df-4c4a-9d51-7f4f910f379a/config C repro: https://ci.syzbot.org/findings/f58ed194-db04-464a-95de-a6d6cc45527a/c_repro syz repro: https://ci.syzbot.org/findings/f58ed194-db04-464a-95de-a6d6cc45527a/syz_repro Oops: general protection fault, probably for non-canonical address 0xdffffc000000001b: 0000 [#1] SMP KASAN PTI KASAN: null-ptr-deref in range [0x00000000000000d8-0x00000000000000df] CPU: 1 UID: 0 PID: 5976 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:percpu_counter_add_batch+0x3e/0x1d0 lib/percpu_counter.c:98 Code: d4 49 89 f5 48 89 fb 49 bf 00 00 00 00 00 fc ff df e8 e6 76 f2 fc 48 89 5c 24 10 4c 8d 73 58 4c 89 f0 48 c1 e8 03 48 89 04 24 <42> 80 3c 38 00 74 08 4c 89 f7 e8 d3 2c 5a fd 49 8b 06 65 8b 28 41 RSP: 0018:ffffc90003b37778 EFLAGS: 00010206 RAX: 000000000000001b RBX: 0000000000000080 RCX: ffff888115b8ba80 RDX: 0000000000000000 RSI: ffffffffffffffff RDI: 0000000000000080 RBP: 0000000000000000 R08: 0000000000000003 R09: 0000000000000004 R10: dffffc0000000000 R11: fffff52000766ee4 R12: 0000000000000020 R13: ffffffffffffffff R14: 00000000000000d8 R15: dffffc0000000000 FS: 000055555baf2500(0000) GS:ffff8882a9928000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007ffc74af2e38 CR3: 0000000115cec000 CR4: 00000000000006f0 Call Trace: <TASK> dst_entries_add include/net/dst_ops.h:59 [inline] dst_count_dec net/core/dst.c:162 [inline] dst_release+0x126/0x1b0 net/core/dst.c:176 refdst_drop include/net/dst.h:266 [inline] skb_dst_drop include/net/dst.h:278 [inline] ____bpf_skb_set_tunnel_key net/core/filter.c:4867 [inline] bpf_skb_set_tunnel_key+0x239/0xa30 net/core/filter.c:4835 bpf_prog_adb554717e5d6596+0x4f/0x5c bpf_dispatcher_nop_func include/linux/bpf.h:1402 [inline] __bpf_prog_run include/linux/filter.h:723 [inline] bpf_prog_run include/linux/filter.h:730 [inline] bpf_test_run+0x354/0x830 net/bpf/test_run.c:423 bpf_prog_test_run_skb+0xe02/0x1ea0 net/bpf/test_run.c:1164 bpf_prog_test_run+0x2c7/0x340 kernel/bpf/syscall.c:4714 __sys_bpf+0x643/0x950 kernel/bpf/syscall.c:6236 __do_sys_bpf kernel/bpf/syscall.c:6331 [inline] __se_sys_bpf kernel/bpf/syscall.c:6329 [inline] __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:6329 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7fca1679acb9 Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007ffdef1739c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000141 RAX: ffffffffffffffda RBX: 00007fca16a15fa0 RCX: 00007fca1679acb9 RDX: 0000000000000050 RSI: 0000200000000d80 RDI: 000000000000000a RBP: 00007fca16808bf7 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007fca16a15fac R14: 00007fca16a15fa0 R15: 00007fca16a15fa0 </TASK> Modules linked in: ---[ end trace 0000000000000000 ]--- RIP: 0010:percpu_counter_add_batch+0x3e/0x1d0 lib/percpu_counter.c:98 Code: d4 49 89 f5 48 89 fb 49 bf 00 00 00 00 00 fc ff df e8 e6 76 f2 fc 48 89 5c 24 10 4c 8d 73 58 4c 89 f0 48 c1 e8 03 48 89 04 24 <42> 80 3c 38 00 74 08 4c 89 f7 e8 d3 2c 5a fd 49 8b 06 65 8b 28 41 RSP: 0018:ffffc90003b37778 EFLAGS: 00010206 RAX: 000000000000001b RBX: 0000000000000080 RCX: ffff888115b8ba80 RDX: 0000000000000000 RSI: ffffffffffffffff RDI: 0000000000000080 RBP: 0000000000000000 R08: 0000000000000003 R09: 0000000000000004 R10: dffffc0000000000 R11: fffff52000766ee4 R12: 0000000000000020 R13: ffffffffffffffff R14: 00000000000000d8 R15: dffffc0000000000 FS: 000055555baf2500(0000) GS:ffff8882a9928000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007ffc74af2e38 CR3: 0000000115cec000 CR4: 00000000000006f0 ---------------- Code disassembly (best guess), 1 bytes skipped: 0: 49 89 f5 mov %rsi,%r13 3: 48 89 fb mov %rdi,%rbx 6: 49 bf 00 00 00 00 00 movabs $0xdffffc0000000000,%r15 d: fc ff df 10: e8 e6 76 f2 fc call 0xfcf276fb 15: 48 89 5c 24 10 mov %rbx,0x10(%rsp) 1a: 4c 8d 73 58 lea 0x58(%rbx),%r14 1e: 4c 89 f0 mov %r14,%rax 21: 48 c1 e8 03 shr $0x3,%rax 25: 48 89 04 24 mov %rax,(%rsp) * 29: 42 80 3c 38 00 cmpb $0x0,(%rax,%r15,1) <-- trapping instruction 2e: 74 08 je 0x38 30: 4c 89 f7 mov %r14,%rdi 33: e8 d3 2c 5a fd call 0xfd5a2d0b 38: 49 8b 06 mov (%r14),%rax 3b: 65 8b 28 mov %gs:(%rax),%ebp 3e: 41 rex.B *** general protection fault in tnl_update_pmtu tree: bpf-next URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git base: 75cd3beb64d0977009e3d1a2d0c03715d3e5e156 arch: amd64 compiler: Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50), Debian LLD 21.1.8 config: https://ci.syzbot.org/builds/8d5f34b6-d9df-4c4a-9d51-7f4f910f379a/config C repro: https://ci.syzbot.org/findings/2b87e46f-6cd5-4189-a1f4-896ea63e96a0/c_repro syz repro: https://ci.syzbot.org/findings/2b87e46f-6cd5-4189-a1f4-896ea63e96a0/syz_repro Oops: general protection fault, probably for non-canonical address 0xdffffc000000000a: 0000 [#1] SMP KASAN PTI KASAN: null-ptr-deref in range [0x0000000000000050-0x0000000000000057] CPU: 0 UID: 0 PID: 5994 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:skb_dst_update_pmtu_no_confirm include/net/dst.h:565 [inline] RIP: 0010:tnl_update_pmtu+0x52b/0x1190 net/ipv4/ip_tunnel.c:533 Code: c1 e8 03 42 80 3c 38 00 74 08 48 89 df e8 0d 3a 2a f8 4c 8b 3b 49 83 c7 50 4c 89 f8 48 c1 e8 03 48 b9 00 00 00 00 00 fc ff df <80> 3c 08 00 74 08 4c 89 ff e8 e7 39 2a f8 4d 8b 3f 4d 85 ff 8b 5c RSP: 0018:ffffc90004ef6f68 EFLAGS: 00010206 RAX: 000000000000000a RBX: ffffffff9a2dcec8 RCX: dffffc0000000000 RDX: 0000000000000000 RSI: ffffffff9a2dcec0 RDI: 0000000000000000 RBP: ffffffff9a2dcec0 R08: ffffffff89db11f3 R09: ffffffff8e35a3a0 R10: ffffc90004ef6f20 R11: fffff520009dede6 R12: ffff888112583800 R13: ffff888112583858 R14: 1ffff110224b070b R15: 0000000000000050 FS: 000055557643a500(0000) GS:ffff88818e328000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000001b30363fff CR3: 00000001744e0000 CR4: 00000000000006f0 Call Trace: <TASK> ip_tunnel_xmit+0xd36/0x2430 net/ipv4/ip_tunnel.c:805 __gre_xmit net/ipv4/ip_gre.c:490 [inline] ipgre_xmit+0x8e6/0xc60 net/ipv4/ip_gre.c:694 __netdev_start_xmit include/linux/netdevice.h:5273 [inline] netdev_start_xmit include/linux/netdevice.h:5282 [inline] xmit_one net/core/dev.c:3853 [inline] dev_hard_start_xmit+0x2cd/0x7f0 net/core/dev.c:3869 __dev_queue_xmit+0x14dd/0x32a0 net/core/dev.c:4819 dev_queue_xmit include/linux/netdevice.h:3381 [inline] __bpf_tx_skb+0x18e/0x260 net/core/filter.c:2153 ____bpf_clone_redirect net/core/filter.c:2487 [inline] bpf_clone_redirect+0x313/0x4b0 net/core/filter.c:2450 bpf_prog_885767c90d177146+0x62/0x6b bpf_dispatcher_nop_func include/linux/bpf.h:1402 [inline] __bpf_prog_run include/linux/filter.h:723 [inline] bpf_prog_run include/linux/filter.h:730 [inline] bpf_test_run+0x354/0x830 net/bpf/test_run.c:423 bpf_prog_test_run_skb+0xe02/0x1ea0 net/bpf/test_run.c:1164 bpf_prog_test_run+0x2c7/0x340 kernel/bpf/syscall.c:4714 __sys_bpf+0x643/0x950 kernel/bpf/syscall.c:6236 __do_sys_bpf kernel/bpf/syscall.c:6331 [inline] __se_sys_bpf kernel/bpf/syscall.c:6329 [inline] __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:6329 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7fad0c59acb9 Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007ffe97cab158 EFLAGS: 00000246 ORIG_RAX: 0000000000000141 RAX: ffffffffffffffda RBX: 00007fad0c815fa0 RCX: 00007fad0c59acb9 RDX: 0000000000000028 RSI: 0000200000000080 RDI: 000000000000000a RBP: 00007fad0c608bf7 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007fad0c815fac R14: 00007fad0c815fa0 R15: 00007fad0c815fa0 </TASK> Modules linked in: ---[ end trace 0000000000000000 ]--- RIP: 0010:skb_dst_update_pmtu_no_confirm include/net/dst.h:565 [inline] RIP: 0010:tnl_update_pmtu+0x52b/0x1190 net/ipv4/ip_tunnel.c:533 Code: c1 e8 03 42 80 3c 38 00 74 08 48 89 df e8 0d 3a 2a f8 4c 8b 3b 49 83 c7 50 4c 89 f8 48 c1 e8 03 48 b9 00 00 00 00 00 fc ff df <80> 3c 08 00 74 08 4c 89 ff e8 e7 39 2a f8 4d 8b 3f 4d 85 ff 8b 5c RSP: 0018:ffffc90004ef6f68 EFLAGS: 00010206 RAX: 000000000000000a RBX: ffffffff9a2dcec8 RCX: dffffc0000000000 RDX: 0000000000000000 RSI: ffffffff9a2dcec0 RDI: 0000000000000000 RBP: ffffffff9a2dcec0 R08: ffffffff89db11f3 R09: ffffffff8e35a3a0 R10: ffffc90004ef6f20 R11: fffff520009dede6 R12: ffff888112583800 R13: ffff888112583858 R14: 1ffff110224b070b R15: 0000000000000050 FS: 000055557643a500(0000) GS:ffff88818e328000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000001b30363fff CR3: 00000001744e0000 CR4: 00000000000006f0 ---------------- Code disassembly (best guess): 0: c1 e8 03 shr $0x3,%eax 3: 42 80 3c 38 00 cmpb $0x0,(%rax,%r15,1) 8: 74 08 je 0x12 a: 48 89 df mov %rbx,%rdi d: e8 0d 3a 2a f8 call 0xf82a3a1f 12: 4c 8b 3b mov (%rbx),%r15 15: 49 83 c7 50 add $0x50,%r15 19: 4c 89 f8 mov %r15,%rax 1c: 48 c1 e8 03 shr $0x3,%rax 20: 48 b9 00 00 00 00 00 movabs $0xdffffc0000000000,%rcx 27: fc ff df * 2a: 80 3c 08 00 cmpb $0x0,(%rax,%rcx,1) <-- trapping instruction 2e: 74 08 je 0x38 30: 4c 89 ff mov %r15,%rdi 33: e8 e7 39 2a f8 call 0xf82a3a1f 38: 4d 8b 3f mov (%r15),%r15 3b: 4d 85 ff test %r15,%r15 3e: 8b .byte 0x8b 3f: 5c pop %rsp *** general protection fault in xfrm_lookup_with_ifid tree: bpf-next URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git base: 75cd3beb64d0977009e3d1a2d0c03715d3e5e156 arch: amd64 compiler: Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50), Debian LLD 21.1.8 config: https://ci.syzbot.org/builds/8d5f34b6-d9df-4c4a-9d51-7f4f910f379a/config C repro: https://ci.syzbot.org/findings/5c4a2d70-b003-439e-8039-496b9009f1e9/c_repro syz repro: https://ci.syzbot.org/findings/5c4a2d70-b003-439e-8039-496b9009f1e9/syz_repro Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] SMP KASAN PTI KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007] CPU: 0 UID: 0 PID: 5985 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:xfrm_lookup_with_ifid+0xe1/0x1af0 net/xfrm/xfrm_policy.c:3181 Code: 24 20 4d 8d 66 08 4c 89 e0 48 c1 e8 03 4d 89 ee 42 80 3c 28 00 74 08 4c 89 e7 e8 ba 20 17 f8 4d 8b 24 24 4c 89 e0 48 c1 e8 03 <42> 0f b6 04 30 84 c0 0f 85 94 17 00 00 41 0f b7 04 24 89 44 24 28 RSP: 0018:ffffc90003e96fe0 EFLAGS: 00010246 RAX: 0000000000000000 RBX: ffffc90003e97080 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffc90003e97090 RBP: ffffc90003e970f8 R08: ffffc90003e9708f R09: 0000000000000000 R10: ffffc90003e97080 R11: fffff520007d2e12 R12: 0000000000000000 R13: dffffc0000000000 R14: dffffc0000000000 R15: 0000000000000000 FS: 000055558c0ab500(0000) GS:ffff88818e328000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000001b30363fff CR3: 00000001b9fc8000 CR4: 00000000000006f0 Call Trace: <TASK> xfrm_lookup net/xfrm/xfrm_policy.c:3336 [inline] xfrm_lookup_route+0x3c/0x1c0 net/xfrm/xfrm_policy.c:3347 vti_xmit net/ipv4/ip_vti.c:217 [inline] vti_tunnel_xmit+0x48e/0x18f0 net/ipv4/ip_vti.c:307 __netdev_start_xmit include/linux/netdevice.h:5273 [inline] netdev_start_xmit include/linux/netdevice.h:5282 [inline] xmit_one net/core/dev.c:3853 [inline] dev_hard_start_xmit+0x2cd/0x7f0 net/core/dev.c:3869 __dev_queue_xmit+0x14dd/0x32a0 net/core/dev.c:4819 dev_queue_xmit include/linux/netdevice.h:3381 [inline] __bpf_tx_skb+0x18e/0x260 net/core/filter.c:2153 ____bpf_clone_redirect net/core/filter.c:2487 [inline] bpf_clone_redirect+0x313/0x4b0 net/core/filter.c:2450 bpf_prog_e16758452f539c38+0x5f/0x68 bpf_dispatcher_nop_func include/linux/bpf.h:1402 [inline] __bpf_prog_run include/linux/filter.h:723 [inline] bpf_prog_run include/linux/filter.h:730 [inline] bpf_test_run+0x354/0x830 net/bpf/test_run.c:423 bpf_prog_test_run_skb+0xe02/0x1ea0 net/bpf/test_run.c:1164 bpf_prog_test_run+0x2c7/0x340 kernel/bpf/syscall.c:4714 __sys_bpf+0x643/0x950 kernel/bpf/syscall.c:6236 __do_sys_bpf kernel/bpf/syscall.c:6331 [inline] __se_sys_bpf kernel/bpf/syscall.c:6329 [inline] __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:6329 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7fe30af9acb9 Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fffa3d1a918 EFLAGS: 00000246 ORIG_RAX: 0000000000000141 RAX: ffffffffffffffda RBX: 00007fe30b215fa0 RCX: 00007fe30af9acb9 RDX: 000000000000002c RSI: 0000200000000080 RDI: 000000000000000a RBP: 00007fe30b008bf7 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007fe30b215fac R14: 00007fe30b215fa0 R15: 00007fe30b215fa0 </TASK> Modules linked in: ---[ end trace 0000000000000000 ]--- RIP: 0010:xfrm_lookup_with_ifid+0xe1/0x1af0 net/xfrm/xfrm_policy.c:3181 Code: 24 20 4d 8d 66 08 4c 89 e0 48 c1 e8 03 4d 89 ee 42 80 3c 28 00 74 08 4c 89 e7 e8 ba 20 17 f8 4d 8b 24 24 4c 89 e0 48 c1 e8 03 <42> 0f b6 04 30 84 c0 0f 85 94 17 00 00 41 0f b7 04 24 89 44 24 28 RSP: 0018:ffffc90003e96fe0 EFLAGS: 00010246 RAX: 0000000000000000 RBX: ffffc90003e97080 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffc90003e97090 RBP: ffffc90003e970f8 R08: ffffc90003e9708f R09: 0000000000000000 R10: ffffc90003e97080 R11: fffff520007d2e12 R12: 0000000000000000 R13: dffffc0000000000 R14: dffffc0000000000 R15: 0000000000000000 FS: 000055558c0ab500(0000) GS:ffff88818e328000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000001b30363fff CR3: 00000001b9fc8000 CR4: 00000000000006f0 ---------------- Code disassembly (best guess): 0: 24 20 and $0x20,%al 2: 4d 8d 66 08 lea 0x8(%r14),%r12 6: 4c 89 e0 mov %r12,%rax 9: 48 c1 e8 03 shr $0x3,%rax d: 4d 89 ee mov %r13,%r14 10: 42 80 3c 28 00 cmpb $0x0,(%rax,%r13,1) 15: 74 08 je 0x1f 17: 4c 89 e7 mov %r12,%rdi 1a: e8 ba 20 17 f8 call 0xf81720d9 1f: 4d 8b 24 24 mov (%r12),%r12 23: 4c 89 e0 mov %r12,%rax 26: 48 c1 e8 03 shr $0x3,%rax * 2a: 42 0f b6 04 30 movzbl (%rax,%r14,1),%eax <-- trapping instruction 2f: 84 c0 test %al,%al 31: 0f 85 94 17 00 00 jne 0x17cb 37: 41 0f b7 04 24 movzwl (%r12),%eax 3c: 89 44 24 28 mov %eax,0x28(%rsp) *** If these findings have caused you to resend the series or submit a separate fix, please add the following tag to your commit message: Tested-by: syzbot@syzkaller.appspotmail.com --- This report is generated by a bot. It may contain errors. syzbot ci engineers can be reached at syzkaller@googlegroups.com.
> diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c
> index 178c4738e..c05b31cd1 100644
> --- a/net/bpf/test_run.c
> +++ b/net/bpf/test_run.c
> @@ -982,6 +982,7 @@ static struct proto bpf_dummy_proto = {
> .obj_size = sizeof(struct sock),
> };
>
> +struct dst_entry bpf_test_run_lwt_xmit_dst;
The bpf_test_run_lwt_xmit_dst is a global variable shared by all callers of
bpf_prog_test_run_skb(). If two processes concurrently run LWT_XMIT tests,
could this race?
Process A:
bpf_test_run_lwt_xmit_dst.dev = dev_A;
skb_dst_set(skb_A, &bpf_test_run_lwt_xmit_dst);
Process B preempts and runs:
bpf_test_run_lwt_xmit_dst.dev = dev_B;
skb_dst_set(skb_B, &bpf_test_run_lwt_xmit_dst);
Now Process A resumes but skb_A's dst_entry has dev_B instead of dev_A.
This could lead to wrong headroom calculation in bpf_lwt_push_ip_encap()
via LL_RESERVED_SPACE(skb_dst(skb)->dev).
Would a per-cpu variable or allocating the dst_entry locally avoid this
race condition?
> int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
> union bpf_attr __user *uattr)
> {
[ ... ]
> @@ -1156,7 +1157,13 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
> skb->ip_summed = CHECKSUM_COMPLETE;
> }
>
> + if (prog->type == BPF_PROG_TYPE_LWT_XMIT) {
> + bpf_test_run_lwt_xmit_dst.dev = dev;
> + skb_dst_set(skb, &bpf_test_run_lwt_xmit_dst);
> + }
> ret = bpf_test_run(prog, skb, repeat, &retval, &duration, false);
> + if (prog->type == BPF_PROG_TYPE_LWT_XMIT)
> + skb_dst_set(skb, NULL);
The skb_dst_set() documentation states: "Sets skb dst, assuming a reference
was taken on dst and should be released by skb_dst_drop()". The global
bpf_test_run_lwt_xmit_dst isn't reference counted and wasn't initialized via
dst_init().
When skb_dst_set(skb, NULL) is called, skb_dst_check_unset() will trigger
DEBUG_NET_WARN_ON_ONCE because the dst was set without the SKB_DST_NOREF bit.
Is this the intended behavior, or should skb_dst_set_noref() be used instead
(which would require holding rcu_read_lock)?
---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
CI run summary: https://github.com/kernel-patches/bpf/actions/runs/21706325881
AI-authorship-score: low
AI-authorship-explanation: The commit shows characteristics of human-authored code including real bug reporters, kernel crash stack trace from actual testing, and the self-aware comment Temporarily indicating the author knows this is not an ideal fix.
issues-found: 1
issue-severity-score: low
issue-severity-explanation: Race condition on global dst_entry when concurrent LWT_XMIT tests run, could cause wrong headroom calculation but unlikely to cause crashes in typical usage scenarios.
© 2016 - 2026 Red Hat, Inc.