On 01/29/2016 08:31 PM, Sergei Temerkhanov wrote:
> On Fri, Jan 29, 2016 at 4:50 PM, Corey Minyard <miny...@acm.org> wrote:
>> On 01/28/2016 10:17 PM, Sergey Temerkhanov wrote:
>>> Fix NULL pointer dereference at the end of multi-part message send
>>> process caused by the buffer pointer being set to NULL too early
>>
>> Dang, I know I tested this.  Unfortunately, the fix you have won't work.  It
>> opens a race, msg_written_handler can be called again before ssif_i2c_send
>> returns.
>>
>> Can you save the value of ssif_info->multi_data in a local then call it with
>> that?
> The actual struct ssif_info setup is performed in ssif_i2c_send() so
> what if we just split it int 2 parts and issue the call to complete()
> after we've made sure that nothing is gonna race?

I'm not sure what you mean, I'd have to see a patch.

But it seems very simple to just save ssif_info->multi_data in a local 
and pass that to ssif_i2c_send.

-corey

> Regards,
> Sergey
>
>> -corey
>>
>>
>>> ---
>>>    drivers/char/ipmi/ipmi_ssif.c | 11 ++++++-----
>>>    1 file changed, 6 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
>>> index dc3491c..2b222bf 100644
>>> --- a/drivers/char/ipmi/ipmi_ssif.c
>>> +++ b/drivers/char/ipmi/ipmi_ssif.c
>>> @@ -896,6 +896,12 @@ static void msg_written_handler(struct ssif_info
>>> *ssif_info, int result,
>>>                  /* Length byte. */
>>>                  ssif_info->multi_data[ssif_info->multi_pos] = left;
>>>                  ssif_info->multi_pos += left;
>>> +
>>> +               rv = ssif_i2c_send(ssif_info, msg_written_handler,
>>> +                                 I2C_SMBUS_WRITE,
>>> +                                 SSIF_IPMI_MULTI_PART_REQUEST_MIDDLE,
>>> +                                 ssif_info->multi_data +
>>> ssif_info->multi_pos,
>>> +                                 I2C_SMBUS_BLOCK_DATA);
>>>                  if (left < 32)
>>>                          /*
>>>                           * Write is finished.  Note that we must end
>>> @@ -905,11 +911,6 @@ static void msg_written_handler(struct ssif_info
>>> *ssif_info, int result,
>>>                           */
>>>                          ssif_info->multi_data = NULL;
>>>    -             rv = ssif_i2c_send(ssif_info, msg_written_handler,
>>> -                                 I2C_SMBUS_WRITE,
>>> -                                 SSIF_IPMI_MULTI_PART_REQUEST_MIDDLE,
>>> -                                 ssif_info->multi_data +
>>> ssif_info->multi_pos,
>>> -                                 I2C_SMBUS_BLOCK_DATA);
>>>                  if (rv < 0) {
>>>                          /* request failed, just return the error. */
>>>                          ssif_inc_stat(ssif_info, send_errors);
>>
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
> _______________________________________________
> Openipmi-developer mailing list
> Openipmi-developer@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openipmi-developer


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Openipmi-developer mailing list
Openipmi-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to