Skip to content

Commit 8b9aaaf

Browse files
q2venKernel Patches Daemon
authored andcommitted
bpf: Set -ENOMEM to err in bpf_int_jit_compile().
syzkaller reported a splat below. [0] It always followed another splat by fault injection in bpf_int_jit_compile(). [1] Instead of proceeding with __bpf_prog_ret0_warn() and seeing a splat later, let's return -ENOMEM to userspace. [0]: WARNING: CPU: 1 PID: 36 at kernel/bpf/core.c:2357 __bpf_prog_ret0_warn+0xa/0x10 kernel/bpf/core.c:2357 Modules linked in: CPU: 1 UID: 0 PID: 36 Comm: kworker/1:1 Not tainted 6.14.0-13344-ga9843689e2de #28 PREEMPT(voluntary) 167b7ecb8f281ed56016416cdf1d8bb342db88fc Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014 Workqueue: mld mld_ifc_work RIP: 0010:__bpf_prog_ret0_warn+0xa/0x10 kernel/bpf/core.c:2357 Code: ff eb 84 e8 b8 cf ee ff e9 7a ff ff ff e8 ae cf ee ff e9 70 ff ff ff 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa e8 97 cf ee ff 90 <0f> 0b 90 31 c0 c3 f3 0f 1e fa 55 48 89 e5 41 57 41 56 41 55 41 54 RSP: 0000:ffa0000000267050 EFLAGS: 00010293 RAX: ffffffff81881569 RBX: ffa0000000393030 RCX: ff11000100dc4500 RDX: 0000000000000000 RSI: ffa0000000393048 RDI: ff1100010b812a00 RBP: 0000000000000000 R08: 0000000000000002 R09: 0000000000000000 R10: dffffc0000000000 R11: fffffbfff0e5ef77 R12: 0000000000000000 R13: dffffc0000000000 R14: ff1100010b812a00 R15: ffa0000000393048 FS: 0000000000000000(0000) GS:ff11000192213000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007ff451d686ec CR3: 00000001037eb004 CR4: 0000000000771ef0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe07f0 DR7: 0000000000000600 PKRU: 55555554 Call Trace: <TASK> bpf_dispatcher_nop_func include/linux/bpf.h:1316 [inline] __bpf_prog_run include/linux/filter.h:718 [inline] bpf_prog_run include/linux/filter.h:725 [inline] bpf_prog_run_pin_on_cpu include/linux/filter.h:742 [inline] bpf_prog_run_clear_cb+0x7f/0x140 include/linux/filter.h:983 run_filter+0x156/0x260 net/packet/af_packet.c:2135 packet_rcv+0x491/0x15b0 net/packet/af_packet.c:2208 dev_queue_xmit_nit+0xc27/0xcb0 net/core/dev.c:2592 xmit_one net/core/dev.c:3831 [inline] dev_hard_start_xmit+0x1d5/0x720 net/core/dev.c:3851 sch_direct_xmit+0x242/0x4a0 net/sched/sch_generic.c:343 __dev_xmit_skb net/core/dev.c:4127 [inline] __dev_queue_xmit+0x186d/0x37a0 net/core/dev.c:4654 dev_queue_xmit include/linux/netdevice.h:3355 [inline] neigh_hh_output include/net/neighbour.h:523 [inline] neigh_output include/net/neighbour.h:537 [inline] ip6_finish_output2+0x11f3/0x16e0 net/ipv6/ip6_output.c:141 dst_output include/net/dst.h:459 [inline] NF_HOOK+0x160/0x470 include/linux/netfilter.h:314 mld_sendpack+0x7f7/0xd70 net/ipv6/mcast.c:1868 mld_send_cr net/ipv6/mcast.c:2169 [inline] mld_ifc_work+0x835/0xde0 net/ipv6/mcast.c:2702 process_one_work kernel/workqueue.c:3238 [inline] process_scheduled_works+0xa77/0x16a0 kernel/workqueue.c:3319 worker_thread+0x8b6/0xd50 kernel/workqueue.c:3400 kthread+0x413/0x870 kernel/kthread.c:464 ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:153 ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:245 </TASK> [1]: FAULT_INJECTION: forcing a failure. name failslab, interval 1, probability 0, space 0, times 1 CPU: 1 UID: 0 PID: 4562 Comm: syz.4.1225 Not tainted 6.14.0-13344-ga9843689e2de #28 PREEMPT(voluntary) 167b7ecb8f281ed56016416cdf1d8bb342db88fc Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0xfa/0x120 should_fail_ex+0x501/0x610 should_failslab+0xba/0x120 __kmalloc_cache_noprof+0x5d/0x310 bpf_int_jit_compile+0x1292/0x18b0 bpf_prog_select_runtime+0x439/0x780 Fixes: fa9dd59 ("bpf: get rid of pure_initcall dependency to enable jits") Reported-by: syzkaller <[email protected]> Signed-off-by: Kuniyuki Iwashima <[email protected]>
1 parent 721b69c commit 8b9aaaf

