<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>MCU BootloaderのトピックRe: Reliable Update allows writing in application area?</title>
    <link>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694979#M468</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Bruno,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So far, the Kinetis bootloader V2.0.0 does support the reliable update.&lt;/P&gt;&lt;P&gt;Please check the &lt;A href="http://www.nxp.com/docs/en/reference-manual/KBTLDR200RM.pdf"&gt;KBOOT V2.0.0 reference manual&lt;/A&gt; chapter 12 for the detailed info:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/18271iEABCC22056F4D6BB/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/18320i01689ABD77C86A7E/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;The configuration macros defined in bootloader_config.h are used to enable the reliable update feature.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wish it helps.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ma Hui&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 11 Aug 2017 02:24:23 GMT</pubDate>
    <dc:creator>Hui_Ma</dc:creator>
    <dc:date>2017-08-11T02:24:23Z</dc:date>
    <item>
      <title>Reliable Update allows writing in application area?</title>
      <link>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694978#M467</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've been playing around with the Bootloader and I found something that could be called a bug, or a possible weird feature.&lt;/P&gt;&lt;P&gt;When you turn Relible Update on, the idea is basically to program your application in a backup address (BL_BACKUP_APP_START, let's call it B) and then the bootloader will check if it is correct and moves it&amp;nbsp;to the application address (BL_APP_VECTOR_TABLE_ADDRESS, let's call it A). The application only runs from the address A. If the application in B is not right (CRC not valid), then the bootloader does nothing and you'll still have your application in address A.&lt;/P&gt;&lt;P&gt;This is very nice, but it means you should program your application in B. If you program it in any other location, the bootloader won't find it, thus won't update the application in A.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But what if I try to program my application directly in A? Shouldn't the bootloader protect this area?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Right now, if you program your application directly in A, no Reliable Update will be performed, thus if the the program is somehow corrupted during the transfer, it might disable your board.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers,&lt;/P&gt;&lt;P&gt;Bruno&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Aug 2017 12:51:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694978#M467</guid>
      <dc:creator>brunoalbrecht</dc:creator>
      <dc:date>2017-08-09T12:51:21Z</dc:date>
    </item>
    <item>
      <title>Re: Reliable Update allows writing in application area?</title>
      <link>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694979#M468</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Bruno,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So far, the Kinetis bootloader V2.0.0 does support the reliable update.&lt;/P&gt;&lt;P&gt;Please check the &lt;A href="http://www.nxp.com/docs/en/reference-manual/KBTLDR200RM.pdf"&gt;KBOOT V2.0.0 reference manual&lt;/A&gt; chapter 12 for the detailed info:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/18271iEABCC22056F4D6BB/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/18320i01689ABD77C86A7E/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;The configuration macros defined in bootloader_config.h are used to enable the reliable update feature.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wish it helps.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ma Hui&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Aug 2017 02:24:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694979#M468</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2017-08-11T02:24:23Z</dc:date>
    </item>
    <item>
      <title>Re: Reliable Update allows writing in application area?</title>
      <link>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694980#M469</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry Hui_Ma, but I think you either didn't understand my post or didn't read it entirely.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I understand how the Booloader works and how the Reliable Update works and how it can be configured. My point is: even with the reliable update turned on, it is still possible to overwrite the application area by writing directly to it, which, in my opinion should not be allowed. If you're trying to update your application in reliable way, you shouldn't be able to write over your old application! You should only be able to write on the backup location and then the bootloader would decide whether the application is valid or not&amp;nbsp;to finally, if it is valid, move to the application space.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyway, I'll be working on that on the next few days and I'll post a solution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers,&lt;/P&gt;&lt;P&gt;Bruno&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Aug 2017 07:59:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694980#M469</guid>
      <dc:creator>brunoalbrecht</dc:creator>
      <dc:date>2017-08-11T07:59:12Z</dc:date>
    </item>
    <item>
      <title>Re: Reliable Update allows writing in application area?</title>
      <link>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694981#M470</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok, so I found a solution for now.&lt;/P&gt;&lt;P&gt;Since the memory driver can't be changed very easily, because the reliable update should still be able to erase and write the main application area, I added some logic to the command and sbloader layers. The patches (git) for both files (bl_command.c and sbloader.c) are attached.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This change will prevent the user from:&lt;/P&gt;&lt;P&gt;* Write or Erase a region before the backup address;&lt;/P&gt;&lt;P&gt;* Write or Erase a region that will overlap the main application area (if the Backup Application Address is lower than the Main Application Address).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I should warn, though, that the "Erase all" command is still available and will still erase both the backup and the main appllication areas, but if someone needs the extra protection, a similar&amp;nbsp;approach could be used.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;bl_command.c&lt;/P&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;diff --git a/NXP_Kinetis_Bootloader_2_0_0/src/bootloader/src/bl_command.c b/NXP_Kinetis_Bootloader_2_0_0/src/bootloader/src/bl_command.c
