08 Jun, 2016

1 commit

  • This patch allows to build the whole kernel with GCC plugins. It was ported from
    grsecurity/PaX. The infrastructure supports building out-of-tree modules and
    building in a separate directory. Cross-compilation is supported too.
    Currently the x86, arm, arm64 and uml architectures enable plugins.

    The directory of the gcc plugins is scripts/gcc-plugins. You can use a file or a directory
    there. The plugins compile with these options:
    * -fno-rtti: gcc is compiled with this option so the plugins must use it too
    * -fno-exceptions: this is inherited from gcc too
    * -fasynchronous-unwind-tables: this is inherited from gcc too
    * -ggdb: it is useful for debugging a plugin (better backtrace on internal
    errors)
    * -Wno-narrowing: to suppress warnings from gcc headers (ipa-utils.h)
    * -Wno-unused-variable: to suppress warnings from gcc headers (gcc_version
    variable, plugin-version.h)

    The infrastructure introduces a new Makefile target called gcc-plugins. It
    supports all gcc versions from 4.5 to 6.0. The scripts/gcc-plugin.sh script
    chooses the proper host compiler (gcc-4.7 can be built by either gcc or g++).
    This script also checks the availability of the included headers in
    scripts/gcc-plugins/gcc-common.h.

    The gcc-common.h header contains frequently included headers for GCC plugins
    and it has a compatibility layer for the supported gcc versions.

    The gcc-generate-*-pass.h headers automatically generate the registration
    structures for GIMPLE, SIMPLE_IPA, IPA and RTL passes.

    Note that 'make clean' keeps the *.so files (only the distclean or mrproper
    targets clean all) because they are needed for out-of-tree modules.

    Based on work created by the PaX Team.

    Signed-off-by: Emese Revfy
    Acked-by: Kees Cook
    Signed-off-by: Michal Marek

    Emese Revfy
     

26 Feb, 2016

1 commit

  • Place a system_extra_cert buffer of configurable size, right after the
    system_certificate_list, so that inserted keys can be readily processed by
    the existing mechanism. Added script takes a key file and a kernel image
    and inserts its contents to the reserved area. The
    system_certificate_list_size is also adjusted accordingly.

    Call the script as:

    scripts/insert-sys-cert -b -c

    If vmlinux has no symbol table, supply System.map file with -s flag.
    Subsequent runs replace the previously inserted key, instead of appending
    the new one.

    Signed-off-by: Mehmet Kayaalp
    Signed-off-by: David Howells
    Acked-by: Mimi Zohar

    Mehmet Kayaalp
     

28 Sep, 2015

1 commit

  • Currently the encoding of documents generated by DocBook depends on
    the current locale. Make the output reproducible independently of
    the locale, by setting the encoding to UTF-8 (LC_CTYPE=C.UTF-8) by
    preference, or ASCII (LC_CTYPE=C) as a fallback.

    LC_CTYPE can normally be overridden by LC_ALL, but the top-level
    Makefile unsets that.

    Signed-off-by: Ben Hutchings
    [jc: added check-lc_ctype to .gitignore]
    Signed-off-by: Jonathan Corbet

    Ben Hutchings
     

13 Aug, 2015

1 commit


07 Aug, 2015

2 commits

  • Where an external PEM file or PKCS#11 URI is given, we can get the cert
    from it for ourselves instead of making the user drop signing_key.x509
    in place for us.

    Signed-off-by: David Woodhouse
    Signed-off-by: David Howells

    David Woodhouse
     
  • Move to using PKCS#7 messages as module signatures because:

    (1) We have to be able to support the use of X.509 certificates that don't
    have a subjKeyId set. We're currently relying on this to look up the
    X.509 certificate in the trusted keyring list.

    (2) PKCS#7 message signed information blocks have a field that supplies the
    data required to match with the X.509 certificate that signed it.

    (3) The PKCS#7 certificate carries fields that specify the digest algorithm
    used to generate the signature in a standardised way and the X.509
    certificates specify the public key algorithm in a standardised way - so
    we don't need our own methods of specifying these.

    (4) We now have PKCS#7 message support in the kernel for signed kexec purposes
    and we can make use of this.

    To make this work, the old sign-file script has been replaced with a program
    that needs compiling in a previous patch. The rules to build it are added
    here.

    Signed-off-by: David Howells
    Tested-by: Vivek Goyal

    David Howells
     

