[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ed5d91f54b5a4776a66df87b645b0ee9@AcuMS.aculab.com>
Date: Wed, 13 Jun 2018 10:53:07 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Zhouyang Jia' <jiazhouyang09@...il.com>
CC: Oleg Drokin <oleg.drokin@...el.com>,
Andreas Dilger <andreas.dilger@...el.com>,
James Simmons <jsimmons@...radead.org>,
"Greg Kroah-Hartman" <gregkh@...uxfoundation.org>,
NeilBrown <neilb@...e.com>,
Haneen Mohammed <hamohammed.sa@...il.com>,
Al Viro <viro@...iv.linux.org.uk>,
"Gustavo A. R. Silva" <garsilva@...eddedor.com>,
"lustre-devel@...ts.lustre.org" <lustre-devel@...ts.lustre.org>,
"devel@...verdev.osuosl.org" <devel@...verdev.osuosl.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: RE: [PATCH] staging: lustre: add error handling for try_module_get
From: Zhouyang Jia
> Sent: 12 June 2018 05:49
>
> When try_module_get fails, the lack of error-handling code may
> cause unexpected results.
>
> This patch adds error-handling code after calling try_module_get.
...
> +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> @@ -2422,7 +2422,10 @@ ksocknal_base_startup(void)
>
> /* flag lists/ptrs/locks initialised */
> ksocknal_data.ksnd_init = SOCKNAL_INIT_DATA;
> - try_module_get(THIS_MODULE);
> + if (!try_module_get(THIS_MODULE)) {
> + CERROR("%s: cannot get module\n", __func__);
> + goto failed;
> + }
Can try_module_get(THIS_MODULE) ever fail?
Since you are running code in 'THIS_MODULE' the caller must have a
reference that can't go away.
So try_module_get() just increments the count that is already greater
than zero.
Similarly module_put(THIS_MODULE) must never be able to release the
last reference.
Any such calls that aren't in error paths after try_module_get() are
probably buggy.
David
Powered by blists - more mailing lists