Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
[GitHub/LineageOS/android_kernel_motorola_exynos9610.git] / arch / mips / kernel / elf.c
index 891f5ee639837af74b35c0190efaf727a73ab73b..6430bff21fff80a7bb6647c6af0198364cac7bdd 100644 (file)
@@ -8,9 +8,12 @@
  * option) any later version.
  */
 
+#include <linux/binfmts.h>
 #include <linux/elf.h>
+#include <linux/export.h>
 #include <linux/sched.h>
 
+#include <asm/cpu-features.h>
 #include <asm/cpu-info.h>
 
 /* Whether to accept legacy-NaN and 2008-NaN user binaries.  */
@@ -179,7 +182,7 @@ int arch_check_elf(void *_ehdr, bool has_interpreter, void *_interp_ehdr,
                        return -ELIBBAD;
        }
 
-       if (!config_enabled(CONFIG_MIPS_O32_FP64_SUPPORT))
+       if (!IS_ENABLED(CONFIG_MIPS_O32_FP64_SUPPORT))
                return 0;
 
        fp_abi = state->fp_abi;
@@ -285,7 +288,7 @@ void mips_set_personality_fp(struct arch_elf_state *state)
         * not be worried about N32/N64 binaries.
         */
 
-       if (!config_enabled(CONFIG_MIPS_O32_FP64_SUPPORT))
+       if (!IS_ENABLED(CONFIG_MIPS_O32_FP64_SUPPORT))
                return;
 
        switch (state->overall_fp_mode) {
@@ -326,3 +329,19 @@ void mips_set_personality_nan(struct arch_elf_state *state)
                BUG();
        }
 }
+
+int mips_elf_read_implies_exec(void *elf_ex, int exstack)
+{
+       if (exstack != EXSTACK_DISABLE_X) {
+               /* The binary doesn't request a non-executable stack */
+               return 1;
+       }
+
+       if (!cpu_has_rixi) {
+               /* The CPU doesn't support non-executable memory */
+               return 1;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL(mips_elf_read_implies_exec);