Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
alpha
kernel
binfmt_loader.c
Go to the documentation of this file.
1
#include <
linux/init.h
>
2
#include <linux/fs.h>
3
#include <
linux/file.h
>
4
#include <
linux/mm_types.h
>
5
#include <linux/binfmts.h>
6
#include <linux/a.out.h>
7
8
static
int
load_binary(
struct
linux_binprm
*bprm,
struct
pt_regs
*
regs
)
9
{
10
struct
exec
*eh = (
struct
exec
*)bprm->
buf
;
11
unsigned
long
loader;
12
struct
file
*
file
;
13
int
retval
;
14
15
if
(eh->
fh
.f_magic != 0x183 || (eh->
fh
.f_flags & 0x3000) != 0x3000)
16
return
-
ENOEXEC
;
17
18
if
(bprm->
loader
)
19
return
-
ENOEXEC
;
20
21
allow_write_access(bprm->
file
);
22
fput
(bprm->
file
);
23
bprm->
file
=
NULL
;
24
25
loader = bprm->vma->vm_end -
sizeof
(
void
*);
26
27
file
=
open_exec
(
"/sbin/loader"
);
28
retval
= PTR_ERR(
file
);
29
if
(IS_ERR(
file
))
30
return
retval
;
31
32
/* Remember if the application is TASO. */
33
bprm->taso = eh->
ah
.entry < 0x100000000
UL
;
34
35
bprm->
file
=
file
;
36
bprm->
loader
= loader;
37
retval
=
prepare_binprm
(bprm);
38
if
(
retval
< 0)
39
return
retval
;
40
return
search_binary_handler
(bprm,regs);
41
}
42
43
static
struct
linux_binfmt
loader_format = {
44
.load_binary =
load_binary
,
45
};
46
47
static
int
__init
init_loader_binfmt(
void
)
48
{
49
insert_binfmt(&loader_format);
50
return
0;
51
}
52
arch_initcall
(init_loader_binfmt);
Generated on Thu Jan 10 2013 12:51:02 for Linux Kernel by
1.8.2