On Fri, May 12, 2017 at 2:41 PM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > On Fri, May 12, 2017 at 02:17:19PM -0700, Kees Cook wrote: > >> Two things are at risk from stack exhaustion: thread_info (mainly >> addr_limit) when on the stack (fixed by THREAD_INFO_IN_TASK), and > > Really? Let's take a look at arm, for example: > > struct thread_info { > unsigned long flags; /* low level flags */ > int preempt_count; /* 0 => preemptable, <0 => bug */ > mm_segment_t addr_limit; /* address limit */ > struct task_struct *task; /* main task structure */ > > and current() is defined as current_thread_info()->task. > > Seriously, look at these beasts. Overwriting ->addr_limit is nowhere near > the top threat. If attacker can overwrite thread_info, you have lost. I don't disagree, but the type of attack is different. If the attacker overwrites task_struct pointer, then they need to have built an false one, and that may be made difficult by PAN, or need to know more about kernel memory layout (rather than only stack depth), etc. Attacking addr_limit makes it very very easy to upgrade attack capabilities. I'm not say thread_info shouldn't be moved off the stack. -Kees -- Kees Cook Pixel Security -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html