File tree

12 files changed

+91
-20
lines changed

12 files changed

+91
-20
lines changed

arch/arc/net/bpf_jit_core.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,21 +1335,25 @@ static int jit_patch_relocations(struct jit_context *ctx)
13351335
* to get the necessary data for the real compilation phase,
13361336
* jit_compile().
13371337
*/
1338-
static struct bpf_prog *do_normal_pass(struct bpf_prog *prog)
1338+
static struct bpf_prog *do_normal_pass(struct bpf_prog *prog, int *err)
13391339
{
13401340
struct jit_context ctx;
13411341

13421342
/* Bail out if JIT is disabled. */
13431343
if (!prog->jit_requested)
13441344
return prog;
13451345

1346-
if (jit_ctx_init(&ctx, prog)) {
1346+
*err = jit_ctx_init(&ctx, prog);
1347+
if (*err) {
13471348
jit_ctx_cleanup(&ctx);
13481349
return prog;
13491350
}
13501351

13511352
/* Get the lengths and allocate buffer. */
1352-
if (jit_prepare(&ctx)) {
1353+
*err = jit_prepare(&ctx);
1354+
if (*err) {
1355+
if (*err != -ENOMEM)
1356+
*err = 0;
13531357
jit_ctx_cleanup(&ctx);
13541358
return prog;
13551359
}
@@ -1374,15 +1378,16 @@ static struct bpf_prog *do_normal_pass(struct bpf_prog *prog)
13741378
* again to get the newly translated addresses in order to resolve
13751379
* the "call"s.
13761380
*/
1377-
static struct bpf_prog *do_extra_pass(struct bpf_prog *prog)
1381+
static struct bpf_prog *do_extra_pass(struct bpf_prog *prog, int *err)
13781382
{
13791383
struct jit_context ctx;
13801384

13811385
/* Skip if there's no context to resume from. */
13821386
if (check_jit_context(prog))
13831387
return prog;
13841388

1385-
if (jit_ctx_init(&ctx, prog)) {
1389+
*err = jit_ctx_init(&ctx, prog);
1390+
if (*err) {
13861391
jit_ctx_cleanup(&ctx);
13871392
return prog;
13881393
}
@@ -1417,9 +1422,9 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
14171422

14181423
/* Was this program already translated? */
14191424
if (!prog->jited)
1420-
return do_normal_pass(prog);
1425+
return do_normal_pass(prog, err);
14211426
else
1422-
return do_extra_pass(prog);
1427+
return do_extra_pass(prog, err);
14231428

14241429
return prog;
14251430
}

arch/arm/net/bpf_jit_32.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2164,8 +2164,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
21642164
*/
21652165
tmp = bpf_jit_blind_constants(prog);
21662166

2167-
if (IS_ERR(tmp))
2167+
if (IS_ERR(tmp)) {
2168+
if (PTR_ERR(tmp) == -ENOMEM)
2169+
*err = -ENOMEM;
21682170
return orig_prog;
2171+
}
21692172
if (tmp != prog) {
21702173
tmp_blinded = true;
21712174
prog = tmp;
@@ -2180,6 +2183,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
21802183
*/
21812184
ctx.offsets = kcalloc(prog->len, sizeof(int), GFP_KERNEL);
21822185
if (ctx.offsets == NULL) {
2186+
*err = -ENOMEM;
21832187
prog = orig_prog;
21842188
goto out;
21852189
}
@@ -2214,6 +2218,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
22142218
if (ctx.imm_count) {
22152219
ctx.imms = kcalloc(ctx.imm_count, sizeof(u32), GFP_KERNEL);
22162220
if (ctx.imms == NULL) {
2221+
*err = -ENOMEM;
22172222
prog = orig_prog;
22182223
goto out_off;
22192224
}
@@ -2239,6 +2244,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
22392244
* we must fall back to the interpretation
22402245
*/
22412246
if (header == NULL) {
2247+
*err = -ENOMEM;
22422248
prog = orig_prog;
22432249
goto out_imms;
22442250
}

arch/arm64/net/bpf_jit_comp.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1843,8 +1843,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
18431843
/* If blinding was requested and we failed during blinding,
18441844
* we must fall back to the interpreter.
18451845
*/
1846-
if (IS_ERR(tmp))
1846+
if (IS_ERR(tmp)) {
1847+
if (PTR_ERR(tmp) == -ENOMEM)
1848+
*err = -ENOMEM;
18471849
return orig_prog;
1850+
}
18481851
if (tmp != prog) {
18491852
tmp_blinded = true;
18501853
prog = tmp;
@@ -1854,6 +1857,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
18541857
if (!jit_data) {
18551858
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
18561859
if (!jit_data) {
1860+
*err = -ENOMEM;
18571861
prog = orig_prog;
18581862
goto out;
18591863
}
@@ -1875,6 +1879,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
18751879

18761880
ctx.offset = kvcalloc(prog->len + 1, sizeof(int), GFP_KERNEL);
18771881
if (ctx.offset == NULL) {
1882+
*err = -ENOMEM;
18781883
prog = orig_prog;
18791884
goto out_off;
18801885
}
@@ -1914,6 +1919,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
19141919
sizeof(u32), &header, &image_ptr,
19151920
jit_fill_hole);
19161921
if (!ro_header) {
1922+
*err = -ENOMEM;
19171923
prog = orig_prog;
19181924
goto out_off;
19191925
}

arch/loongarch/net/bpf_jit.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1209,8 +1209,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
12091209
* we must fall back to the interpreter. Otherwise, we save
12101210
* the new JITed code.
12111211
*/
1212-
if (IS_ERR(tmp))
1212+
if (IS_ERR(tmp)) {
1213+
if (PTR_ERR(tmp) == -ENOMEM)
1214+
*err = -ENOMEM;
12131215
return orig_prog;
1216+
}
12141217

12151218
if (tmp != prog) {
12161219
tmp_blinded = true;
@@ -1221,6 +1224,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
12211224
if (!jit_data) {
12221225
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
12231226
if (!jit_data) {
1227+
*err = -ENOMEM;
12241228
prog = orig_prog;
12251229
goto out;
12261230
}
@@ -1240,6 +1244,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
12401244

12411245
ctx.offset = kvcalloc(prog->len + 1, sizeof(u32), GFP_KERNEL);
12421246
if (ctx.offset == NULL) {
1247+
*err = -ENOMEM;
12431248
prog = orig_prog;
12441249
goto out_offset;
12451250
}
@@ -1266,6 +1271,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
12661271
header = bpf_jit_binary_alloc(image_size, &image_ptr,
12671272
sizeof(u32), jit_fill_hole);
12681273
if (header == NULL) {
1274+
*err = -ENOMEM;
12691275
prog = orig_prog;
12701276
goto out_offset;
12711277
}

arch/mips/net/bpf_jit_comp.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -932,8 +932,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
932932
* the new JITed code.
933933
*/
934934
tmp = bpf_jit_blind_constants(prog);
935-
if (IS_ERR(tmp))
935+
if (IS_ERR(tmp)) {
936+
if (PTR_ERR(tmp) == -ENOMEM)
937+
*err = -ENOMEM;
936938
return orig_prog;
939+
}
937940
if (tmp != prog) {
938941
tmp_blinded = true;
939942
prog = tmp;
@@ -948,8 +951,10 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
948951
*/
949952
ctx.descriptors = kcalloc(prog->len + 1, sizeof(*ctx.descriptors),
950953
GFP_KERNEL);
951-
if (ctx.descriptors == NULL)
954+
if (ctx.descriptors == NULL) {
955+
*err = -ENOMEM;
952956
goto out_err;
957+
}
953958

954959
/* First pass discovers used resources */
955960
if (build_body(&ctx) < 0)
@@ -991,8 +996,10 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
991996
* Not able to allocate memory for the structure then
992997
* we must fall back to the interpretation
993998
*/
994-
if (header == NULL)
999+
if (header == NULL) {
1000+
*err = -ENOMEM;
9951001
goto out_err;
1002+
}
9961003

9971004
/* Actual pass to generate final JIT code */
9981005
ctx.target = (u32 *)image_ptr;

arch/parisc/net/bpf_jit_core.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
5454
return orig_prog;
5555

5656
tmp = bpf_jit_blind_constants(prog);
57-
if (IS_ERR(tmp))
57+
if (IS_ERR(tmp)) {
58+
if (PTR_ERR(tmp) == -ENOMEM)
59+
*err = -ENOMEM;
5860
return orig_prog;
61+
}
5962
if (tmp != prog) {
6063
tmp_blinded = true;
6164
prog = tmp;
@@ -65,6 +68,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
6568
if (!jit_data) {
6669
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
6770
if (!jit_data) {
71+
*err = -ENOMEM;
6872
prog = orig_prog;
6973
goto out;
7074
}
@@ -82,6 +86,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
8286
ctx->prog = prog;
8387
ctx->offset = kcalloc(prog->len, sizeof(int), GFP_KERNEL);
8488
if (!ctx->offset) {
89+
*err = -ENOMEM;
8590
prog = orig_prog;
8691
goto out_offset;
8792
}
@@ -117,6 +122,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
117122
sizeof(long),
118123
bpf_fill_ill_insns);
119124
if (!jit_data->header) {
125+
*err = -ENOMEM;
120126
prog = orig_prog;
121127
goto out_offset;
122128
}

arch/powerpc/net/bpf_jit_comp.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
155155
return org_fp;
156156

157157
tmp_fp = bpf_jit_blind_constants(org_fp);
158-
if (IS_ERR(tmp_fp))
158+
if (IS_ERR(tmp_fp)) {
159+
if (PTR_ERR(tmp_fp) == -ENOMEM)
160+
*err = -ENOMEM;
159161
return org_fp;
162+
}
160163

161164
if (tmp_fp != org_fp) {
162165
bpf_blinded = true;
@@ -167,6 +170,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
167170
if (!jit_data) {
168171
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
169172
if (!jit_data) {
173+
*err = -ENOMEM;
170174
fp = org_fp;
171175
goto out;
172176
}
@@ -195,6 +199,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
195199

196200
addrs = kcalloc(flen + 1, sizeof(*addrs), GFP_KERNEL);
197201
if (addrs == NULL) {
202+
*err = -ENOMEM;
198203
fp = org_fp;
199204
goto out_addrs;
200205
}
@@ -246,6 +251,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
246251
fhdr = bpf_jit_binary_pack_alloc(alloclen, &fimage, 4, &hdr, &image,
247252
bpf_jit_fill_ill_insns);
248253
if (!fhdr) {
254+
*err = -ENOMEM;
249255
fp = org_fp;
250256
goto out_addrs;
251257
}

arch/riscv/net/bpf_jit_core.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
5555
return orig_prog;
5656

5757
tmp = bpf_jit_blind_constants(prog);
58-
if (IS_ERR(tmp))
58+
if (IS_ERR(tmp)) {
59+
if (PTR_ERR(tmp) == -ENOMEM)
60+
*err = -ENOMEM;
5961
return orig_prog;
62+
}
6063
if (tmp != prog) {
6164
tmp_blinded = true;
6265
prog = tmp;
@@ -66,6 +69,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
6669
if (!jit_data) {
6770
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
6871
if (!jit_data) {
72+
*err = -ENOMEM;
6973
prog = orig_prog;
7074
goto out;
7175
}
@@ -85,6 +89,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
8589
ctx->prog = prog;
8690
ctx->offset = kcalloc(prog->len, sizeof(int), GFP_KERNEL);
8791
if (!ctx->offset) {
92+
*err = -ENOMEM;
8893
prog = orig_prog;
8994
goto out_offset;
9095
}
@@ -128,6 +133,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
128133
&jit_data->header, &jit_data->image,
129134
bpf_fill_ill_insns);
130135
if (!jit_data->ro_header) {
136+
*err = -ENOMEM;
131137
prog = orig_prog;
132138
goto out_offset;
133139
}

arch/s390/net/bpf_jit_comp.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2274,8 +2274,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
22742274
* If blinding was requested and we failed during blinding,
22752275
* we must fall back to the interpreter.
22762276
*/
2277-
if (IS_ERR(tmp))
2277+
if (IS_ERR(tmp)) {
2278+
if (PTR_ERR(tmp) == -ENOMEM)
2279+
*err = -ENOMEM;
22782280
return orig_fp;
2281+
}
22792282
if (tmp != fp) {
22802283
tmp_blinded = true;
22812284
fp = tmp;
@@ -2285,6 +2288,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
22852288
if (!jit_data) {
22862289
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
22872290
if (!jit_data) {
2291+
*err = -ENOMEM;
22882292
fp = orig_fp;
22892293
goto out;
22902294
}
@@ -2301,6 +2305,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp, int *err)
23012305
memset(&jit, 0, sizeof(jit));
23022306
jit.addrs = kvcalloc(fp->len + 1, sizeof(*jit.addrs), GFP_KERNEL);
23032307
if (jit.addrs == NULL) {
2308+
*err = -ENOMEM;
23042309
fp = orig_fp;
23052310
goto free_addrs;
23062311
}

arch/sparc/net/bpf_jit_comp_64.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1496,8 +1496,11 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
14961496
/* If blinding was requested and we failed during blinding,
14971497
* we must fall back to the interpreter.
14981498
*/
1499-
if (IS_ERR(tmp))
1499+
if (IS_ERR(tmp)) {
1500+
if (PTR_ERR(tmp) == -ENOMEM)
1501+
*err = -ENOMEM;
15001502
return orig_prog;
1503+
}
15011504
if (tmp != prog) {
15021505
tmp_blinded = true;
15031506
prog = tmp;
@@ -1507,6 +1510,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
15071510
if (!jit_data) {
15081511
jit_data = kzalloc(sizeof(*jit_data), GFP_KERNEL);
15091512
if (!jit_data) {
1513+
*err = -ENOMEM;
15101514
prog = orig_prog;
15111515
goto out;
15121516
}
@@ -1528,6 +1532,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
15281532

15291533
ctx.offset = kmalloc_array(prog->len, sizeof(unsigned int), GFP_KERNEL);
15301534
if (ctx.offset == NULL) {
1535+
*err = -ENOMEM;
15311536
prog = orig_prog;
15321537
goto out_off;
15331538
}
@@ -1570,6 +1575,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog, int *err)
15701575
header = bpf_jit_binary_alloc(image_size, &image_ptr,
15711576
sizeof(u32), jit_fill_hole);
15721577
if (header == NULL) {
1578+
*err = -ENOMEM;
15731579
prog = orig_prog;
15741580
goto out_off;
15751581
}

0 commit comments

Comments
 (0)