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, 05 Apr 2022 21:24:02 +0200
From:   Thomas Gleixner <tglx@...utronix.de>
To:     Alexey Dobriyan <adobriyan@...il.com>,
        Peter Zijlstra <peterz@...radead.org>
Cc:     x86@...nel.org, mingo@...hat.com, bp@...en8.de,
        dave.hansen@...ux.intel.com, hpa@...or.com,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/5] x86/alternative: record .altinstructions section
 entity size

On Sun, Mar 13 2022 at 21:05, Alexey Dobriyan wrote:
> On Sat, Mar 12, 2022 at 10:17:40PM +0100, Peter Zijlstra wrote:
>> On Fri, Mar 11, 2022 at 05:43:10PM +0300, Alexey Dobriyan wrote:
>> > +	".pushsection .altinstructions,\"aM\",@progbits," __stringify(sizeof_struct_alt_instr) "\n"\
>> > +	".pushsection .altinstructions,\"aM\",@progbits," __stringify(sizeof_struct_alt_instr) "\n"\
>> > +	".pushsection .altinstructions,\"aM\",@progbits," __stringify(sizeof_struct_alt_instr) "\n"\
>> 
>> > +	.pushsection .altinstructions,"aM",@progbits,sizeof_struct_alt_instr
>> > +	.pushsection .altinstructions,"aM",@progbits,sizeof_struct_alt_instr
>> 
>> Aside of adding entsize, you're also adding the M(ergable) bit. Also,
>> those lines are on the unwieldy side of things.
>
> binutils doc says
>
> 	https://sourceware.org/binutils/docs/as/Section.html
>
> 	If flags contains the M symbol then the type argument must be specified as well as an extra argument—entsize—like this:
>
> 	.section name , "flags"M, @type, entsize
>
> 	Sections with the M flag but not S flag must contain fixed size constants,
> 	each entsize octets long. Sections with both M and S must contain zero
> 	terminated strings where each character is entsize bytes long. The linker
> 	may remove duplicates within sections with the same name, same entity size
> 	and same flags. entsize must be an absolute expression. For sections with
> 	both M and S, a string which is a suffix of a larger string is considered
> 	a duplicate. Thus "def" will be merged with "abcdef"; A reference to the
> 	first "def" will be changed to a reference to "abcdef"+3.
>
> "a"M doesn't work, but "aM" does.
>
> I don't know if merging is the issue, it is not like alt replacements have names.

That does not matter. M merges any duplications in sections with the
same [section] name, entity size and flags.

     .pushsection .bar "aM" @progbits, 4
     .byte 0x01, 0x02, 0x03, 0x04
     .popsection

     .pushsection .bar "aM" @progbits, 4
     .byte 0x01, 0x02, 0x03, 0x04
     .popsection

Will create a section .bar with lenght 4 and the content:
     0x1,0x2,0x3,0x4

What saves you here is the fact that the altinstruction entries are
guaranteed to be unique, but that wants a big fat comment.

Thanks,

        tglx

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