lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 21 Oct 2014 16:56:48 -0700
From:	Stephen Boyd <sboyd@...eaurora.org>
To:	josh@...htriplett.org,
	Peter Hüwe <PeterHuewe@....de>
CC:	linux-kernel@...r.kernel.org
Subject: Re: .exit.text section in vmlinux ?

On 10/21/2014 04:35 PM, josh@...htriplett.org wrote:
> On Tue, Oct 21, 2014 at 11:19:01PM +0200, Peter Hüwe wrote:
>> as far as I remember everything marked with __exit or __exit_data will only be 
>> used/called when unloading a module, and gets moved to the .exit.text or 
>> .exit.data sections.
>>
>> Why are these sections present in the vmlinux/vmlinux.bin/bzImage and not 
>> dropped by the linker or at least objdump? 
>> This code will never be called for everything compiled in - in an allyesconfig 
>> build these sections account for ~80kb of code.
>>
>> Is there something I'm missing here, or can we add "--remove-section 
>> .exit.data --remove-section .exit.text" to the OBJCOPYFLAGS for vmlinux?
> Good catch!  I didn't realize that section even appeared in vmlinux; it
> should be entirely omitted.
>
> Removing it via objcopy would work, but seems suboptimal, since that
> won't let the compiler know the functions are unused (and thus that it
> can throw away code and data only referenced from __exit, or inline
> functions into their now-only caller, etc).  So, ideally, when compiling
> code in the kernel rather than in modules, we should tell the compiler
> enough to omit functions tagged as __exit.
>
> (Also, in the course of working on this, I discovered that several
> files declare functions as "static inline ... __exit", which makes no
> sense, and which actually forces an out-of-line version to exist even if
> the function has no body.  For instance, exit_amd_microcode and
> bcma_host_soc_unregister_driver.)
>
> The following patch seems to mostly do the right thing, though for some
> reason some __exit functions remain in the final binary (such as
> md_exit and mon_exit):
>
> --->8---
> From 1646d051a4a4c18b9a6163fceabcafa20628c728 Mon Sep 17 00:00:00 2001
> From: Josh Triplett <josh@...htriplett.org>
> Date: Tue, 21 Oct 2014 16:14:19 -0700
> Subject: [PATCH] linux/init.h: Always omit __exit code and data for in-kernel
>  compilation
>
> __exit code and data only exists for module removal; when compiling such
> code in the kernel, omit the __exit functions to save space.  For x86
> defconfig this saves about 9k, and significantly more in the compiled
> binary size.

Does it boot? Usually we can't get rid of the exit section because we
have some table pointing at it somewhere for bug tables, alternatives,
etc. See this comment in arch/x86/kernel/vmlinux.lds.S for example:

        /*
         * .exit.text is discard at runtime, not link time, to deal with
         *  references from .altinstructions and .eh_frame
         */
        .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
                EXIT_TEXT
        }

        .exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) {
                EXIT_DATA
        }


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