On Wed, Jul 15, 2020 at 01:32:27AM +0300, Jarkko Sakkinen wrote:
> +void *text_alloc(unsigned long size)
> +{
> +     void *p;
> +
> +     if (PAGE_ALIGN(size) > MODULES_LEN)
> +             return NULL;
> +
> +     p = __vmalloc_node_range(size, MODULE_ALIGN,
> +                                 MODULES_VADDR + get_module_load_offset(),
> +                                 MODULES_END, GFP_KERNEL,
> +                                 PAGE_KERNEL, 0, NUMA_NO_NODE,
> +                                 __builtin_return_address(0));
> +     if (p && (kasan_module_alloc(p, size) < 0)) {
> +             vfree(p);
> +             return NULL;
> +     }
> +
> +     return p;
> +}
> +
> +void text_free(void *region)
> +{
> +     /*
> +      * This memory may be RO, and freeing RO memory in an interrupt is not
> +      * supported by vmalloc.
> +      */
> +     WARN_ON(in_interrupt());

I think that wants to be:

        lockdep_assert_irqs_enabled();

in_interrupt() isn't sufficient, interrupts must also not be disabled
when issuesing TLB invalidations.

> +
> +     vfree(region);
> +}

Reply via email to