Lines Matching refs:e

91 		Node *e = list_entry(l, Node, list);  in check_file()  local
96 if (!test_bit(Enabled, &e->flags)) in check_file()
100 if (!test_bit(Magic, &e->flags)) { in check_file()
101 if (p && !strcmp(e->magic, p + 1)) in check_file()
102 return e; in check_file()
107 s = bprm->buf + e->offset; in check_file()
108 if (e->mask) { in check_file()
109 for (j = 0; j < e->size; j++) in check_file()
110 if ((*s++ ^ e->magic[j]) & e->mask[j]) in check_file()
113 for (j = 0; j < e->size; j++) in check_file()
114 if ((*s++ ^ e->magic[j])) in check_file()
117 if (j == e->size) in check_file()
118 return e; in check_file()
262 static char *check_special_flags(char *sfs, Node *e) in check_special_flags() argument
273 e->flags |= MISC_FMT_PRESERVE_ARGV0; in check_special_flags()
278 e->flags |= MISC_FMT_OPEN_BINARY; in check_special_flags()
285 e->flags |= (MISC_FMT_CREDENTIALS | in check_special_flags()
303 Node *e; in create_entry() local
317 e = kmalloc(memsize, GFP_KERNEL); in create_entry()
318 if (!e) in create_entry()
321 p = buf = (char *)e + sizeof(Node); in create_entry()
323 memset(e, 0, sizeof(Node)); in create_entry()
335 e->name = p; in create_entry()
340 if (!e->name[0] || in create_entry()
341 !strcmp(e->name, ".") || in create_entry()
342 !strcmp(e->name, "..") || in create_entry()
343 strchr(e->name, '/')) in create_entry()
346 pr_debug("register: name: {%s}\n", e->name); in create_entry()
352 e->flags = 1 << Enabled; in create_entry()
356 e->flags = (1 << Enabled) | (1 << Magic); in create_entry()
364 if (test_bit(Magic, &e->flags)) { in create_entry()
373 e->offset = simple_strtoul(p, &p, 10); in create_entry()
376 pr_debug("register: offset: %#x\n", e->offset); in create_entry()
379 e->magic = p; in create_entry()
383 if (!e->magic[0]) in create_entry()
388 DUMP_PREFIX_NONE, e->magic, p - e->magic); in create_entry()
391 e->mask = p; in create_entry()
395 if (!e->mask[0]) { in create_entry()
396 e->mask = NULL; in create_entry()
401 DUMP_PREFIX_NONE, e->mask, p - e->mask); in create_entry()
409 e->size = string_unescape_inplace(e->magic, UNESCAPE_HEX); in create_entry()
410 if (e->mask && in create_entry()
411 string_unescape_inplace(e->mask, UNESCAPE_HEX) != e->size) in create_entry()
413 if (e->size + e->offset > BINPRM_BUF_SIZE) in create_entry()
415 pr_debug("register: magic/mask length: %i\n", e->size); in create_entry()
419 DUMP_PREFIX_NONE, e->magic, e->size); in create_entry()
421 if (e->mask) { in create_entry()
423 char *masked = kmalloc(e->size, GFP_KERNEL); in create_entry()
427 DUMP_PREFIX_NONE, e->mask, e->size); in create_entry()
430 for (i = 0; i < e->size; ++i) in create_entry()
431 masked[i] = e->magic[i] & e->mask[i]; in create_entry()
434 DUMP_PREFIX_NONE, masked, e->size); in create_entry()
450 e->magic = p; in create_entry()
455 if (!e->magic[0] || strchr(e->magic, '/')) in create_entry()
457 pr_debug("register: extension: {%s}\n", e->magic); in create_entry()
467 e->interpreter = p; in create_entry()
472 if (!e->interpreter[0]) in create_entry()
474 pr_debug("register: interpreter: {%s}\n", e->interpreter); in create_entry()
477 p = check_special_flags(p, e); in create_entry()
483 return e; in create_entry()
489 kfree(e); in create_entry()
492 kfree(e); in create_entry()
523 static void entry_status(Node *e, char *page) in entry_status() argument
528 if (test_bit(Enabled, &e->flags)) in entry_status()
536 dp += sprintf(dp, "%s\ninterpreter %s\n", status, e->interpreter); in entry_status()
540 if (e->flags & MISC_FMT_PRESERVE_ARGV0) in entry_status()
542 if (e->flags & MISC_FMT_OPEN_BINARY) in entry_status()
544 if (e->flags & MISC_FMT_CREDENTIALS) in entry_status()
548 if (!test_bit(Magic, &e->flags)) { in entry_status()
549 sprintf(dp, "extension .%s\n", e->magic); in entry_status()
551 dp += sprintf(dp, "offset %i\nmagic ", e->offset); in entry_status()
552 dp = bin2hex(dp, e->magic, e->size); in entry_status()
553 if (e->mask) { in entry_status()
555 dp = bin2hex(dp, e->mask, e->size); in entry_status()
581 static void kill_node(Node *e) in kill_node() argument
586 dentry = e->dentry; in kill_node()
588 list_del_init(&e->list); in kill_node()
589 e->dentry = NULL; in kill_node()
606 Node *e = file_inode(file)->i_private; in bm_entry_read() local
614 entry_status(e, page); in bm_entry_read()
626 Node *e = file_inode(file)->i_private; in bm_entry_write() local
632 clear_bit(Enabled, &e->flags); in bm_entry_write()
636 set_bit(Enabled, &e->flags); in bm_entry_write()
643 kill_node(e); in bm_entry_write()
666 Node *e; in bm_register_write() local
672 e = create_entry(buffer, count); in bm_register_write()
674 if (IS_ERR(e)) in bm_register_write()
675 return PTR_ERR(e); in bm_register_write()
679 dentry = lookup_one_len(e->name, root, strlen(e->name)); in bm_register_write()
701 e->dentry = dget(dentry); in bm_register_write()
702 inode->i_private = e; in bm_register_write()
707 list_add(&e->list, &entries); in bm_register_write()
718 kfree(e); in bm_register_write()