18 Feb, 2015

1 commit

  • This provides the basic infrastructure to load kernel-specific python
    helper scripts when debugging the kernel in gdb.

    The loading mechanism is based on gdb loading for -gdb.py when
    opening . Therefore, this places a corresponding link to the
    main helper script into the output directory that contains vmlinux.

    The main scripts will pull in submodules containing Linux specific gdb
    commands and functions. To avoid polluting the source directory with
    compiled python modules, we link to them from the object directory.

    Due to gdb.parse_and_eval and string redirection for gdb.execute, we
    depend on gdb >= 7.2.

    This feature is enabled via CONFIG_GDB_SCRIPTS.

    Signed-off-by: Jan Kiszka
    Acked-by: Michal Marek [kbuild stuff]
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     

09 Aug, 2014

1 commit

  • This patch series does not do kernel signature verification yet. I plan
    to post another patch series for that. Now distributions are already
    signing PE/COFF bzImage with PKCS7 signature I plan to parse and verify
    those signatures.

    Primary goal of this patchset is to prepare groundwork so that kernel
    image can be signed and signatures be verified during kexec load. This
    should help with two things.

    - It should allow kexec/kdump on secureboot enabled machines.

    - In general it can help even without secureboot. By being able to verify
    kernel image signature in kexec, it should help with avoiding module
    signing restrictions. Matthew Garret showed how to boot into a custom
    kernel, modify first kernel's memory and then jump back to old kernel and
    bypass any policy one wants to.

    This patch (of 15):

    Kexec wants to use bin2c and it wants to use it really early in the build
    process. See arch/x86/purgatory/ code in later patches.

    So move bin2c in scripts/basic so that it can be built very early and
    be usable by arch/x86/purgatory/

    Signed-off-by: Vivek Goyal
    Cc: Borislav Petkov
    Cc: Michael Kerrisk
    Cc: Yinghai Lu
    Cc: Eric Biederman
    Cc: H. Peter Anvin
    Cc: Matthew Garrett
    Cc: Greg Kroah-Hartman
    Cc: Dave Young
    Cc: WANG Chao
    Cc: Baoquan He
    Cc: Andy Lutomirski
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vivek Goyal
     

10 Jun, 2014

1 commit


15 Mar, 2014

1 commit


08 Oct, 2012

1 commit

  • Add a simple ASN.1 grammar compiler. This produces a bytecode output that can
    be fed to a decoder to inform the decoder how to interpret the ASN.1 stream it
    is trying to parse.

    Action functions can be specified in the grammar by interpolating:

    ({ foo })

    after a type, for example:

    SubjectPublicKeyInfo ::= SEQUENCE {
    algorithm AlgorithmIdentifier,
    subjectPublicKey BIT STRING ({ do_key_data })
    }

    The decoder is expected to call these after matching this type and parsing the
    contents if it is a constructed type.

    The grammar compiler does not currently support the SET type (though it does
    support SET OF) as I can't see a good way of tracking which members have been
    encountered yet without using up extra stack space.

    Currently, the grammar compiler will fail if more than 256 bytes of bytecode
    would be produced or more than 256 actions have been specified as it uses
    8-bit jump values and action indices to keep space usage down.

    Signed-off-by: David Howells
    Signed-off-by: Rusty Russell

    David Howells
     

24 May, 2012

