X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=fs%2Fbinfmt_misc.c;h=c4e83537ead77501f03d7fcb3a748727f2624d5e;hb=815409d22df870ea0b0d86f2a3bf33c35bcef55c;hp=756205314c24401fc31ebbb6eb7c479aa4c92145;hpb=6e2c10a12a2170856f5582d62d583cbcd1cb5eaf;p=safe%2Fjmp%2Flinux-2.6 diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 7562053..c4e8353 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c @@ -117,11 +117,9 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs) goto _ret; retval = -ENOEXEC; - if (bprm->misc_bang) + if (bprm->recursion_depth > BINPRM_MAX_RECURSION) goto _ret; - bprm->misc_bang = 1; - /* to keep locking time low, we copy the interpreter string */ read_lock(&entries_lock); fmt = check_file(bprm); @@ -199,6 +197,8 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs) if (retval < 0) goto _error; + bprm->recursion_depth++; + retval = search_binary_handler (bprm, regs); if (retval < 0) goto _error; @@ -496,9 +496,6 @@ static struct inode *bm_get_inode(struct super_block *sb, int mode) if (inode) { inode->i_mode = mode; - inode->i_uid = 0; - inode->i_gid = 0; - inode->i_blocks = 0; inode->i_atime = inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb); } @@ -652,7 +649,7 @@ static const struct file_operations bm_register_operations = { static ssize_t bm_status_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) { - char *s = enabled ? "enabled" : "disabled"; + char *s = enabled ? "enabled\n" : "disabled\n"; return simple_read_from_buffer(buf, nbytes, ppos, s, strlen(s)); }