···12081208 * check for an ELF header. If we find one, dump the first page to12091209 * aid in determining what was mapped here.12101210 */12111211- if (FILTER(ELF_HEADERS) && vma->vm_file != NULL && vma->vm_pgoff == 0) {12111211+ if (FILTER(ELF_HEADERS) &&12121212+ vma->vm_pgoff == 0 && (vma->vm_flags & VM_READ)) {12121213 u32 __user *header = (u32 __user *) vma->vm_start;12131214 u32 word;12151215+ mm_segment_t fs = get_fs();12141216 /*12151217 * Doing it this way gets the constant folded by GCC.12161218 */···12251223 magic.elfmag[EI_MAG1] = ELFMAG1;12261224 magic.elfmag[EI_MAG2] = ELFMAG2;12271225 magic.elfmag[EI_MAG3] = ELFMAG3;12281228- if (get_user(word, header) == 0 && word == magic.cmp)12261226+ /*12271227+ * Switch to the user "segment" for get_user(),12281228+ * then put back what elf_core_dump() had in place.12291229+ */12301230+ set_fs(USER_DS);12311231+ if (unlikely(get_user(word, header)))12321232+ word = 0;12331233+ set_fs(fs);12341234+ if (word == magic.cmp)12291235 return PAGE_SIZE;12301236 }12311237