1 commit

  • Pull exception table generation updates from Ingo Molnar:
    "The biggest change here is to allow the build-time sorting of the
    exception table, to speed up booting. This is achieved by the
    architecture enabling BUILDTIME_EXTABLE_SORT. This option is enabled
    for x86 and MIPS currently.

    On x86 a number of fixes and changes were needed to allow build-time
    sorting of the exception table, in particular a relocation invariant
    exception table format was needed. This required the abstracting out
    of exception table protocol and the removal of 20 years of accumulated
    assumptions about the x86 exception table format.

    While at it, this tree also cleans up various other aspects of
    exception handling, such as early(er) exception handling for
    rdmsr_safe() et al.

    All in one, as the result of these changes the x86 exception code is
    now pretty nice and modern. As an added bonus any regressions in this
    code will be early and violent crashes, so if you see any of those,
    you'll know whom to blame!"

    Fix up trivial conflicts in arch/{mips,x86}/Kconfig files due to nearby
    modifications of other core architecture options.

    * 'x86-extable-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (35 commits)
    Revert "x86, extable: Disable presorted exception table for now"
    scripts/sortextable: Handle relative entries, and other cleanups
    x86, extable: Switch to relative exception table entries
    x86, extable: Disable presorted exception table for now
    x86, extable: Add _ASM_EXTABLE_EX() macro
    x86, extable: Remove open-coded exception table entries in arch/x86/ia32/ia32entry.S
    x86, extable: Remove open-coded exception table entries in arch/x86/include/asm/xsave.h
    x86, extable: Remove open-coded exception table entries in arch/x86/include/asm/kvm_host.h
    x86, extable: Remove the now-unused __ASM_EX_SEC macros
    x86, extable: Remove open-coded exception table entries in arch/x86/xen/xen-asm_32.S
    x86, extable: Remove open-coded exception table entries in arch/x86/um/checksum_32.S
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/usercopy_32.c
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/putuser.S
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/getuser.S
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/csum-copy_64.S
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/copy_user_nocache_64.S
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/copy_user_64.S
    x86, extable: Remove open-coded exception table entries in arch/x86/lib/checksum_32.S
    x86, extable: Remove open-coded exception table entries in arch/x86/kernel/test_rodata.c
    x86, extable: Remove open-coded exception table entries in arch/x86/kernel/entry_64.S
    ...

    Linus Torvalds
     

19 May, 2012

1 commit

  • A new option is added to the relocs tool called '--realmode'.
    This option causes the generation of 16-bit segment relocations
    and 32-bit linear relocations for the real-mode code. When
    the real-mode code is moved to the low-memory during kernel
    initialization, these relocation entries can be used to
    relocate the code properly.

    In the assembly code 16-bit segment relocations must be relative
    to the 'real_mode_seg' absolute symbol. Linear relocations must be
    relative to a symbol prefixed with 'pa_'.

    16-bit segment relocation is used to load cs:ip in 16-bit code.
    Linear relocations are used in the 32-bit code for relocatable
    data references. They are declared in the linker script of the
    real-mode code.

    The relocs tool is moved to arch/x86/tools/relocs.c, and added new
    target archscripts that can be used to build scripts needed building
    an architecture. be compiled before building the arch/x86 tree.

    [ hpa: accelerating this because it detects invalid absolute
    relocations, a serious bug in binutils 2.22.52.0.x which currently
    produces bad kernels. ]

    Signed-off-by: H. Peter Anvin
    Link: http://lkml.kernel.org/r/1336501366-28617-2-git-send-email-jarkko.sakkinen@intel.com
    Signed-off-by: Jarkko Sakkinen
    Signed-off-by: H. Peter Anvin
    Cc:

    H. Peter Anvin
     

25 Apr, 2012

1 commit

  • x86 is now using relative rather than absolute addresses in its
    exception table, so we add a sorter for these. If there are
    relocations on the __ex_table section, they are redundant and probably
    incorrect after the sort, so they are zeroed out leaving them valid
    and consistent.

    Also use the unaligned safe accessors from tools/{be,le}_byteshift.h

    Signed-off-by: David Daney
    Link: http://lkml.kernel.org/r/1335291795-26693-2-git-send-email-ddaney.cavm@gmail.com
    Signed-off-by: H. Peter Anvin

    David Daney
     

