mbox series

[v9,00/14] module: core code clean up

Message ID 20220228234322.2073104-1-atomlin@redhat.com (mailing list archive)
Headers show
Series module: core code clean up | expand

Message

Aaron Tomlin Feb. 28, 2022, 11:43 p.m. UTC
Hi Luis,

As per your suggestion [1], this is an attempt to refactor and split
optional code out of core module support code into separate components.
This version is based on Linus' commit 7993e65fdd0f ("Merge tag
'mtd/fixes-for-5.17-rc5' of
git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux").

Petr,

I decided to use preempt_disable() instead to remain consistent with the
rest of the file. Unfortunately, I did not make time to boot test etc.

Changes since v8 [2]

 - Resolved the reported lockdep warnings in kernel/module/kallsyms.c
   (Petr Mladek)

Changes since v7 [3]

 - Removed redundant ifdef CONFIG_MODULES and endif pairing from
   kernel/module/Makefile

Changes since v6 [4]

 - Moved KCOV_INSTRUMENT_module.o out of kernel/Makefile into
   kernel/module/Makefile (Christophe Leroy)
 - Moved kernel/module/signature.c back into kernel/
   (Christophe Leroy)
 - Fixed Oops in add_kallsyms() due to an invalid pointer assignment
   (Christophe Leroy)

