When the ctl_table_header object is judged to be valid, the scheduling
check is performed again.
Signed-off-by: Li zeming <[email protected]>
---
fs/proc/proc_sysctl.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
index 50ba9e4fb284..36921e2ebeb0 100644
--- a/fs/proc/proc_sysctl.c
+++ b/fs/proc/proc_sysctl.c
@@ -1729,11 +1729,10 @@ static void drop_sysctl_table(struct ctl_table_header *header)
void unregister_sysctl_table(struct ctl_table_header * header)
{
int nr_subheaders;
- might_sleep();
-
if (header == NULL)
return;
+ might_sleep();
nr_subheaders = count_subheaders(header->ctl_table_arg);
if (unlikely(nr_subheaders > 1)) {
struct ctl_table_header **subheaders;
--
2.18.2
On Mon, Sep 05, 2022 at 09:29:25AM +0800, Li zeming wrote:
> When the ctl_table_header object is judged to be valid, the scheduling
> check is performed again.
No, we want the check in all cases, even if the header is NULL.
> Signed-off-by: Li zeming <[email protected]>
> ---
> fs/proc/proc_sysctl.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
> index 50ba9e4fb284..36921e2ebeb0 100644
> --- a/fs/proc/proc_sysctl.c
> +++ b/fs/proc/proc_sysctl.c
> @@ -1729,11 +1729,10 @@ static void drop_sysctl_table(struct ctl_table_header *header)
> void unregister_sysctl_table(struct ctl_table_header * header)
> {
> int nr_subheaders;
> - might_sleep();
> -
> if (header == NULL)
> return;
>
> + might_sleep();
> nr_subheaders = count_subheaders(header->ctl_table_arg);
> if (unlikely(nr_subheaders > 1)) {
> struct ctl_table_header **subheaders;
> --
> 2.18.2
>