index ac35e17..73173a0 100644
--- a/NXP_Kinetis_Bootloader_2_0_0/src/bootloader/src/bl_command.c
+++ b/NXP_Kinetis_Bootloader_2_0_0/src/bootloader/src/bl_command.c
@@ -491,8 +491,22 @@
 #ifdef BOOTLOADER_HOST
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; host_flash_erase_region(command-&amp;gt;startAddress, command-&amp;gt;byteCount);
 #else
-&amp;nbsp;&amp;nbsp;&amp;nbsp; status = g_bootloaderContext.memoryInterface-&amp;gt;erase(command-&amp;gt;startAddress, command-&amp;gt;byteCount);
-#endif
+/* The user shouldn't be able to erase the application region, if the reliable update is active */
+#if BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp; /* If the backup application is saved after the application */
+&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((command-&amp;gt;startAddress &amp;lt; BL_BACKUP_APP_START) || //the user is trying to erase a sector before the region it was supposed to
+&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; (command-&amp;gt;startAddress&amp;nbsp; &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS)) || //the user is trying to erase the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; ((command-&amp;gt;startAddress + command-&amp;gt;byteCount) &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS))) //the user is trying to erase a region that will overlap the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp; {
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_generic_response(kStatusMemoryRangeInvalid, command-&amp;gt;commandPacket.commandTag);
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
+&amp;nbsp;&amp;nbsp;&amp;nbsp; }
+&amp;nbsp;&amp;nbsp;&amp;nbsp; else
+#endif //BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp; {
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = g_bootloaderContext.memoryInterface-&amp;gt;erase(command-&amp;gt;startAddress, command-&amp;gt;byteCount);
+&amp;nbsp;&amp;nbsp;&amp;nbsp; }
+#endif //BOOTLOADER_HOST
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; send_generic_response(status, command-&amp;gt;commandPacket.commandTag);
 }
@@ -704,7 +718,22 @@
 #endif // !BL_FEATURE_MIN_PROFILE
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Consumer is memory interface.
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = g_bootloaderContext.memoryInterface-&amp;gt;write(dataAddress, packetLength, packet);
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* The user shouldn't be able to write in the application region, if the reliable update is active */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#if BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* If the backup application is saved after the application */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((dataAddress &amp;lt; BL_BACKUP_APP_START) || //the user is trying to write before the region it was supposed to
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; (dataAddress &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS)) || //the user is trying to write in the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; ((dataAddress + packetLength) &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS))) //the user is trying to write a package that will overlap the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = kStatusMemoryRangeInvalid;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif //BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = g_bootloaderContext.memoryInterface-&amp;gt;write(dataAddress, packetLength, packet);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataAddress += packetLength;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;sbloader.c&lt;/P&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;diff --git a/NXP_Kinetis_Bootloader_2_0_0/src/sbloader/src/sbloader.c b/NXP_Kinetis_Bootloader_2_0_0/src/sbloader/src/sbloader.c
index 90c0f12..755c6dc 100644
--- a/NXP_Kinetis_Bootloader_2_0_0/src/sbloader/src/sbloader.c
+++ b/NXP_Kinetis_Bootloader_2_0_0/src/sbloader/src/sbloader.c
@@ -467,8 +467,21 @@
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 #endif
 
