• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/

Lines Matching refs:bprm

160 void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
163 long diff = (long)(pages - bprm->vma_pages);
168 bprm->vma_pages = pages;
179 struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
187 ret = expand_stack_downwards(bprm->vma, pos);
192 ret = get_user_pages(current, bprm->mm, pos,
198 unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start;
201 acct_arg_size(bprm, size / PAGE_SIZE);
232 static void free_arg_page(struct linux_binprm *bprm, int i)
236 static void free_arg_pages(struct linux_binprm *bprm)
240 static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
243 flush_cache_page(bprm->vma, pos, page_to_pfn(page));
246 static int __bprm_mm_init(struct linux_binprm *bprm)
250 struct mm_struct *mm = bprm->mm;
252 bprm->vma = vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
282 bprm->p = vma->vm_end - sizeof(void *);
286 bprm->vma = NULL;
291 static bool valid_arg_len(struct linux_binprm *bprm, long len)
298 void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
302 struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
307 page = bprm->page[pos / PAGE_SIZE];
312 bprm->page[pos / PAGE_SIZE] = page;
322 static void free_arg_page(struct linux_binprm *bprm, int i)
324 if (bprm->page[i]) {
325 __free_page(bprm->page[i]);
326 bprm->page[i] = NULL;
330 static void free_arg_pages(struct linux_binprm *bprm)
335 free_arg_page(bprm, i);
338 static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
343 static int __bprm_mm_init(struct linux_binprm *bprm)
345 bprm->p = PAGE_SIZE * MAX_ARG_PAGES - sizeof(void *);
349 static bool valid_arg_len(struct linux_binprm *bprm, long len)
351 return len <= bprm->p;
362 int bprm_mm_init(struct linux_binprm *bprm)
367 bprm->mm = mm = mm_alloc();
376 err = __bprm_mm_init(bprm);
384 bprm->mm = NULL;
424 struct linux_binprm *bprm)
442 if (!valid_arg_len(bprm, len)) {
448 pos = bprm->p;
450 bprm->p -= len;
477 page = get_arg_page(bprm, pos, 1);
491 flush_arg_page(bprm, kpos, kmapped_page);
513 struct linux_binprm *bprm)
518 r = copy_strings(argc, (const char __user *const __user *)argv, bprm);
603 int setup_arg_pages(struct linux_binprm *bprm,
610 struct vm_area_struct *vma = bprm->vma;
631 mm->arg_start = bprm->p - stack_shift;
632 bprm->p = vma->vm_end - stack_shift;
643 bprm->p -= stack_shift;
644 mm->arg_start = bprm->p;
647 if (bprm->loader)
648 bprm->loader -= stack_shift;
649 bprm->exec -= stack_shift;
700 current->mm->start_stack = bprm->p;
1008 int flush_old_exec(struct linux_binprm * bprm)
1020 set_mm_exe_file(bprm->mm, bprm->file);
1025 acct_arg_size(bprm, 0);
1026 retval = exec_mmap(bprm->mm);
1030 bprm->mm = NULL; /* We're using it now */
1034 current->personality &= ~bprm->per_clear;
1043 void setup_new_exec(struct linux_binprm * bprm)
1059 name = bprm->filename;
1079 if (bprm->cred->uid != current_euid() ||
1080 bprm->cred->gid != current_egid()) {
1082 } else if (file_permission(bprm->file, MAY_READ) ||
1083 bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP) {
1110 int prepare_bprm_creds(struct linux_binprm *bprm)
1115 bprm->cred = prepare_exec_creds();
1116 if (likely(bprm->cred))
1123 void free_bprm(struct linux_binprm *bprm)
1125 free_arg_pages(bprm);
1126 if (bprm->cred) {
1128 abort_creds(bprm->cred);
1130 kfree(bprm);
1136 void install_exec_creds(struct linux_binprm *bprm)
1138 security_bprm_committing_creds(bprm);
1140 commit_creds(bprm->cred);
1141 bprm->cred = NULL;
1147 security_bprm_committed_creds(bprm);
1157 int check_unsafe_exec(struct linux_binprm *bprm)
1163 bprm->unsafe = tracehook_unsafe_exec(p);
1175 bprm->unsafe |= LSM_UNSAFE_SHARE;
1194 int prepare_binprm(struct linux_binprm *bprm)
1197 struct inode * inode = bprm->file->f_path.dentry->d_inode;
1201 if (bprm->file->f_op == NULL)
1205 bprm->cred->euid = current_euid();
1206 bprm->cred->egid = current_egid();
1208 if (!(bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)) {
1211 bprm->per_clear |= PER_CLEAR_ON_SETID;
1212 bprm->cred->euid = inode->i_uid;
1222 bprm->per_clear |= PER_CLEAR_ON_SETID;
1223 bprm->cred->egid = inode->i_gid;
1228 retval = security_bprm_set_creds(bprm);
1231 bprm->cred_prepared = 1;
1233 memset(bprm->buf, 0, BINPRM_BUF_SIZE);
1234 return kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
1240 * Arguments are '\0' separated strings found at the location bprm->p
1244 int remove_arg_zero(struct linux_binprm *bprm)
1251 if (!bprm->argc)
1255 offset = bprm->p & ~PAGE_MASK;
1256 page = get_arg_page(bprm, bprm->p, 0);
1264 offset++, bprm->p++)
1271 free_arg_page(bprm, (bprm->p >> PAGE_SHIFT) - 1);
1274 bprm->p++;
1275 bprm->argc--;
1286 int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
1288 unsigned int depth = bprm->recursion_depth;
1292 retval = security_bprm_check(bprm);
1300 retval = audit_bprm(bprm);
1314 retval = fn(bprm, regs);
1320 bprm->recursion_depth = depth;
1323 tracehook_report_exec(fmt, bprm, regs);
1325 allow_write_access(bprm->file);
1326 if (bprm->file)
1327 fput(bprm->file);
1328 bprm->file = NULL;
1335 if (retval != -ENOEXEC || bprm->mm == NULL)
1337 if (!bprm->file) {
1343 if (retval != -ENOEXEC || bprm->mm == NULL) {
1348 if (printable(bprm->buf[0]) &&
1349 printable(bprm->buf[1]) &&
1350 printable(bprm->buf[2]) &&
1351 printable(bprm->buf[3]))
1353 request_module("binfmt-%04x", *(unsigned short *)(&bprm->buf[2]));
1370 struct linux_binprm *bprm;
1381 bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
1382 if (!bprm)
1385 retval = prepare_bprm_creds(bprm);
1389 retval = check_unsafe_exec(bprm);
1402 bprm->file = file;
1403 bprm->filename = filename;
1404 bprm->interp = filename;
1406 retval = bprm_mm_init(bprm);
1410 bprm->argc = count(argv, MAX_ARG_STRINGS);
1411 if ((retval = bprm->argc) < 0)
1414 bprm->envc = count(envp, MAX_ARG_STRINGS);
1415 if ((retval = bprm->envc) < 0)
1418 retval = prepare_binprm(bprm);
1422 retval = copy_strings_kernel(1, &bprm->filename, bprm);
1426 bprm->exec = bprm->p;
1427 retval = copy_strings(bprm->envc, envp, bprm);
1431 retval = copy_strings(bprm->argc, argv, bprm);
1436 retval = search_binary_handler(bprm,regs);
1444 free_bprm(bprm);
1450 if (bprm->mm) {
1451 acct_arg_size(bprm, 0);
1452 mmput(bprm->mm);
1456 if (bprm->file) {
1457 allow_write_access(bprm->file);
1458 fput(bprm->file);
1467 free_bprm(bprm);