| tag | line | file | source code |
| bprm | 51 | fs/binfmt_elf.c | static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs); |
| bprm | 355 | fs/binfmt_elf.c | load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) |
| bprm | 384 | fs/binfmt_elf.c | elf_ex = *((struct elfhdr *) bprm->buf); /* exec-header */ |
| bprm | 397 | fs/binfmt_elf.c | (!bprm->inode->i_op || !bprm->inode->i_op->default_file_ops || |
| bprm | 398 | fs/binfmt_elf.c | !bprm->inode->i_op->default_file_ops->mmap)){ |
| bprm | 412 | fs/binfmt_elf.c | retval = read_exec(bprm->inode, elf_ex.e_phoff, (char *) elf_phdata, |
| bprm | 425 | fs/binfmt_elf.c | elf_exec_fileno = open_inode(bprm->inode, O_RDONLY); |
| bprm | 464 | fs/binfmt_elf.c | retval = read_exec(bprm->inode,elf_ppnt->p_offset,elf_interpreter, |
| bprm | 483 | fs/binfmt_elf.c | retval = read_exec(interpreter_inode,0,bprm->buf,128, 1); |
| bprm | 486 | fs/binfmt_elf.c | interp_ex = *((struct exec *) bprm->buf); /* exec-header */ |
| bprm | 487 | fs/binfmt_elf.c | interp_elf_ex = *((struct elfhdr *) bprm->buf); /* exec-header */ |
| bprm | 526 | fs/binfmt_elf.c | if (!bprm->sh_bang) { |
| bprm | 534 | fs/binfmt_elf.c | bprm->p = copy_strings(1,&passed_p,bprm->page,bprm->p,2); |
| bprm | 535 | fs/binfmt_elf.c | bprm->argc++; |
| bprm | 538 | fs/binfmt_elf.c | if (!bprm->p) { |
| bprm | 549 | fs/binfmt_elf.c | flush_old_exec(bprm); |
| bprm | 560 | fs/binfmt_elf.c | bprm->p += setup_arg_pages(0, bprm->page); |
| bprm | 561 | fs/binfmt_elf.c | current->mm->start_stack = bprm->p; |
| bprm | 655 | fs/binfmt_elf.c | current->executable = bprm->inode; |
| bprm | 656 | fs/binfmt_elf.c | bprm->inode->i_count++; |
| bprm | 661 | fs/binfmt_elf.c | current->suid = current->euid = current->fsuid = bprm->e_uid; |
| bprm | 662 | fs/binfmt_elf.c | current->sgid = current->egid = current->fsgid = bprm->e_gid; |
| bprm | 663 | fs/binfmt_elf.c | bprm->p -= MAX_ARG_PAGES*PAGE_SIZE; |
| bprm | 664 | fs/binfmt_elf.c | bprm->p = (unsigned long) |
| bprm | 665 | fs/binfmt_elf.c | create_elf_tables((char *)bprm->p, |
| bprm | 666 | fs/binfmt_elf.c | bprm->argc, |
| bprm | 667 | fs/binfmt_elf.c | bprm->envc, |
| bprm | 678 | fs/binfmt_elf.c | current->mm->start_stack = bprm->p; |
| bprm | 715 | fs/binfmt_elf.c | start_thread(regs, elf_entry, bprm->p); |
| bprm | 310 | fs/exec.c | unsigned long * create_tables(char * p, struct linux_binprm * bprm, int ibcs) |
| bprm | 315 | fs/exec.c | int argc = bprm->argc; |
| bprm | 316 | fs/exec.c | int envc = bprm->envc; |
| bprm | 336 | fs/exec.c | if (bprm->loader) { |
| bprm | 339 | fs/exec.c | put_user(bprm->loader, --sp); |
| bprm | 342 | fs/exec.c | put_user(bprm->exec, --sp); |
| bprm | 560 | fs/exec.c | void flush_old_exec(struct linux_binprm * bprm) |
| bprm | 568 | fs/exec.c | name = bprm->filename; |
| bprm | 583 | fs/exec.c | if (bprm->e_uid != current->euid || bprm->e_gid != current->egid || |
| bprm | 584 | fs/exec.c | permission(bprm->inode,MAY_READ)) |
| bprm | 607 | fs/exec.c | struct linux_binprm bprm; |
| bprm | 616 | fs/exec.c | bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); |
| bprm | 618 | fs/exec.c | bprm.page[i] = 0; |
| bprm | 619 | fs/exec.c | retval = open_namei(filename, 0, 0, &bprm.inode, NULL); |
| bprm | 622 | fs/exec.c | bprm.filename = filename; |
| bprm | 623 | fs/exec.c | bprm.loader = 0; |
| bprm | 624 | fs/exec.c | bprm.exec = 0; |
| bprm | 625 | fs/exec.c | if ((bprm.argc = count(argv)) < 0) |
| bprm | 626 | fs/exec.c | return bprm.argc; |
| bprm | 627 | fs/exec.c | if ((bprm.envc = count(envp)) < 0) |
| bprm | 628 | fs/exec.c | return bprm.envc; |
| bprm | 631 | fs/exec.c | if (!S_ISREG(bprm.inode->i_mode)) { /* must be regular file */ |
| bprm | 635 | fs/exec.c | if (IS_NOEXEC(bprm.inode)) { /* FS mustn't be mounted noexec */ |
| bprm | 639 | fs/exec.c | if (!bprm.inode->i_sb) { |
| bprm | 643 | fs/exec.c | i = bprm.inode->i_mode; |
| bprm | 644 | fs/exec.c | if (IS_NOSUID(bprm.inode) && (((i & S_ISUID) && bprm.inode->i_uid != current-> |
| bprm | 645 | fs/exec.c | euid) || ((i & S_ISGID) && !in_group_p(bprm.inode->i_gid))) && !suser()) { |
| bprm | 651 | fs/exec.c | bprm.e_uid = current->euid; |
| bprm | 652 | fs/exec.c | bprm.e_gid = current->egid; |
| bprm | 654 | fs/exec.c | bprm.e_uid = (i & S_ISUID) ? bprm.inode->i_uid : current->euid; |
| bprm | 655 | fs/exec.c | bprm.e_gid = (i & S_ISGID) ? bprm.inode->i_gid : current->egid; |
| bprm | 657 | fs/exec.c | if ((retval = permission(bprm.inode, MAY_EXEC)) != 0) |
| bprm | 659 | fs/exec.c | if (!(bprm.inode->i_mode & 0111) && fsuser()) { |
| bprm | 664 | fs/exec.c | if (bprm.inode->i_wcount > 0) { |
| bprm | 668 | fs/exec.c | memset(bprm.buf,0,sizeof(bprm.buf)); |
| bprm | 669 | fs/exec.c | retval = read_exec(bprm.inode,0,bprm.buf,128,1); |
| bprm | 672 | fs/exec.c | if ((bprm.buf[0] == '#') && (bprm.buf[1] == '!') && (!sh_bang)) { |
| bprm | 680 | fs/exec.c | iput(bprm.inode); |
| bprm | 681 | fs/exec.c | bprm.buf[127] = '\0'; |
| bprm | 682 | fs/exec.c | if ((cp = strchr(bprm.buf, '\n')) == NULL) |
| bprm | 683 | fs/exec.c | cp = bprm.buf+127; |
| bprm | 685 | fs/exec.c | while (cp > bprm.buf) { |
| bprm | 692 | fs/exec.c | for (cp = bprm.buf+2; (*cp == ' ') || (*cp == '\t'); cp++); |
| bprm | 712 | fs/exec.c | bprm.p = copy_strings(bprm.envc, envp, bprm.page, bprm.p, 0); |
| bprm | 713 | fs/exec.c | bprm.p = copy_strings(--bprm.argc, argv+1, bprm.page, bprm.p, 0); |
| bprm | 723 | fs/exec.c | bprm.p = copy_strings(1, &bprm.filename, bprm.page, bprm.p, 2); |
| bprm | 724 | fs/exec.c | bprm.argc++; |
| bprm | 726 | fs/exec.c | bprm.p = copy_strings(1, &i_arg, bprm.page, bprm.p, 2); |
| bprm | 727 | fs/exec.c | bprm.argc++; |
| bprm | 729 | fs/exec.c | bprm.p = copy_strings(1, &i_name, bprm.page, bprm.p, 2); |
| bprm | 730 | fs/exec.c | bprm.argc++; |
| bprm | 731 | fs/exec.c | if (!bprm.p) { |
| bprm | 740 | fs/exec.c | retval = open_namei(interp, 0, 0, &bprm.inode, NULL); |
| bprm | 747 | fs/exec.c | if (!loader && (((struct exec *) bprm.buf)->fh.f_flags & 0x3000)) { |
| bprm | 749 | fs/exec.c | iput(bprm.inode); |
| bprm | 751 | fs/exec.c | bprm.p = copy_strings(1, dynloader, bprm.page, bprm.p, 2); |
| bprm | 752 | fs/exec.c | bprm.loader = bprm.p; |
| bprm | 753 | fs/exec.c | retval = open_namei(dynloader[0], 0, 0, &bprm.inode, NULL); |
| bprm | 760 | fs/exec.c | bprm.p = copy_strings(1, &bprm.filename, bprm.page, bprm.p, 2); |
| bprm | 761 | fs/exec.c | bprm.exec = bprm.p; |
| bprm | 762 | fs/exec.c | bprm.p = copy_strings(bprm.envc,envp,bprm.page,bprm.p,0); |
| bprm | 763 | fs/exec.c | bprm.p = copy_strings(bprm.argc,argv,bprm.page,bprm.p,0); |
| bprm | 764 | fs/exec.c | if (!bprm.p) { |
| bprm | 770 | fs/exec.c | bprm.sh_bang = sh_bang; |
| bprm | 775 | fs/exec.c | retval = fn(&bprm, regs); |
| bprm | 777 | fs/exec.c | iput(bprm.inode); |
| bprm | 785 | fs/exec.c | iput(bprm.inode); |
| bprm | 788 | fs/exec.c | free_page(bprm.page[i]); |
| bprm | 808 | fs/exec.c | static int load_aout_binary(struct linux_binprm * bprm, struct pt_regs * regs) |
| bprm | 814 | fs/exec.c | unsigned long p = bprm->p; |
| bprm | 817 | fs/exec.c | ex = *((struct exec *) bprm->buf); /* exec-header */ |
| bprm | 821 | fs/exec.c | bprm->inode->i_size < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) { |
| bprm | 835 | fs/exec.c | (fd_offset < bprm->inode->i_sb->s_blocksize)) { |
| bprm | 842 | fs/exec.c | flush_old_exec(bprm); |
| bprm | 853 | fs/exec.c | current->suid = current->euid = current->fsuid = bprm->e_uid; |
| bprm | 854 | fs/exec.c | current->sgid = current->egid = current->fsgid = bprm->e_gid; |
| bprm | 859 | fs/exec.c | read_exec(bprm->inode, 32, (char *) 0, ex.a_text+ex.a_data, 0); |
| bprm | 864 | fs/exec.c | fd = open_inode(bprm->inode, O_RDONLY); |
| bprm | 874 | fs/exec.c | read_exec(bprm->inode, fd_offset, |
| bprm | 914 | fs/exec.c | fd_offset = setup_arg_pages(ex.a_text,bprm->page) - MAX_ARG_PAGES*PAGE_SIZE; |
| bprm | 916 | fs/exec.c | if (bprm->loader) |
| bprm | 917 | fs/exec.c | bprm->loader += fd_offset; |
| bprm | 918 | fs/exec.c | bprm->exec += fd_offset; |
| bprm | 920 | fs/exec.c | p = (unsigned long)create_tables((char *)p, bprm, |
| bprm | 49 | include/linux/binfmts.h | extern void flush_old_exec(struct linux_binprm * bprm); |
| bprm | 51 | include/linux/binfmts.h | extern unsigned long * create_tables(char * p,struct linux_binprm * bprm,int ibcs); |