]> err.no Git - linux-2.6/blobdiff - include/linux/binfmts.h
binfmt_misc.c: avoid potential kernel stack overflow
[linux-2.6] / include / linux / binfmts.h
index 91c8c07fe8b73fbf365cd7e4c67dd33a8e349a54..b512e48f6d8e9ccbcc811c364cf73a8f85bdd58f 100644 (file)
@@ -34,10 +34,12 @@ struct linux_binprm{
 #endif
        struct mm_struct *mm;
        unsigned long p; /* current top of mem */
-       int sh_bang;
+       unsigned int sh_bang:1,
+                    misc_bang:1;
        struct file * file;
        int e_uid, e_gid;
-       kernel_cap_t cap_inheritable, cap_permitted, cap_effective;
+       kernel_cap_t cap_inheritable, cap_permitted;
+       bool cap_effective;
        void *security;
        int argc, envc;
        char * filename;        /* Name of binary as seen by procps */
@@ -47,7 +49,6 @@ struct linux_binprm{
        unsigned interp_flags;
        unsigned interp_data;
        unsigned long loader, exec;
-       unsigned long argv_len;
 };
 
 #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
@@ -63,17 +64,17 @@ struct linux_binprm{
  * linux accepts.
  */
 struct linux_binfmt {
-       struct linux_binfmt * next;
+       struct list_head lh;
        struct module *module;
        int (*load_binary)(struct linux_binprm *, struct  pt_regs * regs);
        int (*load_shlib)(struct file *);
-       int (*core_dump)(long signr, struct pt_regs * regs, struct file * file);
+       int (*core_dump)(long signr, struct pt_regs *regs, struct file *file, unsigned long limit);
        unsigned long min_coredump;     /* minimal dump size */
        int hasvdso;
 };
 
 extern int register_binfmt(struct linux_binfmt *);
-extern int unregister_binfmt(struct linux_binfmt *);
+extern void unregister_binfmt(struct linux_binfmt *);
 
 extern int prepare_binprm(struct linux_binprm *);
 extern int __must_check remove_arg_zero(struct linux_binprm *);