gpt4 book ai didi

可以在模块初始化完成之前删除 linux 内核模块吗?

转载 作者:行者123 更新时间:2023-12-04 15:16:47 33 4
gpt4 key购买 nike

假设我的内核模块具有下面的初始化和退出函数:

module_init(init_module);
module_exit(cleanup_module);

是否可以在模块初始化完成之前/正在执行 init_module() 时删除内核模块,从而调用 cleanup_module()

最佳答案

在 module.c 中,do_init_module 在调用 init_module 之后执行了一个 module_put,所以我假设它在某个地方引用了模块。 https://elixir.bootlin.com/linux/v5.9-rc7/source/kernel/module.c#L3658

delete_module 在调用 free_module 之前检查 try_stop_module 中的引用计数。 https://elixir.bootlin.com/linux/v5.9-rc7/source/kernel/module.c#L1025 module_mutex 防止同时更改所涉及的结构。

看起来 root 肯定可以在 init 运行时调用 rmmod。如果它发生在 put 之前,它将失败。如果它发生在 put 之后,它就会成功。无论哪种方式,内核中都不会发生不正确的操作(除非使用强制操作,正如 Vijay 指出的那样)。

关于可以在模块初始化完成之前删除 linux 内核模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64172378/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com