UBUNTU: SAUCE: headers_install: fix #include "..." usage for userspace
authorAndy Whitcroft <apw@canonical.com>
Fri, 16 Sep 2011 12:20:31 +0000 (13:20 +0100)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 2 Apr 2012 20:12:21 +0000 (13:12 -0700)
When headers are converted to userspace headers they may include
relative includes.  For example x86 has the following in its
asm/posix_types.h:

    # ifdef __i386__
    #  include "posix_types_32.h"
    # else
    #  include "posix_types_64.h"
    # endif

However this is not safe in the face of the gcc option -I- which removes
"the directory the file I am being included from" from the search list.

Convert these references to <dir/...> form avoiding this.

BugLink: http://bugs.launchpad.net/bugs/824377
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>

scripts/Makefile.headersinst
scripts/headers_install.pl

index a57f5bd..b4018c5 100644 (file)
@@ -50,8 +50,8 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
 quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
                             file$(if $(word 2, $(all-files)),s))
       cmd_install = \
-        $(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \
-        $(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \
+        $(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(printdir) $(header-y); \
+        $(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(printdir) $(objhdr-y); \
         for F in $(wrapper-files); do                                   \
                 echo "\#include <asm-generic/$$F>" > $(install)/$$F;    \
         done;                                                           \
index 48462be..9f56fc5 100644 (file)
@@ -18,7 +18,9 @@
 
 use strict;
 
-my ($readdir, $installdir, $arch, @files) = @ARGV;
+my ($readdir, $installdir, $arch, $printdir, @files) = @ARGV;
+
+$printdir =~ s@^include/@@;
 
 my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__";
 
@@ -30,6 +32,10 @@ foreach my $file (@files) {
        open(my $out, '>', $tmpfile)
            or die "$tmpfile: $!\n";
        while (my $line = <$in>) {
+               # Any #include which uses "" and does not have a path needs
+               # rewriting so that the resultant user space headers are
+               # safe against the use of -I-.
+               $line =~ s/^(\s*#\s*include\s+)"([^\/]*?)"/$1<$printdir\/$2>/;
                $line =~ s/([\s(])__user\s/$1/g;
                $line =~ s/([\s(])__force\s/$1/g;
                $line =~ s/([\s(])__iomem\s/$1/g;