Lines Matching refs:e

97 	Node *e;  in search_binfmt_handler()  local
100 list_for_each_entry(e, &entries, list) { in search_binfmt_handler()
105 if (!test_bit(Enabled, &e->flags)) in search_binfmt_handler()
109 if (!test_bit(Magic, &e->flags)) { in search_binfmt_handler()
110 if (p && !strcmp(e->magic, p + 1)) in search_binfmt_handler()
111 return e; in search_binfmt_handler()
116 s = bprm->buf + e->offset; in search_binfmt_handler()
117 if (e->mask) { in search_binfmt_handler()
118 for (j = 0; j < e->size; j++) in search_binfmt_handler()
119 if ((*s++ ^ e->magic[j]) & e->mask[j]) in search_binfmt_handler()
122 for (j = 0; j < e->size; j++) in search_binfmt_handler()
123 if ((*s++ ^ e->magic[j])) in search_binfmt_handler()
126 if (j == e->size) in search_binfmt_handler()
127 return e; in search_binfmt_handler()
145 Node *e; in get_binfmt_handler() local
148 e = search_binfmt_handler(bprm); in get_binfmt_handler()
149 if (e) in get_binfmt_handler()
150 refcount_inc(&e->users); in get_binfmt_handler()
152 return e; in get_binfmt_handler()
163 static void put_binfmt_handler(Node *e) in put_binfmt_handler() argument
165 if (refcount_dec_and_test(&e->users)) { in put_binfmt_handler()
166 if (e->flags & MISC_FMT_OPEN_FILE) in put_binfmt_handler()
167 filp_close(e->interp_file, NULL); in put_binfmt_handler()
168 kfree(e); in put_binfmt_handler()
277 static char *check_special_flags(char *sfs, Node *e) in check_special_flags() argument
288 e->flags |= MISC_FMT_PRESERVE_ARGV0; in check_special_flags()
293 e->flags |= MISC_FMT_OPEN_BINARY; in check_special_flags()
300 e->flags |= (MISC_FMT_CREDENTIALS | in check_special_flags()
306 e->flags |= MISC_FMT_OPEN_FILE; in check_special_flags()
323 Node *e; in create_entry() local
337 e = kmalloc(memsize, GFP_KERNEL); in create_entry()
338 if (!e) in create_entry()
341 p = buf = (char *)e + sizeof(Node); in create_entry()
343 memset(e, 0, sizeof(Node)); in create_entry()
355 e->name = p; in create_entry()
360 if (!e->name[0] || in create_entry()
361 !strcmp(e->name, ".") || in create_entry()
362 !strcmp(e->name, "..") || in create_entry()
363 strchr(e->name, '/')) in create_entry()
366 pr_debug("register: name: {%s}\n", e->name); in create_entry()
372 e->flags = 1 << Enabled; in create_entry()
376 e->flags = (1 << Enabled) | (1 << Magic); in create_entry()
384 if (test_bit(Magic, &e->flags)) { in create_entry()
394 int r = kstrtoint(p, 10, &e->offset); in create_entry()
395 if (r != 0 || e->offset < 0) in create_entry()
401 pr_debug("register: offset: %#x\n", e->offset); in create_entry()
404 e->magic = p; in create_entry()
408 if (!e->magic[0]) in create_entry()
413 DUMP_PREFIX_NONE, e->magic, p - e->magic); in create_entry()
416 e->mask = p; in create_entry()
420 if (!e->mask[0]) { in create_entry()
421 e->mask = NULL; in create_entry()
426 DUMP_PREFIX_NONE, e->mask, p - e->mask); in create_entry()
434 e->size = string_unescape_inplace(e->magic, UNESCAPE_HEX); in create_entry()
435 if (e->mask && in create_entry()
436 string_unescape_inplace(e->mask, UNESCAPE_HEX) != e->size) in create_entry()
438 if (e->size > BINPRM_BUF_SIZE || in create_entry()
439 BINPRM_BUF_SIZE - e->size < e->offset) in create_entry()
441 pr_debug("register: magic/mask length: %i\n", e->size); in create_entry()
445 DUMP_PREFIX_NONE, e->magic, e->size); in create_entry()
447 if (e->mask) { in create_entry()
449 char *masked = kmalloc(e->size, GFP_KERNEL); in create_entry()
453 DUMP_PREFIX_NONE, e->mask, e->size); in create_entry()
456 for (i = 0; i < e->size; ++i) in create_entry()
457 masked[i] = e->magic[i] & e->mask[i]; in create_entry()
460 DUMP_PREFIX_NONE, masked, e->size); in create_entry()
476 e->magic = p; in create_entry()
481 if (!e->magic[0] || strchr(e->magic, '/')) in create_entry()
483 pr_debug("register: extension: {%s}\n", e->magic); in create_entry()
493 e->interpreter = p; in create_entry()
498 if (!e->interpreter[0]) in create_entry()
500 pr_debug("register: interpreter: {%s}\n", e->interpreter); in create_entry()
503 p = check_special_flags(p, e); in create_entry()
509 return e; in create_entry()
515 kfree(e); in create_entry()
518 kfree(e); in create_entry()
549 static void entry_status(Node *e, char *page) in entry_status() argument
554 if (test_bit(Enabled, &e->flags)) in entry_status()
562 dp += sprintf(dp, "%s\ninterpreter %s\n", status, e->interpreter); in entry_status()
566 if (e->flags & MISC_FMT_PRESERVE_ARGV0) in entry_status()
568 if (e->flags & MISC_FMT_OPEN_BINARY) in entry_status()
570 if (e->flags & MISC_FMT_CREDENTIALS) in entry_status()
572 if (e->flags & MISC_FMT_OPEN_FILE) in entry_status()
576 if (!test_bit(Magic, &e->flags)) { in entry_status()
577 sprintf(dp, "extension .%s\n", e->magic); in entry_status()
579 dp += sprintf(dp, "offset %i\nmagic ", e->offset); in entry_status()
580 dp = bin2hex(dp, e->magic, e->size); in entry_status()
581 if (e->mask) { in entry_status()
583 dp = bin2hex(dp, e->mask, e->size); in entry_status()
617 Node *e = inode->i_private; in bm_evict_inode() local
621 if (e) { in bm_evict_inode()
623 if (!list_empty(&e->list)) in bm_evict_inode()
624 list_del_init(&e->list); in bm_evict_inode()
626 put_binfmt_handler(e); in bm_evict_inode()
680 static void remove_binfmt_handler(Node *e) in remove_binfmt_handler() argument
683 list_del_init(&e->list); in remove_binfmt_handler()
685 unlink_binfmt_dentry(e->dentry); in remove_binfmt_handler()
693 Node *e = file_inode(file)->i_private; in bm_entry_read() local
701 entry_status(e, page); in bm_entry_read()
713 Node *e = inode->i_private; in bm_entry_write() local
719 clear_bit(Enabled, &e->flags); in bm_entry_write()
723 set_bit(Enabled, &e->flags); in bm_entry_write()
739 if (!list_empty(&e->list)) in bm_entry_write()
740 remove_binfmt_handler(e); in bm_entry_write()
762 Node *e; in bm_register_write() local
769 e = create_entry(buffer, count); in bm_register_write()
771 if (IS_ERR(e)) in bm_register_write()
772 return PTR_ERR(e); in bm_register_write()
774 if (e->flags & MISC_FMT_OPEN_FILE) { in bm_register_write()
775 f = open_exec(e->interpreter); in bm_register_write()
778 e->interpreter); in bm_register_write()
779 kfree(e); in bm_register_write()
782 e->interp_file = f; in bm_register_write()
786 dentry = lookup_one_len(e->name, root, strlen(e->name)); in bm_register_write()
801 refcount_set(&e->users, 1); in bm_register_write()
802 e->dentry = dget(dentry); in bm_register_write()
803 inode->i_private = e; in bm_register_write()
808 list_add(&e->list, &entries); in bm_register_write()
820 kfree(e); in bm_register_write()
845 Node *e, *next; in bm_status_write() local
871 list_for_each_entry_safe(e, next, &entries, list) in bm_status_write()
872 remove_binfmt_handler(e); in bm_status_write()