<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Null pointer dereferenced in sdc_handler in SDK 17.0.0</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/63419/null-pointer-dereferenced-in-sdc_handler-in-sdk-17-0-0</link><description>Hi, 
 
 While upmerging our project from SDK 15.3.0 to 17.0.0 we faced an issue in the sdc_handler due to usage of a NULL pointer. 
 
 In the case SDC_EVT_INIT if the p_event-&amp;gt;result is not SDC_SUCCESS the block_dev_sdc_uninit function is called. It in</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 09 Jul 2020 12:36:57 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/63419/null-pointer-dereferenced-in-sdc_handler-in-sdk-17-0-0" /><item><title>RE: Null pointer dereferenced in sdc_handler in SDK 17.0.0</title><link>https://devzone.nordicsemi.com/thread/259180?ContentTypeID=1</link><pubDate>Thu, 09 Jul 2020 12:36:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:27009000-2817-4c4d-8a56-4b233e1bed13</guid><dc:creator>blac01</dc:creator><description>&lt;p&gt;Hi J&amp;oslash;rgen,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Sorry to come back late on your answer.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve selected 2. as final fix. This is cleaner to us (uses the ev_handler, avoids having an early break statement, ...).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Note that we didn&amp;rsquo;t test the 1.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards&lt;/p&gt;
&lt;p&gt;Beno&amp;icirc;t&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Null pointer dereferenced in sdc_handler in SDK 17.0.0</title><link>https://devzone.nordicsemi.com/thread/258768?ContentTypeID=1</link><pubDate>Tue, 07 Jul 2020 09:51:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ef488bf7-4941-47a8-b507-000375c26448</guid><dc:creator>J&amp;#248;rgen Holmefjord</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I see two possible workarounds.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add a break; at the end of the first if statement.&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;case SDC_EVT_INIT:
            {
                if (p_event-&amp;gt;result != SDC_SUCCESS)
                {
                    nrf_block_dev_t const * block_dev = &amp;amp;(p_sdc_dev-&amp;gt;block_dev);
                    ret_code_t err_code = block_dev_sdc_uninit(block_dev);
                    APP_ERROR_CHECK(err_code);
                    break;
                }

                p_work-&amp;gt;geometry.blk_count = app_sdc_info_get()-&amp;gt;num_blocks;
                p_work-&amp;gt;geometry.blk_size  = SDC_SECTOR_SIZE;
                if (m_active_sdc_dev-&amp;gt;p_work-&amp;gt;ev_handler)
                {
                    const nrf_block_dev_event_t ev = {
                            NRF_BLOCK_DEV_EVT_INIT,
                            ((p_event-&amp;gt;result == SDC_SUCCESS) ? \
                                    NRF_BLOCK_DEV_RESULT_SUCCESS : NRF_BLOCK_DEV_RESULT_IO_ERROR),
                            NULL,
                            p_work-&amp;gt;p_context
                    };
                    p_work-&amp;gt;ev_handler(&amp;amp;p_sdc_dev-&amp;gt;block_dev, &amp;amp;ev);
                }
            }
            break;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Move the first if statement after the second if statement, to allow passing the result of the init back to the event handler before uninit.&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;case SDC_EVT_INIT:
            {
                p_work-&amp;gt;geometry.blk_count = app_sdc_info_get()-&amp;gt;num_blocks;
                p_work-&amp;gt;geometry.blk_size  = SDC_SECTOR_SIZE;
                if (m_active_sdc_dev-&amp;gt;p_work-&amp;gt;ev_handler)
                {
                    const nrf_block_dev_event_t ev = {
                            NRF_BLOCK_DEV_EVT_INIT,
                            ((p_event-&amp;gt;result == SDC_SUCCESS) ? \
                                    NRF_BLOCK_DEV_RESULT_SUCCESS : NRF_BLOCK_DEV_RESULT_IO_ERROR),
                            NULL,
                            p_work-&amp;gt;p_context
                    };
                    p_work-&amp;gt;ev_handler(&amp;amp;p_sdc_dev-&amp;gt;block_dev, &amp;amp;ev);
                }
                
                if (p_event-&amp;gt;result != SDC_SUCCESS)
                {
                    nrf_block_dev_t const * block_dev = &amp;amp;(p_sdc_dev-&amp;gt;block_dev);
                    ret_code_t err_code = block_dev_sdc_uninit(block_dev);
                    APP_ERROR_CHECK(err_code);
                }
            }
            break;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Best regards,&lt;br /&gt;Jørgen&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>