This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: PR ld/11946: Invalid memory access in ELF before_allocation


Hi,

We should check ELF audit entry only on ELF input.  I checked in this
patch as an obvious fix.


H.J.
---
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 55fd8e3..c5a8859 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2010-08-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/11946
+	* emultempl/elf32.em (_before_allocation): Check audit entry
+	only on ELF input.
+
 2010-08-22  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR ld/11937
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index aa9d787..c8682ae 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1495,33 +1495,34 @@ gld${EMULATION_NAME}_before_allocation (void)
     rpath = (const char *) getenv ("LD_RUN_PATH");
 
   for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
-    {
-      const char *audit_libs = elf_dt_audit (abfd);
+    if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+      {
+	const char *audit_libs = elf_dt_audit (abfd);
 
-      /* If the input bfd contains an audit entry, we need to add it as 
-         a dep audit entry.  */
-      if (audit_libs && *audit_libs != '\0')
-	{
-	  char *cp = xstrdup (audit_libs);
-	  do
-	    {
-	      int more = 0;
-	      char *cp2 = strchr (cp, config.rpath_separator);
+	/* If the input bfd contains an audit entry, we need to add it as 
+	   a dep audit entry.  */
+	if (audit_libs && *audit_libs != '\0')
+	  {
+	    char *cp = xstrdup (audit_libs);
+	    do
+	      {
+		int more = 0;
+		char *cp2 = strchr (cp, config.rpath_separator);
 
-	      if (cp2)
-		{
-	          *cp2 = '\0';
-		  more = 1;
-		}
-	      
-	      if (cp != NULL && *cp != '\0')
-	        gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
+		if (cp2)
+		  {
+		    *cp2 = '\0';
+		    more = 1;
+		  }
 
-	      cp = more ? ++cp2 : NULL;
-	    }
-	  while (cp != NULL);
-	}
-    }
+		if (cp != NULL && *cp != '\0')
+		  gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
+
+		cp = more ? ++cp2 : NULL;
+	      }
+	    while (cp != NULL);
+	  }
+      }
 
   if (! (bfd_elf_size_dynamic_sections
 	 (link_info.output_bfd, command_line.soname, rpath,


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]