diff options
Diffstat (limited to 'kernel/bpf/core.c')
| -rw-r--r-- | kernel/bpf/core.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index c1e10d088dbb..711fd293b6de 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -825,6 +825,11 @@ struct bpf_prog_pack {  	unsigned long bitmap[];  }; +void bpf_jit_fill_hole_with_zero(void *area, unsigned int size) +{ +	memset(area, 0, size); +} +  #define BPF_PROG_SIZE_TO_NBITS(size)	(round_up(size, BPF_PROG_CHUNK_SIZE) / BPF_PROG_CHUNK_SIZE)  static DEFINE_MUTEX(pack_mutex); @@ -864,7 +869,7 @@ static struct bpf_prog_pack *alloc_new_pack(bpf_jit_fill_hole_t bpf_fill_ill_ins  	return pack;  } -static void *bpf_prog_pack_alloc(u32 size, bpf_jit_fill_hole_t bpf_fill_ill_insns) +void *bpf_prog_pack_alloc(u32 size, bpf_jit_fill_hole_t bpf_fill_ill_insns)  {  	unsigned int nbits = BPF_PROG_SIZE_TO_NBITS(size);  	struct bpf_prog_pack *pack; @@ -905,7 +910,7 @@ out:  	return ptr;  } -static void bpf_prog_pack_free(struct bpf_binary_header *hdr) +void bpf_prog_pack_free(struct bpf_binary_header *hdr)  {  	struct bpf_prog_pack *pack = NULL, *tmp;  	unsigned int nbits; @@ -971,7 +976,7 @@ pure_initcall(bpf_jit_charge_init);  int bpf_jit_charge_modmem(u32 size)  { -	if (atomic_long_add_return(size, &bpf_jit_current) > bpf_jit_limit) { +	if (atomic_long_add_return(size, &bpf_jit_current) > READ_ONCE(bpf_jit_limit)) {  		if (!bpf_capable()) {  			atomic_long_sub(size, &bpf_jit_current);  			return -EPERM; @@ -2623,6 +2628,7 @@ const struct bpf_func_proto bpf_get_numa_node_id_proto __weak;  const struct bpf_func_proto bpf_ktime_get_ns_proto __weak;  const struct bpf_func_proto bpf_ktime_get_boot_ns_proto __weak;  const struct bpf_func_proto bpf_ktime_get_coarse_ns_proto __weak; +const struct bpf_func_proto bpf_ktime_get_tai_ns_proto __weak;  const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak;  const struct bpf_func_proto bpf_get_current_uid_gid_proto __weak;  |