]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - fs/binfmt_elf.c
Merge tag 'pm-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
[thirdparty/linux.git] / fs / binfmt_elf.c
index 92402c5606a139d2a4b498217501e164d2484d76..8945671fe0e53141d98dada9354eb01a07df1baf 100644 (file)
@@ -1488,7 +1488,6 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
            vma->vm_pgoff == 0 && (vma->vm_flags & VM_READ)) {
                u32 __user *header = (u32 __user *) vma->vm_start;
                u32 word;
-               mm_segment_t fs = get_fs();
                /*
                 * Doing it this way gets the constant folded by GCC.
                 */
@@ -1501,14 +1500,8 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
                magic.elfmag[EI_MAG1] = ELFMAG1;
                magic.elfmag[EI_MAG2] = ELFMAG2;
                magic.elfmag[EI_MAG3] = ELFMAG3;
-               /*
-                * Switch to the user "segment" for get_user(),
-                * then put back what elf_core_dump() had in place.
-                */
-               set_fs(USER_DS);
                if (unlikely(get_user(word, header)))
                        word = 0;
-               set_fs(fs);
                if (word == magic.cmp)
                        return PAGE_SIZE;
        }
@@ -1689,10 +1682,7 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
 static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
                const kernel_siginfo_t *siginfo)
 {
-       mm_segment_t old_fs = get_fs();
-       set_fs(KERNEL_DS);
-       copy_siginfo_to_user((user_siginfo_t __user *) csigdata, siginfo);
-       set_fs(old_fs);
+       copy_siginfo_to_external(csigdata, siginfo);
        fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
 }
 
@@ -2319,7 +2309,6 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum,
 static int elf_core_dump(struct coredump_params *cprm)
 {
        int has_dumped = 0;
-       mm_segment_t fs;
        int segs, i;
        size_t vma_data_size = 0;
        struct vm_area_struct *vma, *gate_vma;
@@ -2368,13 +2357,10 @@ static int elf_core_dump(struct coredump_params *cprm)
         * notes.  This also sets up the file header.
         */
        if (!fill_note_info(&elf, e_phnum, &info, cprm->siginfo, cprm->regs))
-               goto cleanup;
+               goto end_coredump;
 
        has_dumped = 1;
 
-       fs = get_fs();
-       set_fs(KERNEL_DS);
-
        offset += sizeof(elf);                          /* Elf header */
        offset += segs * sizeof(struct elf_phdr);       /* Program headers */
 
@@ -2502,9 +2488,6 @@ static int elf_core_dump(struct coredump_params *cprm)
        }
 
 end_coredump:
-       set_fs(fs);
-
-cleanup:
        free_note_info(&info);
        kfree(shdr4extnum);
        kvfree(vma_filesz);