svn commit: r191210 - in stable/7/sys: . amd64/amd64 amd64/linux32 arm/arm compat/ia32 contrib/pf dev/ath/ath_hal dev/cxgb i386/i386 i386/linux ia64/ia64 kern powerpc/powerpc sparc64/sparc64 sys

Dmitry Chagin dchagin at FreeBSD.org
Fri Apr 17 16:42:59 UTC 2009


Author: dchagin
Date: Fri Apr 17 16:42:57 2009
New Revision: 191210
URL: http://svn.freebsd.org/changeset/base/191210

Log:
  Merge r190708 from HEAD to stable/7:
  Fix KBI breakage by r190520 which affects older linux.ko binaries:
  
  1) Move the new field (brand_note) to the end of the Brandinfo structure.
  2) Add a new flag BI_BRAND_NOTE that indicates that the brand_note pointer
     is valid.
  3) Use the brand_note field if the flag BI_BRAND_NOTE is set and as old
     modules won't have the flag set, so the new field brand_note would be
     ignored.
  
  Suggested by:   jhb
  Reviewed by:	jhb
  Approved by:	re (Ken Smith), kib (mentor)

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/amd64/amd64/elf_machdep.c
  stable/7/sys/amd64/linux32/linux32_sysvec.c
  stable/7/sys/arm/arm/elf_machdep.c
  stable/7/sys/compat/ia32/ia32_sysvec.c
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/ath/ath_hal/   (props changed)
  stable/7/sys/dev/cxgb/   (props changed)
  stable/7/sys/i386/i386/elf_machdep.c
  stable/7/sys/i386/linux/linux_sysvec.c
  stable/7/sys/ia64/ia64/elf_machdep.c
  stable/7/sys/kern/imgact_elf.c
  stable/7/sys/powerpc/powerpc/elf_machdep.c
  stable/7/sys/sparc64/sparc64/elf_machdep.c
  stable/7/sys/sys/imgact_elf.h

Modified: stable/7/sys/amd64/amd64/elf_machdep.c
==============================================================================
--- stable/7/sys/amd64/amd64/elf_machdep.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/amd64/amd64/elf_machdep.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -84,7 +84,7 @@ static Elf64_Brandinfo freebsd_brand_inf
 	.sysvec		= &elf64_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf64_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_ANY,
@@ -100,7 +100,7 @@ static Elf64_Brandinfo freebsd_brand_oin
 	.sysvec		= &elf64_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf64_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY,

