return ptr;
 }
 
-void bpf_prog_pack_free(struct bpf_binary_header *hdr)
+void bpf_prog_pack_free(void *ptr, u32 size)
 {
        struct bpf_prog_pack *pack = NULL, *tmp;
        unsigned int nbits;
        unsigned long pos;
 
        mutex_lock(&pack_mutex);
-       if (hdr->size > BPF_PROG_PACK_SIZE) {
-               bpf_jit_free_exec(hdr);
+       if (size > BPF_PROG_PACK_SIZE) {
+               bpf_jit_free_exec(ptr);
                goto out;
        }
 
        list_for_each_entry(tmp, &pack_list, list) {
-               if ((void *)hdr >= tmp->ptr && (tmp->ptr + BPF_PROG_PACK_SIZE) > (void *)hdr) {
+               if (ptr >= tmp->ptr && (tmp->ptr + BPF_PROG_PACK_SIZE) > ptr) {
                        pack = tmp;
                        break;
                }
        if (WARN_ONCE(!pack, "bpf_prog_pack bug\n"))
                goto out;
 
-       nbits = BPF_PROG_SIZE_TO_NBITS(hdr->size);
-       pos = ((unsigned long)hdr - (unsigned long)pack->ptr) >> BPF_PROG_CHUNK_SHIFT;
+       nbits = BPF_PROG_SIZE_TO_NBITS(size);
+       pos = ((unsigned long)ptr - (unsigned long)pack->ptr) >> BPF_PROG_CHUNK_SHIFT;
 
-       WARN_ONCE(bpf_arch_text_invalidate(hdr, hdr->size),
+       WARN_ONCE(bpf_arch_text_invalidate(ptr, size),
                  "bpf_prog_pack bug: missing bpf_arch_text_invalidate?\n");
 
        bitmap_clear(pack->bitmap, pos, nbits);
 
        *rw_header = kvmalloc(size, GFP_KERNEL);
        if (!*rw_header) {
-               bpf_arch_text_copy(&ro_header->size, &size, sizeof(size));
-               bpf_prog_pack_free(ro_header);
+               bpf_prog_pack_free(ro_header, size);
                bpf_jit_uncharge_modmem(size);
                return NULL;
        }
        kvfree(rw_header);
 
        if (IS_ERR(ptr)) {
-               bpf_prog_pack_free(ro_header);
+               bpf_prog_pack_free(ro_header, ro_header->size);
                return PTR_ERR(ptr);
        }
        return 0;
 {
        u32 size = ro_header->size;
 
-       bpf_prog_pack_free(ro_header);
+       bpf_prog_pack_free(ro_header, size);
        kvfree(rw_header);
        bpf_jit_uncharge_modmem(size);
 }