lsmod, libkmod: handle module changes during execution#42
Conversation
Kernel modules may be unloaded within the time window of checking /proc/modules and /sys/module/*/*. As a result, * -errno is printed in place of size or reference count * EXIT_SUCCESS is reported despite failure Add checks for better error reporting.
| struct kmod_list *holders = kmod_module_get_holders(mod), *hitr; | ||
| int first = 1; | ||
|
|
||
| if (holders == NULL || use_count < 0 || size < 0) { |
There was a problem hiding this comment.
holders == NULL is a normal thing to have, e.g:
serio_raw 20480 0
use_count < 0 allows us to use modules in the "going" state, i.e. in the process of being unloaded.
size < 0 I believe is the only one that we should really do something.... maybe setting it to 0. Rather than exiting here, I think we should just handle the races as a normal situation and continue printing the rest of the list.
There was a problem hiding this comment.
An illustration of negative use_count:
In a handful of instances (buggy/glitchy bluetooth + rmmod non-force) I have ended up with foobar 1234 -1. At which point the kernel(?) was completely foobar'd and reboot was needed.
There was a problem hiding this comment.
@SuibianP can you rebase taking this into account?
Kernel modules may be unloaded within the time window of checking
/proc/modulesand/sys/module/*/*. As a result,-errnois printed in place of size or reference countEXIT_SUCCESSis reported despite failureAdd checks for better error reporting.
Fixes #41.