Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys



Le 31/07/2015 12:32, Ryota Ozaki a écrit :
> On Fri, Jul 31, 2015 at 12:28 AM, Maxime Villard <maxv%netbsd.org@localhost> wrote:
>> Module Name:    src
>> Committed By:   maxv
>> Date:           Thu Jul 30 15:28:18 UTC 2015
>>
>> Modified Files:
>>         src/sys/kern: exec_elf.c kern_pax.c
>>         src/sys/sys: exec_elf.h pax.h
>>
>> Log Message:
>> Revamp PaX:
>>  - don't confuse between ELF flags and proc flags. Introduce the proc-
>>    specific P_PAX_ASLR, P_PAX_MPROTECT and P_PAX_GUARD flags.
>>  - introduce pax_setup_elf_flags(), which takes as argument the PaX flag
>>    of the ELF PaX note section, and which sets the proc flag as
>>    appropriate. Also introduce a couple of other functions used for that
>>    purpose.
>>  - modify pax_aslr_active(), and all the other similar pieces of code, so
>>    that it checks the proc flag directly, without extra ELF computation
>>
>> In addition to making PaX clearer, the combination of these changes fixes
>> the following bug: if a non-PaX'ed process is launched, and then someone
>> sets security.pax.{aslr,mprotect,segvguard}.global=1, the process becomes
>> PaX'ed while its address space hasn't been randomized, which is not likely
>> to be a good idea.
>>
>> Now, only the proc flag is checked at runtime, which means the process's
>> PaX status won't be altered during the execution.
>>
>> Also:
>>  - declare PAX_DPRINTF, makes it more readable
>>  - fix a typo in exec_elf.h
> 
> http://releng.netbsd.org/b5reports/amd64/build/2015.07.30.21.47.51/test.html#lib_libc_sys_t_mprotect_mprotect_pax
> http://releng.netbsd.org/b5reports/i386/build/2015.07.30.15.29.52/test.html#lib_libc_sys_t_mprotect_mprotect_pax
> 
> It seems that the change adds a new failure on amd64/i386.
> Any ideas?

Nice!

This test just changes the sysctl, and expects to become PaX'ed. So of
course it no longer works, since it's precisely the bug I've fixed.

I don't know how to do that, but you need to fix it this way:
 - remove the "security.pax.mprotect.global" instruction in paxinit()
 - the test being a C file - therefore, an ELF binary -, you need to
   PaX the binary this way:
       paxctl +M t_mprotect

It needs to be automatically done in the makefile, or somewhere else.


> 
> Regards,
>   ozaki-r
> 
>>
>>
>> To generate a diff of this commit:
>> cvs rdiff -u -r1.72 -r1.73 src/sys/kern/exec_elf.c
>> cvs rdiff -u -r1.28 -r1.29 src/sys/kern/kern_pax.c
>> cvs rdiff -u -r1.148 -r1.149 src/sys/sys/exec_elf.h
>> cvs rdiff -u -r1.11 -r1.12 src/sys/sys/pax.h
>>
>> Please note that diffs are not public domain; they are subject to the
>> copyright notices on the relevant files.
>>


Home | Main Index | Thread Index | Old Index