cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

binfmt_loader.c (971B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/init.h>
      3#include <linux/fs.h>
      4#include <linux/file.h>
      5#include <linux/mm_types.h>
      6#include <linux/binfmts.h>
      7#include <linux/a.out.h>
      8
      9static int load_binary(struct linux_binprm *bprm)
     10{
     11	struct exec *eh = (struct exec *)bprm->buf;
     12	unsigned long loader;
     13	struct file *file;
     14	int retval;
     15
     16	if (eh->fh.f_magic != 0x183 || (eh->fh.f_flags & 0x3000) != 0x3000)
     17		return -ENOEXEC;
     18
     19	if (bprm->loader)
     20		return -ENOEXEC;
     21
     22	loader = bprm->vma->vm_end - sizeof(void *);
     23
     24	file = open_exec("/sbin/loader");
     25	retval = PTR_ERR(file);
     26	if (IS_ERR(file))
     27		return retval;
     28
     29	/* Remember if the application is TASO.  */
     30	bprm->taso = eh->ah.entry < 0x100000000UL;
     31
     32	bprm->interpreter = file;
     33	bprm->loader = loader;
     34	return 0;
     35}
     36
     37static struct linux_binfmt loader_format = {
     38	.load_binary	= load_binary,
     39};
     40
     41static int __init init_loader_binfmt(void)
     42{
     43	insert_binfmt(&loader_format);
     44	return 0;
     45}
     46arch_initcall(init_loader_binfmt);