20 Apr, 2012

1 commit


03 May, 2011

1 commit


17 Mar, 2011

1 commit

  • While changing our build system over to use the headers_install target
    as part of our klibc build, the following message started showing up in
    our logs:

    make[2]: `scripts/unifdef' is up to date.

    It turns out that the build blindly invokes a recursive make on this
    target, which causes make to emit this message when the target is
    already up to date. This isn't seen for most targets as the rest of the
    build relies primarily on the default target and on PHONY targets when
    invoking make recursively.

    Silence the above message when building unifdef as part of
    headers_install by hiding it behind a new PHONY target called
    "build_unifdef" that has an empty recipe.

    Signed-off-by: Mike Waychison
    Acked-by: WANG Cong
    Signed-off-by: Michal Marek

    Mike Waychison
     

15 Oct, 2010

1 commit

  • This patch adds the support for the C version of recordmcount and
    compile times show ~ 12% improvement.

    After verifying this works, other archs can add:

    HAVE_C_MCOUNT_RECORD

    in its Kconfig and it will use the C version of recordmcount
    instead of the perl version.

    Cc:
    Cc: Michal Marek
    Cc: linux-kbuild@vger.kernel.org
    Cc: John Reiser
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     

16 Sep, 2009

1 commit

  • Many years ago when this driver was written, it had a use, but these
    days it's nothing but trouble and distributions should not enable it
    in any situation.

    Pretty much every console device a sparc machine could see has a
    bonafide real driver, making the PROM console hack unnecessary.

    If any new device shows up, we should write a driver instead of
    depending upon this crutch to save us. We've been able to take care
    of this even when no chip documentation exists (sunxvr500, sunxvr2500)
    so there are no excuses.

    Signed-off-by: David S. Miller

    David S. Miller
     

03 May, 2009

1 commit

  • The powerpc kernel always requires an Open Firmware like device tree
    to supply device information. On systems without OF, this comes from
    a flattened device tree blob. This blob is usually generated by dtc,
    a tool which compiles a text description of the device tree into the
    flattened format used by the kernel. Sometimes, the bootwrapper makes
    small changes to the pre-compiled device tree blob (e.g. filling in
    the size of RAM). To do this it uses the libfdt library.

    Because these are only used on powerpc, the code for both these tools
    is included under arch/powerpc/boot (these were imported and are
    periodically updated from the upstream dtc tree).

    However, the microblaze architecture, currently being prepared for
    merging to mainline also uses dtc to produce device tree blobs. A few
    other archs have also mentioned some interest in using dtc.
    Therefore, this patch moves dtc and libfdt from arch/powerpc into
    scripts, where it can be used by any architecture.

    The vast bulk of this patch is a literal move, the rest is adjusting
    the various Makefiles to use dtc and libfdt correctly from their new
    locations.

    Signed-off-by: David Gibson
    Signed-off-by: Linus Torvalds

    David Gibson
     

07 Apr, 2009

1 commit

  • This reverts commit 8b249b6856f16f09b0e5b79ce5f4d435e439b9d6.

    This 'fix' is not necessary; we just need to undo the damage caused
    accidentally by Igor/Mauro in 4b29631db33292d416dc395c56122ea865e7635c
    ("V4L/DVB (9533): cx88: Add support for TurboSight TBS8910 DVB-S PCI card")

    Signed-off-by: David Woodhouse

    David Woodhouse
     

08 Jan, 2009

1 commit

  • Rafael reported:

    I get the following error from 'make modules_install' on my test boxes:

    HOSTCC firmware/ihex2fw
    /home/rafael/src/linux-2.6/firmware/ihex2fw.c:268: fatal error: opening dependency file firmware/.ihex2fw.d: Read-only file system
    compilation terminated.
    make[3]: *** [firmware/ihex2fw] Error 1
    make[2]: *** [_modinst_post] Error 2
    make[1]: *** [sub-make] Error 2
    make: *** [all] Error 2

    where the configuration is that the kernel is compiled on a build box
    with 'make O= -j5' and then is mounted over NFS read-only by
    each test box (full path to this directory is the same on the build box and on
    the test boxes). Then, I cd into , run 'make modules_install' and get
    the error above.

    The issue turns out to be that we when we install firmware pick
    up the list of firmware blobs from firmware/Makefile.
    And this triggers the Makefile rules to update ihex2fw.

    There were two solutions for this issue:
    1) Move the list of firmware blobs to a separate file
    2) Avoid ihex2fw rebuild by moving it to scripts

    As I seriously beleive that the list of firmware blobs should be
    done in a fundamental different way solution 2) was selected.

    Reported-and-tested-by: "Rafael J. Wysocki"
    Signed-off-by: Sam Ravnborg
    Cc: David Woodhouse

    Sam Ravnborg
     

27 Aug, 2008

1 commit

  • In August 2006 I posted a patch generating a minimal SELinux policy. This
    week, David P. Quigley posted an updated version of that as a patch against
    the kernel. It also had nice logic for auto-installing the policy.

    Following is David's original patch intro (preserved especially
    bc it has stats on the generated policies):

    se interested in the changes there were only two significant
    changes. The first is that the iteration through the list of classes
    used NULL as a sentinel value. The problem with this is that the
    class_to_string array actually has NULL entries in its table as place
    holders for the user space object classes.

    The second change was that it would seem at some point the initial sids
    table was NULL terminated. This is no longer the case so that iteration
    has to be done on array length instead of looking for NULL.

    Some statistics on the policy that it generates:

    The policy consists of 523 lines which contain no blank lines. Of those
    523 lines 453 of them are class, permission, and initial sid
    definitions. These lines are usually little to no concern to the policy
    developer since they will not be adding object classes or permissions.
    Of the remaining 70 lines there is one type, one role, and one user
    statement. The remaining lines are broken into three portions. The first
    group are TE allow rules which make up 29 of the remaining lines, the
    second is assignment of labels to the initial sids which consist of 27
    lines, and file system labeling statements which are the remaining 11.

    In addition to the policy.conf generated there is a single file_contexts
    file containing two lines which labels the entire system with base_t.

    This policy generates a policy.23 binary that is 7920 bytes.

    (then a few versions later...):

    The new policy is 587 lines (stripped of blank lines) with 476 of those
    lines being the boilerplate that I mentioned last time. The remaining
    111 lines have the 3 lines for type, user, and role, 70 lines for the
    allow rules (one for each object class including user space object
    classes), 27 lines to assign types to the initial sids, and 11 lines for
    file system labeling. The policy binary is 9194 bytes.

    Changelog:

    Aug 26: Added Documentation/SELinux.txt
    Aug 26: Incorporated a set of comments by Stephen Smalley:
    1. auto-setup SELINUXTYPE=dummy
    2. don't auto-install if selinux is enabled with
    non-dummy policy
    3. don't re-compute policy version
    4. /sbin/setfiles not /usr/sbin/setfiles
    Aug 22: As per JMorris comments, made sure make distclean
    cleans up the mdp directory.
    Removed a check for file_contexts which is now
    created in the same file as the check, making it
    superfluous.

    Signed-off-by: Serge Hallyn
    Signed-off-by: David Quigley
    Signed-off-by: James Morris

    Serge E. Hallyn
     

01 Oct, 2006

1 commit

  • The driver for /proc/config.gz consumes rather a lot of memory and it is in
    fact possible to build it as a module.

    In some ways this is a bit risky, because the .config which is used for
    compiling kernel/configs.c isn't necessarily the same as the .config which was
    used to build vmlinux.

    But OTOH the potential memory savings are decent, and it'd be fairly dumb to
    build your configs.o with a different .config.

    Signed-off-by: Andrew Morton
    Cc: "Randy.Dunlap"
    Cc: Sam Ravnborg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ross Biro
     

25 Sep, 2006

2 commits


17 Dec, 2005

1 commit


17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds