ath10k: ret used but uninitialized

Arnd Bergmann arnd at arndb.de
Fri Jul 7 07:14:13 PDT 2017


On Fri, Jul 7, 2017 at 12:04 PM, Kalle Valo <kvalo at qca.qualcomm.com> wrote:
> Erik Stromdahl <erik.stromdahl at gmail.com> writes:
>
>>> With gcc 4.1.2:
>>>
>>> drivers/net/wireless/ath/ath10k/sdio.c: In function
>>> ‘ath10k_sdio_mbox_rxmsg_pending_handler’:
>>> drivers/net/wireless/ath/ath10k/sdio.c:676: warning: ‘ret’ may be used
>>> uninitialized in this function
>>>
>>>> +
>>>> +       *done = true;
>>>> +
>>>> +       /* Copy the lookahead obtained from the HTC register table into our
>>>> +        * temp array as a start value.
>>>> +        */
>>>> +       lookaheads[0] = msg_lookahead;
>>>> +
>>>> +       timeout = jiffies + SDIO_MBOX_PROCESSING_TIMEOUT_HZ;
>>>
>>> Although very unlikely due to the long timeout, if the code is preempted here,
>>> and the loop below never entered, ret will indeed be uninitialized.
>>>
>>> It's unclear to me what the proper initialization would be, though, so
>>> that's why I didn't send a patch.
>>>
>> I think it would be best to use 0 as initial value of ret in this case.
>> This will make all other interrupts be processed in a normal way.
>>
>> Kalle: Should I create a new patch (initializing ret with zero)?
>
> Yes, please send a new patch fixing this.
>
> But I don't like that much with the style of initialising ret to zero,
> it tends to hide things. Instead my preference is something like below
> where the error handling is more explicit and easier to find where it's
> exactly failing. But that's just an example how I would try to solve it,
> it still lacks the handling of -ECANCEL etc.

I think I would simply replace the "while() {}" loop with "do{} while()",
as that would guarantee it to be run at least once in a way that the
compiler can see.

       Arnd



More information about the ath10k mailing list