-&amp;nbsp;&amp;nbsp;&amp;nbsp; status_t status =
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_bootloaderContext.memoryInterface-&amp;gt;write(context-&amp;gt;bootCmd.address, context-&amp;gt;bootCmd.count, context-&amp;gt;src);
+&amp;nbsp;&amp;nbsp;&amp;nbsp; status_t status;
+&amp;nbsp;&amp;nbsp;&amp;nbsp; /* The user shouldn't be able to erase the application region, if the reliable update is active */
+#if BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* If the backup application is saved after the application */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((context-&amp;gt;bootCmd.address &amp;lt; BL_BACKUP_APP_START) || //the user is trying to write in a sector before the region it was supposed to
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; (context-&amp;gt;bootCmd.address&amp;nbsp; &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS)) || //the user is trying to write in the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; ((context-&amp;gt;bootCmd.address + context-&amp;gt;bootCmd.count) &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS))) //the user is trying to write a packet that will overlap the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = kStatusMemoryRangeInvalid;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
+#endif //BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = g_bootloaderContext.memoryInterface-&amp;gt;write(context-&amp;gt;bootCmd.address, context-&amp;gt;bootCmd.count, context-&amp;gt;src);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status != kStatus_Success)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
@@ -538,8 +551,23 @@
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // update the crc running value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc32_update(&amp;amp;context-&amp;gt;crc32, context-&amp;gt;src, sizeof(chunk_t));
 
-&amp;nbsp;&amp;nbsp;&amp;nbsp; status_t status =
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_bootloaderContext.memoryInterface-&amp;gt;write(context-&amp;gt;bootCmd.address, sizeof(chunk_t), context-&amp;gt;src);
+&amp;nbsp;&amp;nbsp;&amp;nbsp; status_t status;
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp; /* The user shouldn't be able to erase the application region, if the reliable update is active */
+#if BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* If the backup application is saved after the application */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((context-&amp;gt;bootCmd.address &amp;lt; BL_BACKUP_APP_START) || //the user is trying to write in a sector before the region it was supposed to
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; (context-&amp;gt;bootCmd.address&amp;nbsp; &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS)) || //the user is trying to write in the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; ((context-&amp;gt;bootCmd.address + sizeof(chunk_t)) &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS))) //the user is trying to write a packet that will overlap the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = kStatusMemoryRangeInvalid;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
+#endif //BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = g_bootloaderContext.memoryInterface-&amp;gt;write(context-&amp;gt;bootCmd.address, sizeof(chunk_t), context-&amp;gt;src);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status != kStatus_Success)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return status;
@@ -851,7 +879,20 @@
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = g_bootloaderContext.memoryInterface-&amp;gt;erase(context-&amp;gt;bootCmd.address, context-&amp;gt;bootCmd.count);
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* The user shouldn't be able to erase the application region, if the reliable update is active */
+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#if BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* If the backup application is saved after the application */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((context-&amp;gt;bootCmd.address &amp;lt; BL_BACKUP_APP_START) || //the user is trying to erase a sector before the region it was supposed to
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; (context-&amp;gt;bootCmd.address&amp;nbsp; &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS)) || //the user is trying to erase the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((BL_BACKUP_APP_START &amp;lt; BL_APP_VECTOR_TABLE_ADDRESS) &amp;amp;&amp;amp; ((context-&amp;gt;bootCmd.address + context-&amp;gt;bootCmd.count) &amp;gt;= BL_APP_VECTOR_TABLE_ADDRESS))) //the user is trying to erase a region that will overlap the application area
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = kStatusMemoryRangeInvalid;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif //BL_FEATURE_RELIABLE_UPDATE
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = g_bootloaderContext.memoryInterface-&amp;gt;erase(context-&amp;gt;bootCmd.address, context-&amp;gt;bootCmd.count);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return status;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hopefully it is usefull for someone else.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;Bruno&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Aug 2017 09:29:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694981#M470</guid>
      <dc:creator>brunoalbrecht</dc:creator>
      <dc:date>2017-08-11T09:29:40Z</dc:date>
    </item>
    <item>
      <title>Re: Reliable Update allows writing in application area?</title>
      <link>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694982#M471</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Bruno,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for the sharing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;best regards,&lt;/P&gt;&lt;P&gt;Hui&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Aug 2017 02:48:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCU-Bootloader/Reliable-Update-allows-writing-in-application-area/m-p/694982#M471</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2017-08-14T02:48:32Z</dc:date>
    </item>
  </channel>
</rss>