Changes since v5 [5]:

 - Updated MAINTAINERS to include the entire kernel/module/ directory
   (Christophe Leroy)
 - Reintroduce commit a97ac8cb24a3 ("module: fix signature check failures
   when using in-kernel decompression") (Michal Suchánek)
 - Refactored code to address some (i.e.
   --ignore=MULTIPLE_ASSIGNMENTS,ASSIGN_IN_IF was used) style violations
   e.g. "Alignment should match open parenthesis", reported by
   scripts/checkpatch.pl --strict (Christophe Leroy)
 - Used PAGE_ALIGN() and PAGE_ALIGNED() instead (Christophe Leroy)
 - Removed sig_enforce from include/linux/module.h as it is only
   used in kernel/module/signing.c (Christophe Leroy)
 - Added static keyword for anything not used outside a source file
   (Christophe Leroy)
 - Moved mod_sysfs_teardown() to kernel/module/sysfs.c (Christophe Leroy)
 - Removed kdb_modules from kernel/debug/kdb/kdb_private.h
   (Christophe Leroy)

Changes since v4 [6]:

 - Moved is_livepatch_module() and set_livepatch_module() to
   kernel/module/livepatch.c
 - Addressed minor compiler warning concerning
   kernel/module/internal.h (0-day)
 - Resolved style violations reported by scripts/checkpatch.pl
 - Dropped patch 5 [7] so external patch [8] can be applied at
   a later date post merge into module-next (Christophe Leroy)

Changes since v3 [9]:

 - Refactored both is_livepatch_module() and set_livepatch_module(),
   respectively, to use IS_ENABLED(CONFIG_LIVEPATCH) (Joe Perches)
 - Addressed various compiler warnings e.g., no previous prototype (0-day)

Changes since v2 [10]:

 - Moved module decompress support to a separate file
 - Made check_modinfo_livepatch() generic (Petr Mladek)
 - Removed filename from each newly created file (Luis Chamberlain)
 - Addressed some (i.e. --ignore=ASSIGN_IN_IF,AVOID_BUG was used)
   minor scripts/checkpatch.pl concerns e.g., use strscpy over
   strlcpy and missing a blank line after declarations (Allen)

Changes since v1 [11]:

  - Moved module version support code into a new file

[1]: https://lore.kernel.org/lkml/YbEZ4HgSYQEPuRmS@bombadil.infradead.org/
[2]: https://lore.kernel.org/all/20220222141303.1392190-2-atomlin@redhat.com/
[3]: https://lore.kernel.org/lkml/20220222130911.1348513-1-atomlin@redhat.com/
[4]: https://lore.kernel.org/lkml/20220218212511.887059-1-atomlin@redhat.com/
[5]: https://lore.kernel.org/lkml/20220209170358.3266629-1-atomlin@redhat.com/
[6]: https://lore.kernel.org/lkml/20220130213214.1042497-1-atomlin@redhat.com/
[7]: https://lore.kernel.org/lkml/20220130213214.1042497-6-atomlin@redhat.com/
[8]: https://lore.kernel.org/lkml/203348805c9ac9851d8939d15cb9802ef047b5e2.1643919758.git.christophe.leroy@csgroup.eu/
[9]: https://lore.kernel.org/lkml/20220128203934.600247-1-atomlin@redhat.com/
[10]: https://lore.kernel.org/lkml/20220106234319.2067842-1-atomlin@redhat.com/
[11]: https://lore.kernel.org/lkml/20211228213041.1356334-1-atomlin@redhat.com/


Aaron Tomlin (14):
  module: Move all into module/
  module: Simple refactor in preparation for split
  module: Make internal.h and decompress.c more compliant
  module: Move livepatch support to a separate file
  module: Move latched RB-tree support to a separate file
  module: Move strict rwx support to a separate file
  module: Move extra signature support out of core code
  module: Move kmemleak support to a separate file
  module: Move kallsyms support into a separate file
  module: kallsyms: Fix suspicious rcu usage
  module: Move procfs support into a separate file
  module: Move sysfs support into a separate file
  module: Move kdb_modules list out of core code
  module: Move version support into a separate file

 MAINTAINERS                                   |    2 +-
 include/linux/module.h                        |    9 +-
 kernel/Makefile                               |    5 +-
 kernel/debug/kdb/kdb_main.c                   |    5 +
 kernel/debug/kdb/kdb_private.h                |    4 -
 kernel/module-internal.h                      |   50 -
 kernel/module/Makefile                        |   20 +
 kernel/module/debug_kmemleak.c                |   30 +
 .../decompress.c}                             |    5 +-
 kernel/module/internal.h                      |  275 +++
 kernel/module/kallsyms.c                      |  512 +++++
 kernel/module/livepatch.c                     |   74 +
 kernel/{module.c => module/main.c}            | 1856 +----------------
 kernel/module/procfs.c                        |  142 ++
 kernel/module/signing.c                       |  122 ++
 kernel/module/strict_rwx.c                    |   85 +
 kernel/module/sysfs.c                         |  436 ++++
 kernel/module/tree_lookup.c                   |  109 +
 kernel/module/version.c                       |  109 +
 kernel/module_signing.c                       |   45 -
 20 files changed, 2013 insertions(+), 1882 deletions(-)
 delete mode 100644 kernel/module-internal.h
 create mode 100644 kernel/module/Makefile
 create mode 100644 kernel/module/debug_kmemleak.c
 rename kernel/{module_decompress.c => module/decompress.c} (99%)
 create mode 100644 kernel/module/internal.h
 create mode 100644 kernel/module/kallsyms.c
 create mode 100644 kernel/module/livepatch.c
 rename kernel/{module.c => module/main.c} (64%)
 create mode 100644 kernel/module/procfs.c
 create mode 100644 kernel/module/signing.c
 create mode 100644 kernel/module/strict_rwx.c
 create mode 100644 kernel/module/sysfs.c
 create mode 100644 kernel/module/tree_lookup.c
 create mode 100644 kernel/module/version.c
 delete mode 100644 kernel/module_signing.c


base-commit: 7993e65fdd0fe07beb9f36f998f9bbef2c0ee391

Comments

Luis Chamberlain March 1, 2022, 12:21 a.m. UTC | #1
On Mon, Feb 28, 2022 at 11:43:08PM +0000, Aaron Tomlin wrote:
> Hi Luis,
> 
> As per your suggestion [1], this is an attempt to refactor and split
> optional code out of core module support code into separate components.
> This version is based on Linus' commit 7993e65fdd0f ("Merge tag
> 'mtd/fixes-for-5.17-rc5' of
> git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux").
> 
> Petr,
> 
> I decided to use preempt_disable() instead to remain consistent with the
> rest of the file. Unfortunately, I did not make time to boot test etc.

Aaron, thanks so much for doing this!

Since no boot tests are performed yet, I just pushed this to modules-testing
for now, after we get some boot test results I'll push to modules-next.

We should run kmod tests as well.

  Luis
Christophe Leroy March 1, 2022, 7:07 a.m. UTC | #2
Hi Luis,