Modified: stable/7/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- stable/7/sys/amd64/linux32/linux32_sysvec.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/amd64/linux32/linux32_sysvec.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -1066,7 +1066,7 @@ static Elf32_Brandinfo linux_brand = {
 	.sysvec		= &elf_linux_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &linux32_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 static Elf32_Brandinfo linux_glibc2brand = {
@@ -1078,7 +1078,7 @@ static Elf32_Brandinfo linux_glibc2brand
 	.sysvec		= &elf_linux_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &linux32_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 Elf32_Brandinfo *linux_brandlist[] = {

Modified: stable/7/sys/arm/arm/elf_machdep.c
==============================================================================
--- stable/7/sys/arm/arm/elf_machdep.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/arm/arm/elf_machdep.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -84,7 +84,7 @@ static Elf32_Brandinfo freebsd_brand_inf
 	.sysvec		= &elf32_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_ANY,
@@ -100,7 +100,7 @@ static Elf32_Brandinfo freebsd_brand_oin
 	.sysvec		= &elf32_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(oelf32, SI_SUB_EXEC, SI_ORDER_ANY,

Modified: stable/7/sys/compat/ia32/ia32_sysvec.c
==============================================================================
--- stable/7/sys/compat/ia32/ia32_sysvec.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/compat/ia32/ia32_sysvec.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -148,7 +148,7 @@ static Elf32_Brandinfo ia32_brand_info =
 	.sysvec		= &ia32_freebsd_sysvec,
 	.interp_newpath	= "/libexec/ld-elf32.so.1",
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(ia32, SI_SUB_EXEC, SI_ORDER_ANY,
@@ -164,7 +164,7 @@ static Elf32_Brandinfo ia32_brand_oinfo 
 	.sysvec		= &ia32_freebsd_sysvec,
 	.interp_newpath	= "/libexec/ld-elf32.so.1",
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(oia32, SI_SUB_EXEC, SI_ORDER_ANY,

Modified: stable/7/sys/i386/i386/elf_machdep.c
==============================================================================
--- stable/7/sys/i386/i386/elf_machdep.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/i386/i386/elf_machdep.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -84,7 +84,7 @@ static Elf32_Brandinfo freebsd_brand_inf
 	.sysvec		= &elf32_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_ANY,
@@ -100,7 +100,7 @@ static Elf32_Brandinfo freebsd_brand_oin
 	.sysvec		= &elf32_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(oelf32, SI_SUB_EXEC, SI_ORDER_ANY,

Modified: stable/7/sys/i386/linux/linux_sysvec.c
==============================================================================
--- stable/7/sys/i386/linux/linux_sysvec.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/i386/linux/linux_sysvec.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -1036,7 +1036,7 @@ static Elf32_Brandinfo linux_brand = {
 	.sysvec		= &elf_linux_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &linux_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 static Elf32_Brandinfo linux_glibc2brand = {
@@ -1048,7 +1048,7 @@ static Elf32_Brandinfo linux_glibc2brand
 	.sysvec		= &elf_linux_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &linux_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 Elf32_Brandinfo *linux_brandlist[] = {

Modified: stable/7/sys/ia64/ia64/elf_machdep.c
==============================================================================
--- stable/7/sys/ia64/ia64/elf_machdep.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/ia64/ia64/elf_machdep.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -92,7 +92,7 @@ static Elf64_Brandinfo freebsd_brand_inf
 	.sysvec		= &elf64_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf64_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_ANY,
     (sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_info);
@@ -106,7 +106,7 @@ static Elf64_Brandinfo freebsd_brand_oin
 	.sysvec		= &elf64_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf64_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY,
     (sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_oinfo);

Modified: stable/7/sys/kern/imgact_elf.c
==============================================================================
--- stable/7/sys/kern/imgact_elf.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/kern/imgact_elf.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -192,7 +192,7 @@ __elfN(get_brandinfo)(struct image_param
 	for (i = 0; i < MAX_BRANDS; i++) {
 		bi = elf_brand_list[i];
 		if (bi != NULL && hdr->e_machine == bi->machine &&
-		    bi->brand_note != NULL) {
+		    (bi->flags & BI_BRAND_NOTE) != 0) {
 			ret = __elfN(check_note)(imgp, bi->brand_note, osrel);
 			if (ret)
 				return (bi);

Modified: stable/7/sys/powerpc/powerpc/elf_machdep.c
==============================================================================
--- stable/7/sys/powerpc/powerpc/elf_machdep.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/powerpc/powerpc/elf_machdep.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -87,7 +87,7 @@ static Elf32_Brandinfo freebsd_brand_inf
 	.sysvec		= &elf32_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_ANY,
@@ -103,7 +103,7 @@ static Elf32_Brandinfo freebsd_brand_oin
 	.sysvec		= &elf32_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf32_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(oelf32, SI_SUB_EXEC, SI_ORDER_ANY,

Modified: stable/7/sys/sparc64/sparc64/elf_machdep.c
==============================================================================
--- stable/7/sys/sparc64/sparc64/elf_machdep.c	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/sparc64/sparc64/elf_machdep.c	Fri Apr 17 16:42:57 2009	(r191210)
@@ -99,7 +99,7 @@ static Elf64_Brandinfo freebsd_brand_inf
 	.sysvec		= &elf64_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf64_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_ANY,
@@ -115,7 +115,7 @@ static Elf64_Brandinfo freebsd_brand_oin
 	.sysvec		= &elf64_freebsd_sysvec,
 	.interp_newpath	= NULL,
 	.brand_note	= &elf64_freebsd_brandnote,
-	.flags		= BI_CAN_EXEC_DYN
+	.flags		= BI_CAN_EXEC_DYN | BI_BRAND_NOTE
 };
 
 SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY,

Modified: stable/7/sys/sys/imgact_elf.h
==============================================================================
--- stable/7/sys/sys/imgact_elf.h	Fri Apr 17 16:42:03 2009	(r191209)
+++ stable/7/sys/sys/imgact_elf.h	Fri Apr 17 16:42:57 2009	(r191210)
@@ -70,9 +70,10 @@ typedef struct {
 	const char *interp_path;
 	struct sysentvec *sysvec;
 	const char *interp_newpath;
-	Elf_Brandnote *brand_note;
 	int flags;
+	Elf_Brandnote *brand_note;
 #define	BI_CAN_EXEC_DYN	0x0001
+#define	BI_BRAND_NOTE	0x0002
 } __ElfN(Brandinfo);
 
 __ElfType(Auxargs);


More information about the svn-src-all mailing list