Hi Linus,
Please pull below to receive modules updates for the v5.13 merge window.
A summary can be found in the signed tag.
Thank you,
Jessica
--
The following changes since commit 1e28eed17697bcf343c6743f0028cc3b5dd88bf0:
Linux 5.12-rc3 (2021-03-14 14:41:02 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git tags/modules-for-v5.13
for you to fetch changes up to 33121347fb1c359bd6e3e680b9f2c6ced5734a81:
module: treat exit sections the same as init sections when !CONFIG_MODULE_UNLOAD (2021-03-29 13:08:53 +0200)
----------------------------------------------------------------
Modules updates for v5.13
Summary of modules changes for the 5.13 merge window:
- Fix an age old bug involving jump_calls and static_labels when
CONFIG_MODULE_UNLOAD=n. When CONFIG_MODULE_UNLOAD=n, it means you
can't unload modules, so normally the __exit sections of a module are
not loaded at all. However, dynamic code patching (jump_label,
static_call, alternatives) can have sites in __exit sections even if
__exit is never executed.
Reported by Peter Zijlstra: "Alternatives, jump_labels and static_call
all can have relocations into __exit code. Not loading it at all would
be BAD." Therefore, load the __exit sections even when
CONFIG_MODULE_UNLOAD=n, and discard them after init.
Signed-off-by: Jessica Yu <[email protected]>
----------------------------------------------------------------
Jessica Yu (1):
module: treat exit sections the same as init sections when !CONFIG_MODULE_UNLOAD
kernel/module.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
+++ Jessica Yu [28/04/21 14:58 +0200]:
>Hi Linus,
>
>Please pull below to receive modules updates for the v5.13 merge window.
>A summary can be found in the signed tag.
>
>Thank you,
>
>Jessica
Ugh, I had forgotten to sign the tag. Should be fixed now, sorry about that.
>--
>The following changes since commit 1e28eed17697bcf343c6743f0028cc3b5dd88bf0:
>
> Linux 5.12-rc3 (2021-03-14 14:41:02 -0700)
>
>are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git tags/modules-for-v5.13
>
>for you to fetch changes up to 33121347fb1c359bd6e3e680b9f2c6ced5734a81:
>
> module: treat exit sections the same as init sections when !CONFIG_MODULE_UNLOAD (2021-03-29 13:08:53 +0200)
>
>----------------------------------------------------------------
>Modules updates for v5.13
>
>Summary of modules changes for the 5.13 merge window:
>
>- Fix an age old bug involving jump_calls and static_labels when
> CONFIG_MODULE_UNLOAD=n. When CONFIG_MODULE_UNLOAD=n, it means you
> can't unload modules, so normally the __exit sections of a module are
> not loaded at all. However, dynamic code patching (jump_label,
> static_call, alternatives) can have sites in __exit sections even if
> __exit is never executed.
>
> Reported by Peter Zijlstra: "Alternatives, jump_labels and static_call
> all can have relocations into __exit code. Not loading it at all would
> be BAD." Therefore, load the __exit sections even when
> CONFIG_MODULE_UNLOAD=n, and discard them after init.
>
>Signed-off-by: Jessica Yu <[email protected]>
>
>----------------------------------------------------------------
>Jessica Yu (1):
> module: treat exit sections the same as init sections when !CONFIG_MODULE_UNLOAD
>
> kernel/module.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
On Wed, Apr 28, 2021 at 5:58 AM Jessica Yu <[email protected]> wrote:
>
> Therefore, load the __exit sections even when
> CONFIG_MODULE_UNLOAD=n, and discard them after init.
So I've pulled this, but I have two questions based on reading the patch..
(a) Where's that "discard them after init" logic?
(b) ARM has its own module_init/exit_section() functions, and now
seems to have different logic than everybody else as a result..
but maybe I'm not reading that patch right.
Linus
The pull request you sent on Wed, 28 Apr 2021 14:58:44 +0200:
> git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux.git tags/modules-for-v5.13
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/65c61de9d090edb8a3cfb3f45541e268eb2cdb13
Thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html
+++ Linus Torvalds [30/04/21 12:37 -0700]:
>On Wed, Apr 28, 2021 at 5:58 AM Jessica Yu <[email protected]> wrote:
>>
>> Therefore, load the __exit sections even when
>> CONFIG_MODULE_UNLOAD=n, and discard them after init.
Hi Linus,
>So I've pulled this, but I have two questions based on reading the patch..
>
> (a) Where's that "discard them after init" logic?
So the idea is for the exit sections to additionally identify as init
sections via module_init_section() when CONFIG_MODULE_UNLOAD=n, so
that the existing logic in layout_sections() picks this up and puts
the exit sections into the init area of the module (mod->init_layout.base).
Then, since we've placed the exit sections in the init region of the
module, they will automatically get freed at the end of
do_init_module() with the rest of the init sections. Peter has also
mentioned that jump_label and static_call want the exit sections to
also identify as init via within_module_init(), so this change should
satisfy their requirement as well. I should have explained this more
in the changelog and apologize that it wasn't clear.
> (b) ARM has its own module_init/exit_section() functions, and now
>seems to have different logic than everybody else as a result..
No, you are right, I had forgotten that ARM is a special case :-( I
will add a similar hunk for ARM and submit that for the next -rc so
that all arches are on the same page here.
Jessica