Le 01/03/2022 à 01:21, Luis Chamberlain a écrit :
> On Mon, Feb 28, 2022 at 11:43:08PM +0000, Aaron Tomlin wrote:
>> Hi Luis,
>>
>> As per your suggestion [1], this is an attempt to refactor and split
>> optional code out of core module support code into separate components.
>> This version is based on Linus' commit 7993e65fdd0f ("Merge tag
>> 'mtd/fixes-for-5.17-rc5' of
>> git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux").
>>
>> Petr,
>>
>> I decided to use preempt_disable() instead to remain consistent with the
>> rest of the file. Unfortunately, I did not make time to boot test etc.
> 
> Aaron, thanks so much for doing this!
> 
> Since no boot tests are performed yet, I just pushed this to modules-testing
> for now, after we get some boot test results I'll push to modules-next.
> 
> We should run kmod tests as well.
> 


My Kconfig patch and my two series still cleanly apply on v9. I don't 
need to rebase/resend them.


boot test is OK for me with Aaron's v9.


Christophe
Christophe Leroy March 1, 2022, 7:44 a.m. UTC | #3
Le 01/03/2022 à 01:21, Luis Chamberlain a écrit :
> 
> We should run kmod tests as well.
> 

I tried to build kmod tests, but I get a crazy result:


$ ./configure --host=ppc-linux --prefix=/usr/local

$ make

$ cd testsuite

$ make

