Message ID | 1316175631-1728-2-git-send-email-apw@canonical.com |
---|---|
State | New |
Headers | show |
On Fri, 2011-09-16 at 13:20 +0100, Andy Whitcroft wrote: > 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> Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com> Applied to Oneiric master-next. Thanks, Leann > --- > scripts/Makefile.headersinst | 4 ++-- > scripts/headers_install.pl | 8 +++++++- > 2 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst > index a57f5bd..b4018c5 100644 > --- a/scripts/Makefile.headersinst > +++ b/scripts/Makefile.headersinst > @@ -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; \ > diff --git a/scripts/headers_install.pl b/scripts/headers_install.pl > index efb3be1..0425f5f 100644 > --- a/scripts/headers_install.pl > +++ b/scripts/headers_install.pl > @@ -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; > -- > 1.7.4.1 > >
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index a57f5bd..b4018c5 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst @@ -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; \ diff --git a/scripts/headers_install.pl b/scripts/headers_install.pl index efb3be1..0425f5f 100644 --- a/scripts/headers_install.pl +++ b/scripts/headers_install.pl @@ -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;
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> --- scripts/Makefile.headersinst | 4 ++-- scripts/headers_install.pl | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-)