[PATCH] staging: wilc1000: fix check of kthread_run() return value

Julian Calaby julian.calaby at gmail.com
Wed Mar 9 23:42:54 UTC 2016


Hi Vladimir,

On Thu, Mar 10, 2016 at 10:30 AM, Vladimir Zapolskiy <vz at mleia.com> wrote:
> Hi Julian,
>
> On 10.03.2016 01:27, Julian Calaby wrote:
>> Hi Vladimir,
>>
>> On Thu, Mar 10, 2016 at 10:13 AM, Vladimir Zapolskiy <vz at mleia.com> wrote:
>>> The kthread_run() function returns either a valid task_struct or
>>> ERR_PTR() value, check for NULL is invalid. The change fixes potential
>>> oops, e.g. in OOM situation.
>>>
>>> Signed-off-by: Vladimir Zapolskiy <vz at mleia.com>
>>> ---
>>>  drivers/staging/wilc1000/linux_wlan.c | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
>>> index 54fe9d7..5077c30 100644
>>> --- a/drivers/staging/wilc1000/linux_wlan.c
>>> +++ b/drivers/staging/wilc1000/linux_wlan.c
>>> @@ -849,10 +849,10 @@ static int wlan_initialize_threads(struct net_device *dev)
>>>         PRINT_D(INIT_DBG, "Creating kthread for transmission\n");
>>>         wilc->txq_thread = kthread_run(linux_wlan_txq_task, (void *)dev,
>>>                                      "K_TXQ_TASK");
>>> -       if (!wilc->txq_thread) {
>>> +       if (IS_ERR(wilc->txq_thread)) {
>>>                 PRINT_ER("couldn't create TXQ thread\n");
>>>                 wilc->close = 0;
>>> -               return -ENOBUFS;
>>> +               return PTR_ERR(wilc->txq_thread);
>>
>> Are you sure changing the error returned is correct? Do all the
>> callers of wlan_initialize_threads() handle the full range of errors
>> from kthread_run()?
>
> Have you checked the driver?

I'm making sure you have. It's possible that there's a good reason why
this returns -ENOBUFS I want to know that you've at least considered
that possibility.

> This function is called once on initialization, the check on the upper layer
> has "if (ret < 0) goto exit_badly;" form.

And practically everything in the chain up to net_device_ops uses the
same error handling scheme so it's probably fine.

You should also document this change in the commit message.

Thanks,

-- 
Julian Calaby

Email: julian.calaby at gmail.com
Profile: http://www.google.com/profiles/julian.calaby/


More information about the devel mailing list