lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAPhsuW7hVQW_1pG9w89b3wF8qgRdk4ULjRMPM3rVPOKdYe1oWA@mail.gmail.com>
Date:   Sat, 28 Jan 2023 22:04:15 -0800
From:   Song Liu <song@...nel.org>
To:     Christophe Leroy <christophe.leroy@...roup.eu>
Cc:     "linux-modules@...r.kernel.org" <linux-modules@...r.kernel.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "kernel-team@...a.com" <kernel-team@...a.com>,
        Luis Chamberlain <mcgrof@...nel.org>,
        Thomas Gleixner <tglx@...utronix.de>,
        Peter Zijlstra <peterz@...radead.org>,
        Guenter Roeck <linux@...ck-us.net>
Subject: Re: [PATCH v3] module: replace module_layout with module_memory

On Fri, Jan 27, 2023 at 11:43 PM Christophe Leroy
<christophe.leroy@...roup.eu> wrote:
[...]
> > -struct module_layout {
> > -     /* The actual code + data. */
> > +enum mod_mem_type {
> > +     MOD_MEM_TYPE_TEXT,
> > +     MOD_MEM_TYPE_DATA,
> > +     MOD_MEM_TYPE_RODATA,
> > +     MOD_MEM_TYPE_RO_AFTER_INIT,
> > +     MOD_MEM_TYPE_INIT_TEXT,
> > +     MOD_MEM_TYPE_INIT_DATA,
> > +     MOD_MEM_TYPE_INIT_RODATA,
> > +
> > +     MOD_MEM_NUM_TYPES,
> > +     MOD_MEM_TYPE_INVALID = -1,
> > +};
>
> Ok, so we agreed to keep it as a table with enums. Fair enough.
>
> However, can we try to make it less ugly and more readable ?
>
> I don't thing the enums needs to be prefixed by MOD_MEM_TYPE_
> Would be enough with MOD_TEXT, MOD_DATA, MOD_RODATA, MOD_RO_AFTER_INIT,
> MOD_INIT_TEXT, MOD_INIT_DATA, MOD_INIT_RODATA, MOD_INVALID.

[...]

> > -     /* Core layout: rbtree is accessed frequently, so keep together. */
> > -     struct module_layout core_layout __module_layout_align;
> > -     struct module_layout init_layout;
> > -#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
> > -     struct module_layout data_layout;
> > -#endif
> > +     /* rbtree is accessed frequently, so keep together. */
> > +     struct module_memory mod_mem[MOD_MEM_NUM_TYPES] __module_memory_align;
>
> We are already in a struct called module, so the module_memory struct
> could be called mem[MOD_MEM_NUM_TYPES]
>
> >
> >       /* Arch-specific module values */
> >       struct mod_arch_specific arch;
> > @@ -573,23 +574,35 @@ bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr);
> >   bool is_module_percpu_address(unsigned long addr);
> >   bool is_module_text_address(unsigned long addr);
> >
> > +static inline bool within_module_mem_type(unsigned long addr,
> > +                                       const struct module *mod,
> > +                                       enum mod_mem_type type)
> > +{
> > +     const struct module_memory *mod_mem;
> > +
> > +     if (WARN_ON_ONCE(type < MOD_MEM_TYPE_TEXT || type >= MOD_MEM_NUM_TYPES))
>
> Here I would rather use 0 instead of  MOD_MEM_TYPE_TEXT because
> MOD_MEM_TYPE_TEXT may change in the future.
>
> > +             return false;
> > +
> > +     mod_mem = &mod->mod_mem[type];
>
> I can't see the added value of the mod_ prefix.
>
> Would read better as
>
>         mem = &mod->mem[type];
>
>         return (unsigned long)mem->base <= addr && addr < (unsigned
> long)mem->base + mem->size;
>
> And could be even more readable as:
>
>         unsigned long base, size;
>
>         base = (unsigned long)mod->mod_mem[type].base;
>         size = mod->mod_mem[type].size;
>
>         return base <= addr && addr < base + size;

Yeah, the code does look better with shorter names.

If there is no objection from folks, I will send v4 with these
suggestions next week.

Thanks,
Song

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