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