VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 6
-EXTRAVERSION = -1.406-vs1.9.0
+EXTRAVERSION = -1.406-vs1.9.1
NAME=Zonked Quokka
# *DOCUMENTATION*
*
* This test looks nicer. Thanks to Pauline Middelink
*/
- if ((flags ^ oldflags) & (EXT2_APPEND_FL | EXT2_IMMUTABLE_FL)) {
+ if ((oldflags & EXT2_IMMUTABLE_FL) ||
+ ((flags ^ oldflags) &
+ (EXT2_APPEND_FL | EXT2_IMMUTABLE_FL))) {
if (!capable(CAP_LINUX_IMMUTABLE))
return -EPERM;
}
*
* This test looks nicer. Thanks to Pauline Middelink
*/
- if ((flags ^ oldflags) & (EXT3_APPEND_FL | EXT3_IMMUTABLE_FL)) {
+ if ((oldflags & EXT3_IMMUTABLE_FL) ||
+ ((flags ^ oldflags) &
+ (EXT3_APPEND_FL | EXT3_IMMUTABLE_FL))) {
if (!capable(CAP_LINUX_IMMUTABLE))
return -EPERM;
}
return -EINVAL;
/* we need capabilities... */
- if (!capable(CAP_SYS_ADMIN))
+ if (!capable(CAP_SYS_ADMIN) && !vx_ccaps(VXC_SECURE_MOUNT))
return -EPERM;
mnt = do_kern_mount(type, flags, name, data);
vxi = task_get_vx_info(task);
if (vxi) {
buffer += sprintf (buffer,"ctxflags: %08llx\n"
- ,vxi->vx_flags);
+ ,(unsigned long long)vxi->vx_flags);
buffer += sprintf (buffer,"initpid: %d\n"
,vxi->vx_initpid);
} else {
*buffer++ = '\n';
buffer += sprintf (buffer,"ipv4root_bcast: %08x\n"
,nxi->v4_bcast);
- buffer += sprintf (buffer,"ipv4root_refcnt: %d\n"
- ,atomic_read(&nxi->nx_refcount));
} else {
buffer += sprintf (buffer,"ipv4root: 0\n");
buffer += sprintf (buffer,"ipv4root_bcast: 0\n");
return -EFAULT;
oldflags = REISERFS_I(inode) -> i_attrs;
- if ( ( ( flags ^ oldflags) &
- ( REISERFS_IMMUTABLE_FL | REISERFS_IUNLINK_FL | REISERFS_APPEND_FL)) &&
- !capable( CAP_LINUX_IMMUTABLE ) )
+ if ( (oldflags & REISERFS_IMMUTABLE_FL) || ( ( (flags ^ oldflags) &
+ (REISERFS_IMMUTABLE_FL | REISERFS_IUNLINK_FL | REISERFS_APPEND_FL)) &&
+ !capable( CAP_LINUX_IMMUTABLE ) ) )
return -EPERM;
if( ( flags & REISERFS_NOTAIL_FL ) &&
static void free_task(struct task_struct *tsk)
{
free_thread_info(tsk->thread_info);
+ vxdprintk("freeing up task %p\n", tsk);
clr_vx_info(&tsk->vx_info);
clr_nx_info(&tsk->nx_info);
free_task_struct(tsk);
int retval;
struct task_struct *p = NULL;
struct vx_info *vxi;
- struct nx_info *nxi;
if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
return ERR_PTR(-EINVAL);
goto fork_out;
p->tux_info = NULL;
- vxi = get_vx_info(current->vx_info);
- nxi = get_nx_info(current->nx_info);
+ p->vx_info = NULL;
+ set_vx_info(&p->vx_info, current->vx_info);
+ p->nx_info = NULL;
+ set_nx_info(&p->nx_info, current->nx_info);
/* check vserver memory */
if (p->mm && !(clone_flags & CLONE_VM)) {
}
retval = -EAGAIN;
+ vxi = current->vx_info;
if (vxi && (atomic_read(&vxi->limit.res[RLIMIT_NPROC])
>= vxi->limit.rlim[RLIMIT_NPROC]))
goto bad_fork_free;