diff mbox series

[2/2] x86/CET: Stop if the GNU_PROPERTY_X86_UINT32_VALID bit is set

Message ID 20181108201340.29845-3-hjl.tools@gmail.com
State New
Headers show
Series elf: Update GNU_PROPERTY_X86_XXX macros | expand

Commit Message

H.J. Lu Nov. 8, 2018, 8:13 p.m. UTC
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(+)
diff mbox series

Patch

diff --git a/sysdeps/x86/dl-prop.h b/sysdeps/x86/dl-prop.h
index 9ab890d12b..5c06aa5fbc 100644
--- a/sysdeps/x86/dl-prop.h
+++ b/sysdeps/x86/dl-prop.h
@@ -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;