Messages in this thread | | | Subject | Re: [RFC] x86/vdso: Align vdso after searching for free area | From | Dmitry Safonov <> | Date | Tue, 12 Jun 2018 22:24:11 +0100 |
| |
On Tue, 2018-06-12 at 21:49 +0100, Dmitry Safonov wrote: > There is errata for AMD family 15h CPUs [1] and since > commit dfb09f9b7ab03 ("x86, amd: Avoid cache aliasing penalties on > AMD > family 15h") bits [14:12] are being cleared for shared libraries. > Also per-boot ASLR applies over upper bits by OR directly over the > address. > > As we need special alignment and lower bits values to be set, it > makes > only a little sense to call get_unmapped_area() after calculating the > address. It also can lead to random crashes if get_unmapped_area() > actually changes/aligns the address, which we observed on 15h CPU. > Usually it's not a problem as there isn't many mappings (except > possibly > ld.so, uprobes?) and result address is the same before/after > get_unmapped_area(). > > Move align_vdso_addr() after get_unmapped_area() to make sure that > errata for AMD 15h is always applied.
Alternative dirty-hacky idea: specify some (struct file*) to get_unmapped_area() for vdso vma, then mapping would be automatically aligned. Dirty as hell as relies on get_unmapped_area() realization details.
-- Dima
| |