$ file test-list
test-list: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 
(SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 
3.2.0, with debug_info, not stripped

$ file module-playground/mod-loop-a.ko
module-playground/mod-loop-a.ko: ELF 64-bit LSB relocatable, x86-64, 
version 1 (SYSV), 
BuildID[sha1]=d46956a4fd36d8d3467806c31831c81217a573f5, with debug_info, 
not stripped



How do I get it to crossbuild proper PowerPC module ?

Thanks
Christophe
Luis Chamberlain March 1, 2022, 4 p.m. UTC | #4
On Tue, Mar 01, 2022 at 07:07:30AM +0000, Christophe Leroy wrote:
> Hi Luis,
> 
> Le 01/03/2022 à 01:21, Luis Chamberlain a écrit :
> > On Mon, Feb 28, 2022 at 11:43:08PM +0000, Aaron Tomlin wrote:
> >> Hi Luis,
> >>
> >> As per your suggestion [1], this is an attempt to refactor and split
> >> optional code out of core module support code into separate components.
> >> This version is based on Linus' commit 7993e65fdd0f ("Merge tag
> >> 'mtd/fixes-for-5.17-rc5' of
> >> git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux").
> >>
> >> Petr,
> >>
> >> I decided to use preempt_disable() instead to remain consistent with the
> >> rest of the file. Unfortunately, I did not make time to boot test etc.
> > 
> > Aaron, thanks so much for doing this!
> > 
> > Since no boot tests are performed yet, I just pushed this to modules-testing
> > for now, after we get some boot test results I'll push to modules-next.
> > 
> > We should run kmod tests as well.
> > 
> 
> 
> My Kconfig patch and my two series still cleanly apply on v9. I don't 
> need to rebase/resend them.
> 
> 
> boot test is OK for me with Aaron's v9.

Great thanks yes, I intend on applying them as soon as I get some test
confirmations on modules-testing. It's all about testing now.

  Luis
Luis Chamberlain March 1, 2022, 4:01 p.m. UTC | #5
On Tue, Mar 01, 2022 at 07:44:26AM +0000, Christophe Leroy wrote:
> 
> 
> Le 01/03/2022 à 01:21, Luis Chamberlain a écrit :
> > 
> > We should run kmod tests as well.
> > 
> 
> I tried to build kmod tests, but I get a crazy result:
> 
> 
> $ ./configure --host=ppc-linux --prefix=/usr/local
> 
> $ make
> 
> $ cd testsuite
> 
> $ make
> 
> $ file test-list
> test-list: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 
> (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 
> 3.2.0, with debug_info, not stripped
> 
> $ file module-playground/mod-loop-a.ko
> module-playground/mod-loop-a.ko: ELF 64-bit LSB relocatable, x86-64, 
> version 1 (SYSV), 
> BuildID[sha1]=d46956a4fd36d8d3467806c31831c81217a573f5, with debug_info, 
> not stripped
> 
> 
> 
> How do I get it to crossbuild proper PowerPC module ?

Lucas?

  Luis
Lucas De Marchi March 1, 2022, 5:15 p.m. UTC | #6
On Tue, Mar 01, 2022 at 08:01:23AM -0800, Luis Chamberlain wrote:
>On Tue, Mar 01, 2022 at 07:44:26AM +0000, Christophe Leroy wrote:
>>
>>
>> Le 01/03/2022 à 01:21, Luis Chamberlain a écrit :
>> >
>> > We should run kmod tests as well.
>> >
>>
>> I tried to build kmod tests, but I get a crazy result:
>>
>>
>> $ ./configure --host=ppc-linux --prefix=/usr/local
>>
>> $ make
>>
>> $ cd testsuite
>>
>> $ make
>>
>> $ file test-list
>> test-list: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1
>> (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux
>> 3.2.0, with debug_info, not stripped
>>
>> $ file module-playground/mod-loop-a.ko
>> module-playground/mod-loop-a.ko: ELF 64-bit LSB relocatable, x86-64,
>> version 1 (SYSV),
>> BuildID[sha1]=d46956a4fd36d8d3467806c31831c81217a573f5, with debug_info,
>> not stripped
>>
>>
>>
>> How do I get it to crossbuild proper PowerPC module ?

do I understand correctly that you want to crossbuild kmod + kernel
modules to do your test? why?

If you really need it, then beware we just chainload the kernel build
for the out-of-tree modules when compiling the test modules. Something
like this should work:

	make V=1 KDIR=$HOME/p/gfx-internal/linux-arm64/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- check

But running the cross built binaries is probably not what you want?

Another thing is that unless you are patching kmod binaries or libkmod,
the testsuite won't test much. kmod's testsuite don't test anything on
the kernel side... the kernel part is mocked by the testsuite itself.
Adding proper integration with the kernel part is possible, but not
something ready.

Lucas De Marchi

>
>Lucas?
>
>  Luis
Christophe Leroy March 1, 2022, 5:43 p.m. UTC | #7
Le 01/03/2022 à 18:15, Lucas De Marchi a écrit :
> On Tue, Mar 01, 2022 at 08:01:23AM -0800, Luis Chamberlain wrote:
>> On Tue, Mar 01, 2022 at 07:44:26AM +0000, Christophe Leroy wrote:
>>>
>>>
>>> Le 01/03/2022 à 01:21, Luis Chamberlain a écrit :
>>> >
>>> > We should run kmod tests as well.
>>> >
>>>
>>> I tried to build kmod tests, but I get a crazy result:
>>>
>>>
>>> $ ./configure --host=ppc-linux --prefix=/usr/local
>>>
>>> $ make
>>>
>>> $ cd testsuite
>>>
>>> $ make
>>>
>>> $ file test-list
>>> test-list: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1
>>> (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux
>>> 3.2.0, with debug_info, not stripped
>>>
>>> $ file module-playground/mod-loop-a.ko
>>> module-playground/mod-loop-a.ko: ELF 64-bit LSB relocatable, x86-64,
>>> version 1 (SYSV),
>>> BuildID[sha1]=d46956a4fd36d8d3467806c31831c81217a573f5, with debug_info,
>>> not stripped
>>>
>>>
>>>
>>> How do I get it to crossbuild proper PowerPC module ?
> 
> do I understand correctly that you want to crossbuild kmod + kernel
> modules to do your test? why?


Yes, I want to build the tests on my PC and run them on a powerpc board.

> 
> If you really need it, then beware we just chainload the kernel build
> for the out-of-tree modules when compiling the test modules. Something
> like this should work:
> 
>      make V=1 KDIR=$HOME/p/gfx-internal/linux-arm64/ ARCH=arm64 
> CROSS_COMPILE=aarch64-linux-gnu- check
> 
> But running the cross built binaries is probably not what you want?

I want to run them on the board.

> 
> Another thing is that unless you are patching kmod binaries or libkmod,
> the testsuite won't test much. kmod's testsuite don't test anything on
> the kernel side... the kernel part is mocked by the testsuite itself.
> Adding proper integration with the kernel part is possible, but not
> something ready.

Ah, I see.

I made non trivial modification on kernel modules handling (see series 
at 
https://patchwork.kernel.org/project/linux-modules/cover/cover.1645607143.git.christophe.leroy@csgroup.eu/) 
and Luis suggested to run kmod test suite to perform regression testing.

Christophe