Merge branches 'pm-opp', 'pm-cpufreq' and 'pm-tools'
[cascardo/linux.git] / fs / binfmt_misc.c
1 /*
2  * binfmt_misc.c
3  *
4  * Copyright (C) 1997 Richard Günther
5  *
6  * binfmt_misc detects binaries via a magic or filename extension and invokes
7  * a specified wrapper. See Documentation/binfmt_misc.txt for more details.
8  */
9
10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/sched.h>
15 #include <linux/magic.h>
16 #include <linux/binfmts.h>
17 #include <linux/slab.h>
18 #include <linux/ctype.h>
19 #include <linux/string_helpers.h>
20 #include <linux/file.h>
21 #include <linux/pagemap.h>
22 #include <linux/namei.h>
23 #include <linux/mount.h>
24 #include <linux/syscalls.h>
25 #include <linux/fs.h>
26 #include <linux/uaccess.h>
27
28 #ifdef DEBUG
29 # define USE_DEBUG 1
30 #else
31 # define USE_DEBUG 0
32 #endif
33
34 enum {
35         VERBOSE_STATUS = 1 /* make it zero to save 400 bytes kernel memory */
36 };
37
38 static LIST_HEAD(entries);
39 static int enabled = 1;
40
41 enum {Enabled, Magic};
42 #define MISC_FMT_PRESERVE_ARGV0 (1 << 31)
43 #define MISC_FMT_OPEN_BINARY (1 << 30)
44 #define MISC_FMT_CREDENTIALS (1 << 29)
45
46 typedef struct {
47         struct list_head list;
48         unsigned long flags;            /* type, status, etc. */
49         int offset;                     /* offset of magic */
50         int size;                       /* size of magic/mask */
51         char *magic;                    /* magic or filename extension */
52         char *mask;                     /* mask, NULL for exact match */
53         char *interpreter;              /* filename of interpreter */
54         char *name;
55         struct dentry *dentry;
56 } Node;
57
58 static DEFINE_RWLOCK(entries_lock);
59 static struct file_system_type bm_fs_type;
60 static struct vfsmount *bm_mnt;
61 static int entry_count;
62
63 /*
64  * Max length of the register string.  Determined by:
65  *  - 7 delimiters
66  *  - name:   ~50 bytes
67  *  - type:   1 byte
68  *  - offset: 3 bytes (has to be smaller than BINPRM_BUF_SIZE)
69  *  - magic:  128 bytes (512 in escaped form)
70  *  - mask:   128 bytes (512 in escaped form)
71  *  - interp: ~50 bytes
72  *  - flags:  5 bytes
73  * Round that up a bit, and then back off to hold the internal data
74  * (like struct Node).
75  */
76 #define MAX_REGISTER_LENGTH 1920
77
78 /*
79  * Check if we support the binfmt
80  * if we do, return the node, else NULL
81  * locking is done in load_misc_binary
82  */
83 static Node *check_file(struct linux_binprm *bprm)
84 {
85         char *p = strrchr(bprm->interp, '.');
86         struct list_head *l;
87
88         /* Walk all the registered handlers. */
89         list_for_each(l, &entries) {
90                 Node *e = list_entry(l, Node, list);
91                 char *s;
92                 int j;
93
94                 /* Make sure this one is currently enabled. */
95                 if (!test_bit(Enabled, &e->flags))
96                         continue;
97
98                 /* Do matching based on extension if applicable. */
99                 if (!test_bit(Magic, &e->flags)) {
100                         if (p && !strcmp(e->magic, p + 1))
101                                 return e;
102                         continue;
103                 }
104
105                 /* Do matching based on magic & mask. */
106                 s = bprm->buf + e->offset;
107                 if (e->mask) {
108                         for (j = 0; j < e->size; j++)
109                                 if ((*s++ ^ e->magic[j]) & e->mask[j])
110                                         break;
111                 } else {
112                         for (j = 0; j < e->size; j++)
113                                 if ((*s++ ^ e->magic[j]))
114                                         break;
115                 }
116                 if (j == e->size)
117                         return e;
118         }
119         return NULL;
120 }
121
122 /*
123  * the loader itself
124  */
125 static int load_misc_binary(struct linux_binprm *bprm)
126 {
127         Node *fmt;
128         struct file *interp_file = NULL;
129         char iname[BINPRM_BUF_SIZE];
130         const char *iname_addr = iname;
131         int retval;
132         int fd_binary = -1;
133
134         retval = -ENOEXEC;
135         if (!enabled)
136                 goto ret;
137
138         /* to keep locking time low, we copy the interpreter string */
139         read_lock(&entries_lock);
140         fmt = check_file(bprm);
141         if (fmt)
142                 strlcpy(iname, fmt->interpreter, BINPRM_BUF_SIZE);
143         read_unlock(&entries_lock);
144         if (!fmt)
145                 goto ret;
146
147         if (!(fmt->flags & MISC_FMT_PRESERVE_ARGV0)) {
148                 retval = remove_arg_zero(bprm);
149                 if (retval)
150                         goto ret;
151         }
152
153         if (fmt->flags & MISC_FMT_OPEN_BINARY) {
154
155                 /* if the binary should be opened on behalf of the
156                  * interpreter than keep it open and assign descriptor
157                  * to it
158                  */
159                 fd_binary = get_unused_fd_flags(0);
160                 if (fd_binary < 0) {
161                         retval = fd_binary;
162                         goto ret;
163                 }
164                 fd_install(fd_binary, bprm->file);
165
166                 /* if the binary is not readable than enforce mm->dumpable=0
167                    regardless of the interpreter's permissions */
168                 would_dump(bprm, bprm->file);
169
170                 allow_write_access(bprm->file);
171                 bprm->file = NULL;
172
173                 /* mark the bprm that fd should be passed to interp */
174                 bprm->interp_flags |= BINPRM_FLAGS_EXECFD;
175                 bprm->interp_data = fd_binary;
176
177         } else {
178                 allow_write_access(bprm->file);
179                 fput(bprm->file);
180                 bprm->file = NULL;
181         }
182         /* make argv[1] be the path to the binary */
183         retval = copy_strings_kernel(1, &bprm->interp, bprm);
184         if (retval < 0)
185                 goto error;
186         bprm->argc++;
187
188         /* add the interp as argv[0] */
189         retval = copy_strings_kernel(1, &iname_addr, bprm);
190         if (retval < 0)
191                 goto error;
192         bprm->argc++;
193
194         /* Update interp in case binfmt_script needs it. */
195         retval = bprm_change_interp(iname, bprm);
196         if (retval < 0)
197                 goto error;
198
199         interp_file = open_exec(iname);
200         retval = PTR_ERR(interp_file);
201         if (IS_ERR(interp_file))
202                 goto error;
203
204         bprm->file = interp_file;
205         if (fmt->flags & MISC_FMT_CREDENTIALS) {
206                 /*
207                  * No need to call prepare_binprm(), it's already been
208                  * done.  bprm->buf is stale, update from interp_file.
209                  */
210                 memset(bprm->buf, 0, BINPRM_BUF_SIZE);
211                 retval = kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
212         } else
213                 retval = prepare_binprm(bprm);
214
215         if (retval < 0)
216                 goto error;
217
218         retval = search_binary_handler(bprm);
219         if (retval < 0)
220                 goto error;
221
222 ret:
223         return retval;
224 error:
225         if (fd_binary > 0)
226                 sys_close(fd_binary);
227         bprm->interp_flags = 0;
228         bprm->interp_data = 0;
229         goto ret;
230 }
231
232 /* Command parsers */
233
234 /*
235  * parses and copies one argument enclosed in del from *sp to *dp,
236  * recognising the \x special.
237  * returns pointer to the copied argument or NULL in case of an
238  * error (and sets err) or null argument length.
239  */
240 static char *scanarg(char *s, char del)
241 {
242         char c;
243
244         while ((c = *s++) != del) {
245                 if (c == '\\' && *s == 'x') {
246                         s++;
247                         if (!isxdigit(*s++))
248                                 return NULL;
249                         if (!isxdigit(*s++))
250                                 return NULL;
251                 }
252         }
253         return s;
254 }
255
256 static char *check_special_flags(char *sfs, Node *e)
257 {
258         char *p = sfs;
259         int cont = 1;
260
261         /* special flags */
262         while (cont) {
263                 switch (*p) {
264                 case 'P':
265                         pr_debug("register: flag: P (preserve argv0)\n");
266                         p++;
267                         e->flags |= MISC_FMT_PRESERVE_ARGV0;
268                         break;
269                 case 'O':
270                         pr_debug("register: flag: O (open binary)\n");
271                         p++;
272                         e->flags |= MISC_FMT_OPEN_BINARY;
273                         break;
274                 case 'C':
275                         pr_debug("register: flag: C (preserve creds)\n");
276                         p++;
277                         /* this flags also implies the
278                            open-binary flag */
279                         e->flags |= (MISC_FMT_CREDENTIALS |
280                                         MISC_FMT_OPEN_BINARY);
281                         break;
282                 default:
283                         cont = 0;
284                 }
285         }
286
287         return p;
288 }
289
290 /*
291  * This registers a new binary format, it recognises the syntax
292  * ':name:type:offset:magic:mask:interpreter:flags'
293  * where the ':' is the IFS, that can be chosen with the first char
294  */
295 static Node *create_entry(const char __user *buffer, size_t count)
296 {
297         Node *e;
298         int memsize, err;
299         char *buf, *p;
300         char del;
301
302         pr_debug("register: received %zu bytes\n", count);
303
304         /* some sanity checks */
305         err = -EINVAL;
306         if ((count < 11) || (count > MAX_REGISTER_LENGTH))
307                 goto out;
308
309         err = -ENOMEM;
310         memsize = sizeof(Node) + count + 8;
311         e = kmalloc(memsize, GFP_KERNEL);
312         if (!e)
313                 goto out;
314
315         p = buf = (char *)e + sizeof(Node);
316
317         memset(e, 0, sizeof(Node));
318         if (copy_from_user(buf, buffer, count))
319                 goto efault;
320
321         del = *p++;     /* delimeter */
322
323         pr_debug("register: delim: %#x {%c}\n", del, del);
324
325         /* Pad the buffer with the delim to simplify parsing below. */
326         memset(buf + count, del, 8);
327
328         /* Parse the 'name' field. */
329         e->name = p;
330         p = strchr(p, del);
331         if (!p)
332                 goto einval;
333         *p++ = '\0';
334         if (!e->name[0] ||
335             !strcmp(e->name, ".") ||
336             !strcmp(e->name, "..") ||
337             strchr(e->name, '/'))
338                 goto einval;
339
340         pr_debug("register: name: {%s}\n", e->name);
341
342         /* Parse the 'type' field. */
343         switch (*p++) {
344         case 'E':
345                 pr_debug("register: type: E (extension)\n");
346                 e->flags = 1 << Enabled;
347                 break;
348         case 'M':
349                 pr_debug("register: type: M (magic)\n");
350                 e->flags = (1 << Enabled) | (1 << Magic);
351                 break;
352         default:
353                 goto einval;
354         }
355         if (*p++ != del)
356                 goto einval;
357
358         if (test_bit(Magic, &e->flags)) {
359                 /* Handle the 'M' (magic) format. */
360                 char *s;
361
362                 /* Parse the 'offset' field. */
363                 s = strchr(p, del);
364                 if (!s)
365                         goto einval;
366                 *s++ = '\0';
367                 e->offset = simple_strtoul(p, &p, 10);
368                 if (*p++)
369                         goto einval;
370                 pr_debug("register: offset: %#x\n", e->offset);
371
372                 /* Parse the 'magic' field. */
373                 e->magic = p;
374                 p = scanarg(p, del);
375                 if (!p)
376                         goto einval;
377                 p[-1] = '\0';
378                 if (p == e->magic)
379                         goto einval;
380                 if (USE_DEBUG)
381                         print_hex_dump_bytes(
382                                 KBUILD_MODNAME ": register: magic[raw]: ",
383                                 DUMP_PREFIX_NONE, e->magic, p - e->magic);
384
385                 /* Parse the 'mask' field. */
386                 e->mask = p;
387                 p = scanarg(p, del);
388                 if (!p)
389                         goto einval;
390                 p[-1] = '\0';
391                 if (p == e->mask) {
392                         e->mask = NULL;
393                         pr_debug("register:  mask[raw]: none\n");
394                 } else if (USE_DEBUG)
395                         print_hex_dump_bytes(
396                                 KBUILD_MODNAME ": register:  mask[raw]: ",
397                                 DUMP_PREFIX_NONE, e->mask, p - e->mask);
398
399                 /*
400                  * Decode the magic & mask fields.
401                  * Note: while we might have accepted embedded NUL bytes from
402                  * above, the unescape helpers here will stop at the first one
403                  * it encounters.
404                  */
405                 e->size = string_unescape_inplace(e->magic, UNESCAPE_HEX);
406                 if (e->mask &&
407                     string_unescape_inplace(e->mask, UNESCAPE_HEX) != e->size)
408                         goto einval;
409                 if (e->size + e->offset > BINPRM_BUF_SIZE)
410                         goto einval;
411                 pr_debug("register: magic/mask length: %i\n", e->size);
412                 if (USE_DEBUG) {
413                         print_hex_dump_bytes(
414                                 KBUILD_MODNAME ": register: magic[decoded]: ",
415                                 DUMP_PREFIX_NONE, e->magic, e->size);
416
417                         if (e->mask) {
418                                 int i;
419                                 char *masked = kmalloc(e->size, GFP_KERNEL);
420
421                                 print_hex_dump_bytes(
422                                         KBUILD_MODNAME ": register:  mask[decoded]: ",
423                                         DUMP_PREFIX_NONE, e->mask, e->size);
424
425                                 if (masked) {
426                                         for (i = 0; i < e->size; ++i)
427                                                 masked[i] = e->magic[i] & e->mask[i];
428                                         print_hex_dump_bytes(
429                                                 KBUILD_MODNAME ": register:  magic[masked]: ",
430                                                 DUMP_PREFIX_NONE, masked, e->size);
431
432                                         kfree(masked);
433                                 }
434                         }
435                 }
436         } else {
437                 /* Handle the 'E' (extension) format. */
438
439                 /* Skip the 'offset' field. */
440                 p = strchr(p, del);
441                 if (!p)
442                         goto einval;
443                 *p++ = '\0';
444
445                 /* Parse the 'magic' field. */
446                 e->magic = p;
447                 p = strchr(p, del);
448                 if (!p)
449                         goto einval;
450                 *p++ = '\0';
451                 if (!e->magic[0] || strchr(e->magic, '/'))
452                         goto einval;
453                 pr_debug("register: extension: {%s}\n", e->magic);
454
455                 /* Skip the 'mask' field. */
456                 p = strchr(p, del);
457                 if (!p)
458                         goto einval;
459                 *p++ = '\0';
460         }
461
462         /* Parse the 'interpreter' field. */
463         e->interpreter = p;
464         p = strchr(p, del);
465         if (!p)
466                 goto einval;
467         *p++ = '\0';
468         if (!e->interpreter[0])
469                 goto einval;
470         pr_debug("register: interpreter: {%s}\n", e->interpreter);
471
472         /* Parse the 'flags' field. */
473         p = check_special_flags(p, e);
474         if (*p == '\n')
475                 p++;
476         if (p != buf + count)
477                 goto einval;
478
479         return e;
480
481 out:
482         return ERR_PTR(err);
483
484 efault:
485         kfree(e);
486         return ERR_PTR(-EFAULT);
487 einval:
488         kfree(e);
489         return ERR_PTR(-EINVAL);
490 }
491
492 /*
493  * Set status of entry/binfmt_misc:
494  * '1' enables, '0' disables and '-1' clears entry/binfmt_misc
495  */
496 static int parse_command(const char __user *buffer, size_t count)
497 {
498         char s[4];
499
500         if (count > 3)
501                 return -EINVAL;
502         if (copy_from_user(s, buffer, count))
503                 return -EFAULT;
504         if (!count)
505                 return 0;
506         if (s[count - 1] == '\n')
507                 count--;
508         if (count == 1 && s[0] == '0')
509                 return 1;
510         if (count == 1 && s[0] == '1')
511                 return 2;
512         if (count == 2 && s[0] == '-' && s[1] == '1')
513                 return 3;
514         return -EINVAL;
515 }
516
517 /* generic stuff */
518
519 static void entry_status(Node *e, char *page)
520 {
521         char *dp;
522         char *status = "disabled";
523         const char *flags = "flags: ";
524
525         if (test_bit(Enabled, &e->flags))
526                 status = "enabled";
527
528         if (!VERBOSE_STATUS) {
529                 sprintf(page, "%s\n", status);
530                 return;
531         }
532
533         sprintf(page, "%s\ninterpreter %s\n", status, e->interpreter);
534         dp = page + strlen(page);
535
536         /* print the special flags */
537         sprintf(dp, "%s", flags);
538         dp += strlen(flags);
539         if (e->flags & MISC_FMT_PRESERVE_ARGV0)
540                 *dp++ = 'P';
541         if (e->flags & MISC_FMT_OPEN_BINARY)
542                 *dp++ = 'O';
543         if (e->flags & MISC_FMT_CREDENTIALS)
544                 *dp++ = 'C';
545         *dp++ = '\n';
546
547         if (!test_bit(Magic, &e->flags)) {
548                 sprintf(dp, "extension .%s\n", e->magic);
549         } else {
550                 int i;
551
552                 sprintf(dp, "offset %i\nmagic ", e->offset);
553                 dp = page + strlen(page);
554                 for (i = 0; i < e->size; i++) {
555                         sprintf(dp, "%02x", 0xff & (int) (e->magic[i]));
556                         dp += 2;
557                 }
558                 if (e->mask) {
559                         sprintf(dp, "\nmask ");
560                         dp += 6;
561                         for (i = 0; i < e->size; i++) {
562                                 sprintf(dp, "%02x", 0xff & (int) (e->mask[i]));
563                                 dp += 2;
564                         }
565                 }
566                 *dp++ = '\n';
567                 *dp = '\0';
568         }
569 }
570
571 static struct inode *bm_get_inode(struct super_block *sb, int mode)
572 {
573         struct inode *inode = new_inode(sb);
574
575         if (inode) {
576                 inode->i_ino = get_next_ino();
577                 inode->i_mode = mode;
578                 inode->i_atime = inode->i_mtime = inode->i_ctime =
579                         current_fs_time(inode->i_sb);
580         }
581         return inode;
582 }
583
584 static void bm_evict_inode(struct inode *inode)
585 {
586         clear_inode(inode);
587         kfree(inode->i_private);
588 }
589
590 static void kill_node(Node *e)
591 {
592         struct dentry *dentry;
593
594         write_lock(&entries_lock);
595         dentry = e->dentry;
596         if (dentry) {
597                 list_del_init(&e->list);
598                 e->dentry = NULL;
599         }
600         write_unlock(&entries_lock);
601
602         if (dentry) {
603                 drop_nlink(dentry->d_inode);
604                 d_drop(dentry);
605                 dput(dentry);
606                 simple_release_fs(&bm_mnt, &entry_count);
607         }
608 }
609
610 /* /<entry> */
611
612 static ssize_t
613 bm_entry_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
614 {
615         Node *e = file_inode(file)->i_private;
616         ssize_t res;
617         char *page;
618
619         page = (char *) __get_free_page(GFP_KERNEL);
620         if (!page)
621                 return -ENOMEM;
622
623         entry_status(e, page);
624
625         res = simple_read_from_buffer(buf, nbytes, ppos, page, strlen(page));
626
627         free_page((unsigned long) page);
628         return res;
629 }
630
631 static ssize_t bm_entry_write(struct file *file, const char __user *buffer,
632                                 size_t count, loff_t *ppos)
633 {
634         struct dentry *root;
635         Node *e = file_inode(file)->i_private;
636         int res = parse_command(buffer, count);
637
638         switch (res) {
639         case 1:
640                 /* Disable this handler. */
641                 clear_bit(Enabled, &e->flags);
642                 break;
643         case 2:
644                 /* Enable this handler. */
645                 set_bit(Enabled, &e->flags);
646                 break;
647         case 3:
648                 /* Delete this handler. */
649                 root = dget(file->f_path.dentry->d_sb->s_root);
650                 mutex_lock(&root->d_inode->i_mutex);
651
652                 kill_node(e);
653
654                 mutex_unlock(&root->d_inode->i_mutex);
655                 dput(root);
656                 break;
657         default:
658                 return res;
659         }
660
661         return count;
662 }
663
664 static const struct file_operations bm_entry_operations = {
665         .read           = bm_entry_read,
666         .write          = bm_entry_write,
667         .llseek         = default_llseek,
668 };
669
670 /* /register */
671
672 static ssize_t bm_register_write(struct file *file, const char __user *buffer,
673                                size_t count, loff_t *ppos)
674 {
675         Node *e;
676         struct inode *inode;
677         struct dentry *root, *dentry;
678         struct super_block *sb = file->f_path.dentry->d_sb;
679         int err = 0;
680
681         e = create_entry(buffer, count);
682
683         if (IS_ERR(e))
684                 return PTR_ERR(e);
685
686         root = dget(sb->s_root);
687         mutex_lock(&root->d_inode->i_mutex);
688         dentry = lookup_one_len(e->name, root, strlen(e->name));
689         err = PTR_ERR(dentry);
690         if (IS_ERR(dentry))
691                 goto out;
692
693         err = -EEXIST;
694         if (dentry->d_inode)
695                 goto out2;
696
697         inode = bm_get_inode(sb, S_IFREG | 0644);
698
699         err = -ENOMEM;
700         if (!inode)
701                 goto out2;
702
703         err = simple_pin_fs(&bm_fs_type, &bm_mnt, &entry_count);
704         if (err) {
705                 iput(inode);
706                 inode = NULL;
707                 goto out2;
708         }
709
710         e->dentry = dget(dentry);
711         inode->i_private = e;
712         inode->i_fop = &bm_entry_operations;
713
714         d_instantiate(dentry, inode);
715         write_lock(&entries_lock);
716         list_add(&e->list, &entries);
717         write_unlock(&entries_lock);
718
719         err = 0;
720 out2:
721         dput(dentry);
722 out:
723         mutex_unlock(&root->d_inode->i_mutex);
724         dput(root);
725
726         if (err) {
727                 kfree(e);
728                 return -EINVAL;
729         }
730         return count;
731 }
732
733 static const struct file_operations bm_register_operations = {
734         .write          = bm_register_write,
735         .llseek         = noop_llseek,
736 };
737
738 /* /status */
739
740 static ssize_t
741 bm_status_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
742 {
743         char *s = enabled ? "enabled\n" : "disabled\n";
744
745         return simple_read_from_buffer(buf, nbytes, ppos, s, strlen(s));
746 }
747
748 static ssize_t bm_status_write(struct file *file, const char __user *buffer,
749                 size_t count, loff_t *ppos)
750 {
751         int res = parse_command(buffer, count);
752         struct dentry *root;
753
754         switch (res) {
755         case 1:
756                 /* Disable all handlers. */
757                 enabled = 0;
758                 break;
759         case 2:
760                 /* Enable all handlers. */
761                 enabled = 1;
762                 break;
763         case 3:
764                 /* Delete all handlers. */
765                 root = dget(file->f_path.dentry->d_sb->s_root);
766                 mutex_lock(&root->d_inode->i_mutex);
767
768                 while (!list_empty(&entries))
769                         kill_node(list_entry(entries.next, Node, list));
770
771                 mutex_unlock(&root->d_inode->i_mutex);
772                 dput(root);
773                 break;
774         default:
775                 return res;
776         }
777
778         return count;
779 }
780
781 static const struct file_operations bm_status_operations = {
782         .read           = bm_status_read,
783         .write          = bm_status_write,
784         .llseek         = default_llseek,
785 };
786
787 /* Superblock handling */
788
789 static const struct super_operations s_ops = {
790         .statfs         = simple_statfs,
791         .evict_inode    = bm_evict_inode,
792 };
793
794 static int bm_fill_super(struct super_block *sb, void *data, int silent)
795 {
796         int err;
797         static struct tree_descr bm_files[] = {
798                 [2] = {"status", &bm_status_operations, S_IWUSR|S_IRUGO},
799                 [3] = {"register", &bm_register_operations, S_IWUSR},
800                 /* last one */ {""}
801         };
802
803         err = simple_fill_super(sb, BINFMTFS_MAGIC, bm_files);
804         if (!err)
805                 sb->s_op = &s_ops;
806         return err;
807 }
808
809 static struct dentry *bm_mount(struct file_system_type *fs_type,
810         int flags, const char *dev_name, void *data)
811 {
812         return mount_single(fs_type, flags, data, bm_fill_super);
813 }
814
815 static struct linux_binfmt misc_format = {
816         .module = THIS_MODULE,
817         .load_binary = load_misc_binary,
818 };
819
820 static struct file_system_type bm_fs_type = {
821         .owner          = THIS_MODULE,
822         .name           = "binfmt_misc",
823         .mount          = bm_mount,
824         .kill_sb        = kill_litter_super,
825 };
826 MODULE_ALIAS_FS("binfmt_misc");
827
828 static int __init init_misc_binfmt(void)
829 {
830         int err = register_filesystem(&bm_fs_type);
831         if (!err)
832                 insert_binfmt(&misc_format);
833         return err;
834 }
835
836 static void __exit exit_misc_binfmt(void)
837 {
838         unregister_binfmt(&misc_format);
839         unregister_filesystem(&bm_fs_type);
840 }
841
842 core_initcall(init_misc_binfmt);
843 module_exit(exit_misc_binfmt);
844 MODULE_LICENSE("GPL");