On 05/14/14 at 03:49pm, Dave Young wrote: > X86 will pass setup_data region while necessary, these regions could be > overwitten by kernel due to kaslr. > > Thus iterate and add setup regions to mem_avoid[] in this patch. > Set max mem avoid entries 32, hopefully it will be enough. > > Signed-off-by: Dave Young <dyo...@redhat.com> > --- > arch/x86/boot/compressed/aslr.c | 28 +++++++++++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > Index: linux-2.6/arch/x86/boot/compressed/aslr.c > =================================================================== > --- linux-2.6.orig/arch/x86/boot/compressed/aslr.c > +++ linux-2.6/arch/x86/boot/compressed/aslr.c > @@ -110,8 +110,9 @@ struct mem_vector { > unsigned long size; > }; > > -#define MEM_AVOID_MAX 5 > +#define MEM_AVOID_MAX 32 > static struct mem_vector mem_avoid[MEM_AVOID_MAX]; > +static int mem_avoid_nr; > > static bool mem_contains(struct mem_vector *region, struct mem_vector *item) > { > @@ -135,6 +136,28 @@ static bool mem_overlaps(struct mem_vect > return true; > } > > +static void mem_avoid_setup_data(void) > +{ > + struct setup_data *data; > + u64 pa_data; > + > + if (mem_avoid_nr >= MEM_AVOID_MAX) { > + debug_putstr("KASLR: too many setup_data ranges.\n"); > + return; > + } > + > + pa_data = real_mode->hdr.setup_data; > + while (pa_data) { > + data = (struct setup_data *)pa_data; > + if (pa_data < CONFIG_RANDOMIZE_BASE_MAX_OFFSET) { > + mem_avoid[mem_avoid_nr].start = pa_data; > + mem_avoid[mem_avoid_nr].size = sizeof(*data) + > data->len; > + mem_avoid_nr++; > + } > + pa_data = data->next; > + } > +} > + > static void mem_avoid_init(unsigned long input, unsigned long input_size, > unsigned long output, unsigned long output_size) > { > @@ -177,6 +200,9 @@ static void mem_avoid_init(unsigned long > /* Avoid stack memory. */ > mem_avoid[4].start = (unsigned long)free_mem_end_ptr; > mem_avoid[4].size = BOOT_STACK_SIZE; > + mem_avoid_nr = 5; > + > + mem_avoid_setup_data(); > } > > /* Does this memory vector overlap a known avoided area? */
Please ignore this one, sent the right version as V2. The difference is V2 updated to iterate mem_avoid_nr instead of MEM_AVOID_MAX. Thanks Dave -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/