[2/2] x86/CET: Stop if the GNU_PROPERTY_X86_UINT32_VALID bit is set
Commit Message
When updated linkers merge input .note.gnu.property sections into one
.note.gnu.property section, it sets the GNU_PROPERTY_X86_UINT32_VALID
bit in the GNU_PROPERTY_X86_FEATURE_1_AND property. This can be used
to detect if the NT_GNU_PROPERTY_TYPE_0 note is generated by updated
linkers. If the GNU_PROPERTY_X86_UINT32_VALID bit is set, we can stop
checking for invalid .note.gnu.property section.
* sysdeps/x86/dl-prop.h (_dl_process_cet_property_note): Stop
if the GNU_PROPERTY_X86_UINT32_VALID bit is set.
---
sysdeps/x86/dl-prop.h | 6 ++++++
1 file changed, 6 insertions(+)
@@ -115,6 +115,11 @@ _dl_process_cet_property_note (struct link_map *l,
feature_1 = *(unsigned int *) ptr;
+ /* Done if this property note is created by updated
+ linker. */
+ if ((feature_1 & GNU_PROPERTY_X86_UINT32_VALID))
+ goto found_feature_1;
+
/* Keep searching for the next GNU property note
generated by the older linker. */
break;
@@ -138,6 +143,7 @@ _dl_process_cet_property_note (struct link_map *l,
align));
}
+found_feature_1:
/* We get here only if there is one or no GNU property note. */
if ((feature_1 & GNU_PROPERTY_X86_FEATURE_1_IBT))
l->l_cet |= lc_ibt;