[PATCH v16 16/21] powerpc: Activate CONFIG_THREAD_INFO_IN_TASK

Christophe Leroy christophe.leroy at c-s.fr
Thu Feb 7 17:07:38 AEDT 2019



Le 07/02/2019 à 05:53, Nicholas Piggin a écrit :
> Michael Ellerman's on February 5, 2019 9:32 pm:
>> From: Christophe Leroy <christophe.leroy at c-s.fr>
>>
>> This patch activates CONFIG_THREAD_INFO_IN_TASK which
>> moves the thread_info into task_struct.
>>
>> Moving thread_info into task_struct has the following advantages:
>>    - It protects thread_info from corruption in the case of stack
>>      overflows.
>>    - Its address is harder to determine if stack addresses are leaked,
>>      making a number of attacks more difficult.
>>
>> This has the following consequences:
>>    - thread_info is now located at the beginning of task_struct.
>>    - The 'cpu' field is now in task_struct, and only exists when
>>      CONFIG_SMP is active.
>>    - thread_info doesn't have anymore the 'task' field.
>>
>> This patch:
>>    - Removes all recopy of thread_info struct when the stack changes.
>>    - Changes the CURRENT_THREAD_INFO() macro to point to current.
>>    - Selects CONFIG_THREAD_INFO_IN_TASK.
>>    - Modifies raw_smp_processor_id() to get ->cpu from current without
>>      including linux/sched.h to avoid circular inclusion and without
>>      including asm/asm-offsets.h to avoid symbol names duplication
>>      between ASM constants and C constants.
> 
> Come to think of it, can this patch be split out entirely and moved
> earlier as a 32-bit patch? 64-bit does not require that change or the
> additional build step AFAIKS?

Euh ... we may do that but the change in smp.h cannot go as is until 
thread_info is moved into current. So it would mean only having the 
Makefile change and the GENERATING_ASM_OFFSETS define in asm-offsets.c, 
and eventually an intermediate version of raw_smp_processor_id() in 
smp.h, that would have to get modified in the activation patch anyway.

So I'm not sure this is really worth it.

Christophe


More information about the Linuxppc-dev mailing list