From: Ulrich Drepper <drepper@redhat.com>

It has been discussed here before, that the user and group IDs as well as the
auxiliary groups are a process property in POSIX and therefore a process
group property in Linux.  There has been some disagreement on how to
implement this.  As a first step I therefore created a patch which
virtualizes access to the IDs and group informatin in the task struct. 
Andrew described the function names and from then on everything was straight
forward.  The changes are numerous (98k patch) and all over the place.  But I
think I caught most of the changes.  Failures to do this will show up right
away since the task structure element has been renamed.


 drivers/block/loop.c          |    4 -
 drivers/char/agp/frontend.c   |    2 
 drivers/net/tun.c             |    2 
 drivers/usb/core/inode.c      |    4 -
 fs/affs/inode.c               |    4 -
 fs/affs/super.c               |    4 -
 fs/attr.c                     |    7 +
 fs/autofs/inode.c             |    4 -
 fs/autofs4/inode.c            |    4 -
 fs/bfs/dir.c                  |    4 -
 fs/binfmt_elf.c               |   12 +--
 fs/cifs/cifsproto.h           |    2 
 fs/cifs/connect.c             |    4 -
 fs/cifs/dir.c                 |    2 
 fs/cifs/misc.c                |    4 -
 fs/coda/cache.c               |    6 -
 fs/coda/upcall.c              |    2 
 fs/devpts/inode.c             |    4 -
 fs/dquot.c                    |    2 
 fs/eventpoll.c                |    4 -
 fs/exec.c                     |   29 ++++---
 fs/ext2/acl.c                 |    4 -
 fs/ext2/balloc.c              |    2 
 fs/ext2/ialloc.c              |    4 -
 fs/ext2/ioctl.c               |    4 -
 fs/ext3/acl.c                 |    4 -
 fs/ext3/balloc.c              |    2 
 fs/ext3/ialloc.c              |    4 -
 fs/ext3/ioctl.c               |    4 -
 fs/fat/inode.c                |    4 -
 fs/fcntl.c                    |    6 -
 fs/file_table.c               |    8 +-
 fs/hfs/super.c                |    4 -
 fs/hpfs/namei.c               |   24 +++---
 fs/hpfs/super.c               |    4 -
 fs/hugetlbfs/inode.c          |   18 ++--
 fs/intermezzo/dir.c           |    6 -
 fs/intermezzo/file.c          |   10 +-
 fs/intermezzo/intermezzo_fs.h |   26 +++---
 fs/intermezzo/journal.c       |   48 ++++++------
 fs/intermezzo/upcall.c        |    2 
 fs/intermezzo/vfs.c           |    4 -
 fs/jfs/acl.c                  |    2 
 fs/jfs/jfs_inode.c            |    4 -
 fs/jfs/xattr.c                |    2 
 fs/locks.c                    |    2 
 fs/minix/bitmap.c             |    4 -
 fs/namei.c                    |    8 +-
 fs/ncpfs/ioctl.c              |   30 +++----
 fs/nfsd/auth.c                |   12 +--
 fs/nfsd/vfs.c                 |    2 
 fs/open.c                     |   19 ++--
 fs/pipe.c                     |    4 -
 fs/posix_acl.c                |    4 -
 fs/proc/array.c               |    8 +-
 fs/proc/base.c                |   16 ++--
 fs/proc/inode.c               |    4 -
 fs/quota.c                    |    2 
 fs/ramfs/inode.c              |    4 -
 fs/reiserfs/ioctl.c           |    4 -
 fs/reiserfs/namei.c           |    4 -
 fs/smbfs/dir.c                |    4 -
 fs/smbfs/inode.c              |    2 
 fs/smbfs/proc.c               |    2 
 fs/sysfs/inode.c              |    4 -
 fs/sysv/ialloc.c              |    4 -
 fs/udf/ialloc.c               |    4 -
 fs/udf/namei.c                |    2 
 fs/ufs/ialloc.c               |    4 -
 fs/xfs/linux/xfs_iops.c       |    2 
 fs/xfs/xfs_acl.c              |    6 -
 fs/xfs/xfs_dfrag.c            |    4 -
 fs/xfs/xfs_inode.c            |    6 -
 fs/xfs/xfs_vnodeops.c         |   11 +-
 include/linux/sched.h         |  103 ++++++++++++++++++++++++-
 include/net/scm.h             |    4 -
 ipc/msg.c                     |    4 -
 ipc/sem.c                     |    4 -
 ipc/shm.c                     |    8 +-
 ipc/util.c                    |    6 -
 kernel/ptrace.c               |   12 +--
 kernel/sched.c                |    8 +-
 kernel/signal.c               |   20 ++---
 kernel/sys.c                  |  168 ++++++++++++++++++++++--------------------
 kernel/sysctl.c               |    2 
 kernel/timer.c                |    8 +-
 kernel/uid16.c                |   28 +++----
 mm/oom_kill.c                 |    2 
 mm/shmem.c                    |    8 +-
 net/core/scm.c                |   10 +-
 net/ipv6/ip6_flowlabel.c      |    2 
 net/socket.c                  |    4 -
 net/sunrpc/auth.c             |   16 ++--
 net/sunrpc/auth_unix.c        |    8 +-
 net/sunrpc/sched.c            |    3 
 net/unix/af_unix.c            |   12 +--
 security/commoncap.c          |   17 ++--
 security/dummy.c              |   19 ++--
 98 files changed, 547 insertions(+), 421 deletions(-)

diff -puN drivers/block/loop.c~d-task-xid drivers/block/loop.c
--- 25/drivers/block/loop.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/drivers/block/loop.c	2003-09-27 19:29:17.000000000 -0700
@@ -860,7 +860,7 @@ loop_set_status(struct loop_device *lo, 
 	int err;
 	struct loop_func_table *xfer;
 
-	if (lo->lo_encrypt_key_size && lo->lo_key_owner != current->uid &&
+	if (lo->lo_encrypt_key_size && lo->lo_key_owner != tsk_uid(current) &&
 	    !capable(CAP_SYS_ADMIN))
 		return -EPERM;
 	if (lo->lo_state != Lo_bound)
@@ -911,7 +911,7 @@ loop_set_status(struct loop_device *lo, 
 	if (info->lo_encrypt_key_size) {
 		memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
 		       info->lo_encrypt_key_size);
-		lo->lo_key_owner = current->uid;
+		lo->lo_key_owner = tsk_uid(current);
 	}	
 
 	return 0;
diff -puN drivers/char/agp/frontend.c~d-task-xid drivers/char/agp/frontend.c
--- 25/drivers/char/agp/frontend.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/drivers/char/agp/frontend.c	2003-09-27 19:29:17.000000000 -0700
@@ -716,7 +716,7 @@ static int agp_open(struct inode *inode,
 	set_bit(AGP_FF_ALLOW_CLIENT, &priv->access_flags);
 	priv->my_pid = current->pid;
 
-	if ((current->uid == 0) || (current->suid == 0)) {
+	if ((tsk_uid(current) == 0) || (tsk_suid(current) == 0)) {
 		/* Root priv, can be controller */
 		set_bit(AGP_FF_ALLOW_CONTROLLER, &priv->access_flags);
 	}
diff -puN drivers/net/tun.c~d-task-xid drivers/net/tun.c
--- 25/drivers/net/tun.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/drivers/net/tun.c	2003-09-27 19:29:17.000000000 -0700
@@ -386,7 +386,7 @@ static int tun_set_iff(struct file *file
 
 		/* Check permissions */
 		if (tun->owner != -1 &&
-		    current->euid != tun->owner && !capable(CAP_NET_ADMIN))
+		    tsk_euid(current) != tun->owner && !capable(CAP_NET_ADMIN))
 			return -EPERM;
 	} 
 	else if (__dev_get_by_name(ifr->ifr_name)) 
diff -puN drivers/usb/core/inode.c~d-task-xid drivers/usb/core/inode.c
--- 25/drivers/usb/core/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/drivers/usb/core/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -148,8 +148,8 @@ static struct inode *usbfs_get_inode (st
 
 	if (inode) {
 		inode->i_mode = mode;
-		inode->i_uid = current->fsuid;
-		inode->i_gid = current->fsgid;
+		inode->i_uid = tsk_fsuid(current);
+		inode->i_gid = tsk_fsgid(current);
 		inode->i_blksize = PAGE_CACHE_SIZE;
 		inode->i_blocks = 0;
 		inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
diff -puN fs/affs/inode.c~d-task-xid fs/affs/inode.c
--- 25/fs/affs/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/affs/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -317,8 +317,8 @@ affs_new_inode(struct inode *dir)
 	mark_buffer_dirty_inode(bh, inode);
 	affs_brelse(bh);
 
-	inode->i_uid     = current->fsuid;
-	inode->i_gid     = current->fsgid;
+	inode->i_uid     = tsk_fsuid(current);
+	inode->i_gid     = tsk_fsgid(current);
 	inode->i_ino     = block;
 	inode->i_nlink   = 1;
 	inode->i_mtime   = inode->i_atime = inode->i_ctime = CURRENT_TIME;
diff -puN fs/affs/super.c~d-task-xid fs/affs/super.c
--- 25/fs/affs/super.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/affs/super.c	2003-09-27 19:29:17.000000000 -0700
@@ -151,8 +151,8 @@ parse_options(char *options, uid_t *uid,
 
 	/* Fill in defaults */
 
-	*uid        = current->uid;
-	*gid        = current->gid;
+	*uid        = tsk_uid(current);
+	*gid        = tsk_gid(current);
 	*reserved   = 2;
 	*root       = -1;
 	*blocksize  = -1;
diff -puN fs/attr.c~d-task-xid fs/attr.c
--- 25/fs/attr.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/attr.c	2003-09-27 19:29:17.000000000 -0700
@@ -28,7 +28,7 @@ int inode_change_ok(struct inode *inode,
 
 	/* Make sure a caller can chown. */
 	if ((ia_valid & ATTR_UID) &&
-	    (current->fsuid != inode->i_uid ||
+	    (tsk_fsuid(current) != inode->i_uid ||
 	     attr->ia_uid != inode->i_uid) && !capable(CAP_CHOWN))
 		goto error;
 
@@ -40,7 +40,8 @@ int inode_change_ok(struct inode *inode,
 
 	/* Make sure a caller can chmod. */
 	if (ia_valid & ATTR_MODE) {
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if ((tsk_fsuid(current) != inode->i_uid) &&
+		    !capable(CAP_FOWNER))
 			goto error;
 		/* Also check the setgid bit! */
 		if (!in_group_p((ia_valid & ATTR_GID) ? attr->ia_gid :
@@ -50,7 +51,7 @@ int inode_change_ok(struct inode *inode,
 
 	/* Check for setting the inode time. */
 	if (ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET)) {
-		if (current->fsuid != inode->i_uid && !capable(CAP_FOWNER))
+		if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 			goto error;
 	}
 fine:
diff -puN fs/autofs4/inode.c~d-task-xid fs/autofs4/inode.c
--- 25/fs/autofs4/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/autofs4/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -99,8 +99,8 @@ static int parse_options(char *options, 
 {
 	char *this_char, *value;
 	
-	*uid = current->uid;
-	*gid = current->gid;
+	*uid = tsk_uid(current);
+	*gid = tsk_gid(current);
 	*pgrp = process_group(current);
 
 	*minproto = AUTOFS_MIN_PROTO_VERSION;
diff -puN fs/autofs/inode.c~d-task-xid fs/autofs/inode.c
--- 25/fs/autofs/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/autofs/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -49,8 +49,8 @@ static int parse_options(char *options, 
 {
 	char *this_char, *value;
 	
-	*uid = current->uid;
-	*gid = current->gid;
+	*uid = tsk_uid(current);
+	*gid = tsk_gid(current);
 	*pgrp = process_group(current);
 
 	*minproto = *maxproto = AUTOFS_PROTO_VERSION;
diff -puN fs/bfs/dir.c~d-task-xid fs/bfs/dir.c
--- 25/fs/bfs/dir.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/bfs/dir.c	2003-09-27 19:29:17.000000000 -0700
@@ -99,8 +99,8 @@ static int bfs_create(struct inode * dir
 	}
 	set_bit(ino, info->si_imap);	
 	info->si_freei--;
-	inode->i_uid = current->fsuid;
-	inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+	inode->i_uid = tsk_fsuid(current);
+	inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : tsk_fsgid(current);
 	inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
 	inode->i_blocks = inode->i_blksize = 0;
 	inode->i_op = &bfs_file_inops;
diff -puN fs/binfmt_elf.c~d-task-xid fs/binfmt_elf.c
--- 25/fs/binfmt_elf.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/binfmt_elf.c	2003-09-27 19:29:17.000000000 -0700
@@ -188,10 +188,10 @@ create_elf_tables(struct linux_binprm *b
 	NEW_AUX_ENT(AT_BASE, interp_load_addr);
 	NEW_AUX_ENT(AT_FLAGS, 0);
 	NEW_AUX_ENT(AT_ENTRY, exec->e_entry);
-	NEW_AUX_ENT(AT_UID, (elf_addr_t) tsk->uid);
-	NEW_AUX_ENT(AT_EUID, (elf_addr_t) tsk->euid);
-	NEW_AUX_ENT(AT_GID, (elf_addr_t) tsk->gid);
-	NEW_AUX_ENT(AT_EGID, (elf_addr_t) tsk->egid);
+	NEW_AUX_ENT(AT_UID, (elf_addr_t) tsk_uid(tsk));
+	NEW_AUX_ENT(AT_EUID, (elf_addr_t) tsk_euid(tsk));
+	NEW_AUX_ENT(AT_GID, (elf_addr_t) tsk_gid(tsk));
+	NEW_AUX_ENT(AT_EGID, (elf_addr_t) tsk_egid(tsk));
  	NEW_AUX_ENT(AT_SECURE, (elf_addr_t) security_bprm_secureexec(bprm));
 	if (k_platform) {
 		NEW_AUX_ENT(AT_PLATFORM, (elf_addr_t)(long)u_platform);
@@ -1114,8 +1114,8 @@ static void fill_psinfo(struct elf_prpsi
 	psinfo->pr_zomb = psinfo->pr_sname == 'Z';
 	psinfo->pr_nice = task_nice(p);
 	psinfo->pr_flag = p->flags;
-	psinfo->pr_uid = NEW_TO_OLD_UID(p->uid);
-	psinfo->pr_gid = NEW_TO_OLD_GID(p->gid);
+	psinfo->pr_uid = NEW_TO_OLD_UID(tsk_uid(p));
+	psinfo->pr_gid = NEW_TO_OLD_GID(tsk_gid(p));
 	strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
 	
 	return;
diff -puN fs/cifs/cifsproto.h~d-task-xid fs/cifs/cifsproto.h
--- 25/fs/cifs/cifsproto.h~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/cifs/cifsproto.h	2003-09-27 19:29:17.000000000 -0700
@@ -36,7 +36,7 @@ extern int smb_send(struct socket *, str
 			unsigned int /* length */ , struct sockaddr *);
 extern unsigned int _GetXid(void);
 extern void _FreeXid(unsigned int);
-#define GetXid() (int)_GetXid(); cFYI(1,("CIFS VFS: in %s as Xid: %d with uid: %d",__FUNCTION__, xid,current->fsuid));
+#define GetXid() (int)_GetXid(); cFYI(1,("CIFS VFS: in %s as Xid: %d with uid: %d",__FUNCTION__, xid,tsk_fsuid(current)));
 #define FreeXid(curr_xid) {_FreeXid(curr_xid); cFYI(1,("CIFS VFS: leaving %s (xid = %d) rc = %d",__FUNCTION__,curr_xid,rc));}
 extern char *build_path_from_dentry(struct dentry *);
 extern char *build_wildcard_path_from_dentry(struct dentry *direntry);
diff -puN fs/cifs/connect.c~d-task-xid fs/cifs/connect.c
--- 25/fs/cifs/connect.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/cifs/connect.c	2003-09-27 19:29:17.000000000 -0700
@@ -350,8 +350,8 @@ parse_mount_options(char *options, const
 	int  temp_len;
 
 	memset(vol,0,sizeof(struct smb_vol));
-	vol->linux_uid = current->uid;	/* current->euid instead? */
-	vol->linux_gid = current->gid;
+	vol->linux_uid = tsk_uid(current);	/* tsk_euid instead? */
+	vol->linux_gid = tsk_gid(current);
 	vol->dir_mode = S_IRWXUGO;
 	/* 2767 perms indicate mandatory locking support */
 	vol->file_mode = S_IALLUGO & ~(S_ISUID | S_IXGRP);
diff -puN fs/cifs/dir.c~d-task-xid fs/cifs/dir.c
--- 25/fs/cifs/dir.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/cifs/dir.c	2003-09-27 19:29:17.000000000 -0700
@@ -277,7 +277,7 @@ int cifs_mknod(struct inode *inode, stru
 
 	if (pTcon->ses->capabilities & CAP_UNIX) {
 		rc = CIFSSMBUnixSetPerms(xid, pTcon,
-			full_path, mode, current->euid, current->egid,
+			full_path, mode, tsk_euid(current), tsk_egid(current),
 			device_number, cifs_sb->local_nls);
 		if(!rc) {
                         rc = cifs_get_inode_info_unix(&newinode, full_path,
diff -puN fs/cifs/misc.c~d-task-xid fs/cifs/misc.c
--- 25/fs/cifs/misc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/cifs/misc.c	2003-09-27 19:29:17.000000000 -0700
@@ -256,12 +256,12 @@ header_assemble(struct smb_hdr *buffer, 
 		/*  BB Add support for establishing new tCon and SMB Session  */
 		/*      with userid/password pairs found on the smb session   */ 
 		/*	for other target tcp/ip addresses 		BB    */
-				if(current->uid != treeCon->ses->linux_uid) {
+				if(tsk_uid(current) != treeCon->ses->linux_uid) {
 					cFYI(1,("Multiuser mode and UID did not match tcon uid "));
 					read_lock(&GlobalSMBSeslock);
 					list_for_each(temp_item, &GlobalSMBSessionList) {
 						ses = list_entry(temp_item, struct cifsSesInfo, cifsSessionList);
-						if(ses->linux_uid == current->uid) {
+						if(ses->linux_uid == tsk_uid(current)) {
 							if(ses->server == treeCon->ses->server) {
 								cFYI(1,("found matching uid substitute right smb_uid"));  
 								buffer->Uid = ses->Suid;
diff -puN fs/coda/cache.c~d-task-xid fs/coda/cache.c
--- 25/fs/coda/cache.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/coda/cache.c	2003-09-27 19:29:17.000000000 -0700
@@ -31,8 +31,8 @@ void coda_cache_enter(struct inode *inod
 	struct coda_inode_info *cii = ITOC(inode);
 
 	cii->c_cached_epoch = atomic_read(&permission_epoch);
-	if (cii->c_uid != current->fsuid) {
-                cii->c_uid = current->fsuid;
+	if (cii->c_uid != tsk_fsuid(current)) {
+                cii->c_uid = tsk_fsuid(current);
                 cii->c_cached_perm = mask;
         } else
                 cii->c_cached_perm |= mask;
@@ -64,7 +64,7 @@ int coda_cache_check(struct inode *inode
         int hit;
 	
         hit = (mask & cii->c_cached_perm) == mask &&
-		cii->c_uid == current->fsuid &&
+		cii->c_uid == tsk_fsuid(current) &&
 		cii->c_cached_epoch == atomic_read(&permission_epoch);
 
         return hit;
diff -puN fs/coda/upcall.c~d-task-xid fs/coda/upcall.c
--- 25/fs/coda/upcall.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/coda/upcall.c	2003-09-27 19:29:17.000000000 -0700
@@ -59,7 +59,7 @@ static void *alloc_upcall(int opcode, in
 	memset(&inp->ih.cred, 0, sizeof(struct coda_cred));
 	inp->ih.cred.cr_fsuid = current->fsuid;
 #else
-	inp->ih.uid = current->fsuid;
+	inp->ih.uid = tsk_fsuid(current);
 #endif
 	return (void*)inp;
 }
diff -puN fs/devpts/inode.c~d-task-xid fs/devpts/inode.c
--- 25/fs/devpts/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/devpts/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -147,8 +147,8 @@ void devpts_pty_new(int number, dev_t de
 		return;
 	inode->i_ino = number+2;
 	inode->i_blksize = 1024;
-	inode->i_uid = config.setuid ? config.uid : current->fsuid;
-	inode->i_gid = config.setgid ? config.gid : current->fsgid;
+	inode->i_uid = config.setuid ? config.uid : tsk_fsuid(current);
+	inode->i_gid = config.setgid ? config.gid : tsk_fsgid(current);
 	inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
 	init_special_inode(inode, S_IFCHR|config.mode, device);
 	inode->i_op = &devpts_file_inode_operations;
diff -puN fs/dquot.c~d-task-xid fs/dquot.c
--- 25/fs/dquot.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/dquot.c	2003-09-27 19:29:17.000000000 -0700
@@ -643,7 +643,7 @@ static inline int need_print_warning(str
 {
 	switch (dquot->dq_type) {
 		case USRQUOTA:
-			return current->fsuid == dquot->dq_id;
+			return tsk_fsuid(current) == dquot->dq_id;
 		case GRPQUOTA:
 			return in_group_p(dquot->dq_id);
 	}
diff -puN fs/eventpoll.c~d-task-xid fs/eventpoll.c
--- 25/fs/eventpoll.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/eventpoll.c	2003-09-27 19:29:17.000000000 -0700
@@ -1651,8 +1651,8 @@ static struct inode *ep_eventpoll_inode(
 	 */
 	inode->i_state = I_DIRTY;
 	inode->i_mode = S_IRUSR | S_IWUSR;
-	inode->i_uid = current->fsuid;
-	inode->i_gid = current->fsgid;
+	inode->i_uid = tsk_fsuid(current);
+	inode->i_gid = tsk_fsgid(current);
 	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
 	inode->i_blksize = PAGE_SIZE;
 	return inode;
diff -puN fs/exec.c~d-task-xid fs/exec.c
--- 25/fs/exec.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/exec.c	2003-09-27 19:29:17.000000000 -0700
@@ -789,7 +789,8 @@ int flush_old_exec(struct linux_binprm *
 
 	current->sas_ss_sp = current->sas_ss_size = 0;
 
-	if (current->euid == current->uid && current->egid == current->gid)
+	if (tsk_euid(current) == tsk_uid(current) &&
+	    tsk_egid(current) == tsk_gid(current))
 		current->mm->dumpable = 1;
 	name = bprm->filename;
 	for (i=0; (ch = *(name++)) != '\0';) {
@@ -803,7 +804,8 @@ int flush_old_exec(struct linux_binprm *
 
 	flush_thread();
 
-	if (bprm->e_uid != current->euid || bprm->e_gid != current->egid || 
+	if (bprm->e_uid != tsk_euid(current) ||
+	    bprm->e_gid != tsk_egid(current) ||
 	    permission(bprm->file->f_dentry->d_inode,MAY_READ, NULL))
 		current->mm->dumpable = 0;
 
@@ -851,8 +853,8 @@ int prepare_binprm(struct linux_binprm *
 	if (bprm->file->f_op == NULL)
 		return -EACCES;
 
-	bprm->e_uid = current->euid;
-	bprm->e_gid = current->egid;
+	bprm->e_uid = tsk_euid(current);
+	bprm->e_gid = tsk_egid(current);
 
 	if(!(bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)) {
 		/* Set-uid? */
@@ -896,7 +898,8 @@ int prepare_binprm(struct linux_binprm *
 void compute_creds(struct linux_binprm *bprm)
 {
 	task_lock(current);
-	if (bprm->e_uid != current->uid || bprm->e_gid != current->gid) {
+	if (bprm->e_uid != tsk_uid(current) ||
+	    bprm->e_gid != tsk_gid(current)) {
                 current->mm->dumpable = 0;
 		
 		if (must_not_trace_exec(current)
@@ -904,14 +907,18 @@ void compute_creds(struct linux_binprm *
 		    || atomic_read(&current->files->count) > 1
 		    || atomic_read(&current->sighand->count) > 1) {
 			if(!capable(CAP_SETUID)) {
-				bprm->e_uid = current->uid;
-				bprm->e_gid = current->gid;
+				bprm->e_uid = tsk_uid(current);
+				bprm->e_gid = tsk_gid(current);
 			}
 		}
 	}
 
-        current->suid = current->euid = current->fsuid = bprm->e_uid;
-        current->sgid = current->egid = current->fsgid = bprm->e_gid;
+	set_tsk_suid(current, bprm->e_uid);
+	set_tsk_euid(current, bprm->e_uid);
+	set_tsk_fsuid(current, bprm->e_uid);
+	set_tsk_sgid(current, bprm->e_gid);
+	set_tsk_egid(current, bprm->e_gid);
+	set_tsk_fsgid(current, bprm->e_gid);
 
 	task_unlock(current);
 
@@ -1190,7 +1197,7 @@ void format_corename(char *corename, con
 			/* uid */
 			case 'u':
 				rc = snprintf(out_ptr, out_end - out_ptr,
-					      "%d", current->uid);
+					      "%d", tsk_uid(current));
 				if (rc > out_end - out_ptr)
 					goto out;
 				out_ptr += rc;
@@ -1198,7 +1205,7 @@ void format_corename(char *corename, con
 			/* gid */
 			case 'g':
 				rc = snprintf(out_ptr, out_end - out_ptr,
-					      "%d", current->gid);
+					      "%d", tsk_gid(current));
 				if (rc > out_end - out_ptr)
 					goto out;
 				out_ptr += rc;
diff -puN fs/ext2/acl.c~d-task-xid fs/ext2/acl.c
--- 25/fs/ext2/acl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext2/acl.c	2003-09-27 19:29:17.000000000 -0700
@@ -294,7 +294,7 @@ ext2_permission(struct inode *inode, int
 	/* Nobody gets write access to an immutable file */
 	if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
 	    return -EACCES;
-	if (current->fsuid == inode->i_uid) {
+	if (tsk_fsuid(current) == inode->i_uid) {
 		mode >>= 6;
 	} else if (test_opt(inode->i_sb, POSIX_ACL)) {
 		struct posix_acl *acl;
@@ -497,7 +497,7 @@ ext2_xattr_set_acl(struct inode *inode, 
 
 	if (!test_opt(inode->i_sb, POSIX_ACL))
 		return -EOPNOTSUPP;
-	if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+	if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 		return -EPERM;
 
 	if (value) {
diff -puN fs/ext2/balloc.c~d-task-xid fs/ext2/balloc.c
--- 25/fs/ext2/balloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext2/balloc.c	2003-09-27 19:29:17.000000000 -0700
@@ -112,7 +112,7 @@ static int reserve_blocks(struct super_b
 		count = free_blocks;
 
 	if (free_blocks < root_blocks + count && !capable(CAP_SYS_RESOURCE) &&
-	    sbi->s_resuid != current->fsuid &&
+	    sbi->s_resuid != tsk_fsuid(current) &&
 	    (sbi->s_resgid == 0 || !in_group_p (sbi->s_resgid))) {
 		/*
 		 * We are too close to reserve and we are not privileged.
diff -puN fs/ext2/ialloc.c~d-task-xid fs/ext2/ialloc.c
--- 25/fs/ext2/ialloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext2/ialloc.c	2003-09-27 19:29:17.000000000 -0700
@@ -590,7 +590,7 @@ got:
 	spin_unlock(sb_bgl_lock(EXT2_SB(sb), group));
 
 	sb->s_dirt = 1;
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	if (test_opt (sb, GRPID))
 		inode->i_gid = dir->i_gid;
 	else if (dir->i_mode & S_ISGID) {
@@ -598,7 +598,7 @@ got:
 		if (S_ISDIR(mode))
 			mode |= S_ISGID;
 	} else
-		inode->i_gid = current->fsgid;
+		inode->i_gid = tsk_fsgid(current);
 	inode->i_mode = mode;
 
 	inode->i_ino = ino;
diff -puN fs/ext2/ioctl.c~d-task-xid fs/ext2/ioctl.c
--- 25/fs/ext2/ioctl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext2/ioctl.c	2003-09-27 19:29:17.000000000 -0700
@@ -32,7 +32,7 @@ int ext2_ioctl (struct inode * inode, st
 		if (IS_RDONLY(inode))
 			return -EROFS;
 
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 			return -EACCES;
 
 		if (get_user(flags, (int *) arg))
@@ -66,7 +66,7 @@ int ext2_ioctl (struct inode * inode, st
 	case EXT2_IOC_GETVERSION:
 		return put_user(inode->i_generation, (int *) arg);
 	case EXT2_IOC_SETVERSION:
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 			return -EPERM;
 		if (IS_RDONLY(inode))
 			return -EROFS;
diff -puN fs/ext3/acl.c~d-task-xid fs/ext3/acl.c
--- 25/fs/ext3/acl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext3/acl.c	2003-09-27 19:29:17.000000000 -0700
@@ -299,7 +299,7 @@ ext3_permission(struct inode *inode, int
 	/* Nobody gets write access to an immutable file */
 	if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
 	    return -EACCES;
-	if (current->fsuid == inode->i_uid) {
+	if (tsk_fsuid(current) == inode->i_uid) {
 		mode >>= 6;
 	} else if (test_opt(inode->i_sb, POSIX_ACL)) {
 		struct posix_acl *acl;
@@ -516,7 +516,7 @@ ext3_xattr_set_acl(struct inode *inode, 
 
 	if (!test_opt(inode->i_sb, POSIX_ACL))
 		return -EOPNOTSUPP;
-	if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+	if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 		return -EPERM;
 
 	if (value) {
diff -puN fs/ext3/balloc.c~d-task-xid fs/ext3/balloc.c
--- 25/fs/ext3/balloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext3/balloc.c	2003-09-27 19:29:17.000000000 -0700
@@ -514,7 +514,7 @@ ext3_new_block(handle_t *handle, struct 
 	free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
 	root_blocks = le32_to_cpu(es->s_r_blocks_count);
 	if (free_blocks < root_blocks + 1 && !capable(CAP_SYS_RESOURCE) &&
-		sbi->s_resuid != current->fsuid &&
+		sbi->s_resuid != tsk_fsuid(current) &&
 		(sbi->s_resgid == 0 || !in_group_p (sbi->s_resgid))) {
 		*errp = -ENOSPC;
 		return 0;
diff -puN fs/ext3/ialloc.c~d-task-xid fs/ext3/ialloc.c
--- 25/fs/ext3/ialloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext3/ialloc.c	2003-09-27 19:29:17.000000000 -0700
@@ -538,7 +538,7 @@ got:
 		percpu_counter_inc(&sbi->s_dirs_counter);
 	sb->s_dirt = 1;
 
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	if (test_opt (sb, GRPID))
 		inode->i_gid = dir->i_gid;
 	else if (dir->i_mode & S_ISGID) {
@@ -546,7 +546,7 @@ got:
 		if (S_ISDIR(mode))
 			mode |= S_ISGID;
 	} else
-		inode->i_gid = current->fsgid;
+		inode->i_gid = tsk_fsgid(current);
 	inode->i_mode = mode;
 
 	inode->i_ino = ino;
diff -puN fs/ext3/ioctl.c~d-task-xid fs/ext3/ioctl.c
--- 25/fs/ext3/ioctl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ext3/ioctl.c	2003-09-27 19:29:17.000000000 -0700
@@ -37,7 +37,7 @@ int ext3_ioctl (struct inode * inode, st
 		if (IS_RDONLY(inode))
 			return -EROFS;
 
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 			return -EACCES;
 
 		if (get_user(flags, (int *) arg))
@@ -108,7 +108,7 @@ flags_err:
 		__u32 generation;
 		int err;
 
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_FOWNER))
 			return -EPERM;
 		if (IS_RDONLY(inode))
 			return -EROFS;
diff -puN fs/fat/inode.c~d-task-xid fs/fat/inode.c
--- 25/fs/fat/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/fat/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -267,8 +267,8 @@ static int parse_options(char *options, 
 
 	opts->isvfat = is_vfat;
 
-	opts->fs_uid = current->uid;
-	opts->fs_gid = current->gid;
+	opts->fs_uid = tsk_uid(current);
+	opts->fs_gid = tsk_gid(current);
 	opts->fs_fmask = opts->fs_dmask = current->fs->umask;
 	opts->codepage = 0;
 	opts->iocharset = NULL;
diff -puN fs/fcntl.c~d-task-xid fs/fcntl.c
--- 25/fs/fcntl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/fcntl.c	2003-09-27 19:29:17.000000000 -0700
@@ -269,7 +269,7 @@ int f_setown(struct file *filp, unsigned
 	if (err)
 		return err;
 
-	f_modown(filp, arg, current->uid, current->euid, force);
+	f_modown(filp, arg, tsk_uid(current), tsk_euid(current), force);
 	return 0;
 }
 
@@ -422,8 +422,8 @@ static inline int sigio_perm(struct task
                              struct fown_struct *fown)
 {
 	return ((fown->euid == 0) ||
- 	        (fown->euid == p->suid) || (fown->euid == p->uid) ||
- 	        (fown->uid == p->suid) || (fown->uid == p->uid));
+ 	        (fown->euid == tsk_suid(p)) || (fown->euid == tsk_uid(p)) ||
+ 	        (fown->uid == tsk_suid(p)) || (fown->uid == tsk_uid(p)));
 }
 
 static void send_sigio_to_task(struct task_struct *p,
diff -puN fs/file_table.c~d-task-xid fs/file_table.c
--- 25/fs/file_table.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/file_table.c	2003-09-27 19:29:17.000000000 -0700
@@ -78,8 +78,8 @@ static int old_max;
 			}
 			eventpoll_init_file(f);
 			atomic_set(&f->f_count, 1);
-			f->f_uid = current->fsuid;
-			f->f_gid = current->fsgid;
+			f->f_uid = tsk_fsuid(current);
+			f->f_gid = tsk_fsgid(current);
 			f->f_owner.lock = RW_LOCK_UNLOCKED;
 			/* f->f_version: 0 */
 			INIT_LIST_HEAD(&f->f_list);
@@ -114,8 +114,8 @@ int open_private_file(struct file *filp,
 	filp->f_mode   = (flags+1) & O_ACCMODE;
 	atomic_set(&filp->f_count, 1);
 	filp->f_dentry = dentry;
-	filp->f_uid    = current->fsuid;
-	filp->f_gid    = current->fsgid;
+	filp->f_uid    = tsk_fsuid(current);
+	filp->f_gid    = tsk_fsgid(current);
 	filp->f_op     = dentry->d_inode->i_fop;
 	INIT_LIST_HEAD(&filp->f_list);
 	error = security_file_alloc(filp);
diff -puN fs/hfs/super.c~d-task-xid fs/hfs/super.c
--- 25/fs/hfs/super.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/hfs/super.c	2003-09-27 19:29:17.000000000 -0700
@@ -225,8 +225,8 @@ static int parse_options(char *options, 
 	/* initialize the sb with defaults */
 	memset(hsb, 0, sizeof(*hsb));
 	hsb->magic = HFS_SB_MAGIC;
-	hsb->s_uid   = current->uid;
-	hsb->s_gid   = current->gid;
+	hsb->s_uid   = tsk_uid(current);
+	hsb->s_gid   = tsk_gid(current);
 	hsb->s_umask = current->fs->umask;
 	hsb->s_type    = 0x3f3f3f3f;	/* == '????' */
 	hsb->s_creator = 0x3f3f3f3f;	/* == '????' */
diff -puN fs/hpfs/namei.c~d-task-xid fs/hpfs/namei.c
--- 25/fs/hpfs/namei.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/hpfs/namei.c	2003-09-27 19:29:17.000000000 -0700
@@ -80,11 +80,11 @@ int hpfs_mkdir(struct inode *dir, struct
 		result->i_atime.tv_nsec = 0; 
 		hpfs_i(result)->i_ea_size = 0;
 		if (dee.read_only) result->i_mode &= ~0222;
-		if (result->i_uid != current->fsuid ||
-		    result->i_gid != current->fsgid ||
+		if (result->i_uid != tsk_fsuid(current) ||
+		    result->i_gid != tsk_fsgid(current) ||
 		    result->i_mode != (mode | S_IFDIR)) {
-			result->i_uid = current->fsuid;
-			result->i_gid = current->fsgid;
+			result->i_uid = tsk_fsuid(current);
+			result->i_gid = tsk_fsgid(current);
 			result->i_mode = mode | S_IFDIR;
 			hpfs_write_inode_nolock(result);
 		}
@@ -158,11 +158,11 @@ int hpfs_create(struct inode *dir, struc
 			result->i_data.a_ops = &hpfs_aops;
 			hpfs_i(result)->mmu_private = 0;
 		}
-		if (result->i_uid != current->fsuid ||
-		    result->i_gid != current->fsgid ||
+		if (result->i_uid != tsk_fsuid(current) ||
+		    result->i_gid != tsk_fsgid(current) ||
 		    result->i_mode != (mode | S_IFREG)) {
-			result->i_uid = current->fsuid;
-			result->i_gid = current->fsgid;
+			result->i_uid = tsk_fsuid(current);
+			result->i_gid = tsk_fsgid(current);
 			result->i_mode = mode | S_IFREG;
 			hpfs_write_inode_nolock(result);
 		}
@@ -228,8 +228,8 @@ int hpfs_mknod(struct inode *dir, struct
 		hpfs_i(result)->i_ea_size = 0;
 		/*if (result->i_blocks == -1) result->i_blocks = 1;
 		if (result->i_size == -1) result->i_size = 0;*/
-		result->i_uid = current->fsuid;
-		result->i_gid = current->fsgid;
+		result->i_uid = tsk_fsuid(current);
+		result->i_gid = tsk_fsgid(current);
 		result->i_nlink = 1;
 		result->i_size = 0;
 		result->i_blocks = 1;
@@ -302,8 +302,8 @@ int hpfs_symlink(struct inode *dir, stru
 		/*if (result->i_blocks == -1) result->i_blocks = 1;
 		if (result->i_size == -1) result->i_size = 0;*/
 		result->i_mode = S_IFLNK | 0777;
-		result->i_uid = current->fsuid;
-		result->i_gid = current->fsgid;
+		result->i_uid = tsk_fsuid(current);
+		result->i_gid = tsk_fsgid(current);
 		result->i_blocks = 1;
 		result->i_size = strlen(symlink);
 		result->i_op = &page_symlink_inode_operations;
diff -puN fs/hpfs/super.c~d-task-xid fs/hpfs/super.c
--- 25/fs/hpfs/super.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/hpfs/super.c	2003-09-27 19:29:17.000000000 -0700
@@ -452,8 +452,8 @@ static int hpfs_fill_super(struct super_
 	init_MUTEX(&sbi->hpfs_creation_de);
 	init_waitqueue_head(&sbi->sb_iget_q);
 
-	uid = current->uid;
-	gid = current->gid;
+	uid = tsk_uid(current);
+	gid = tsk_gid(current);
 	umask = current->fs->umask;
 	lowercase = 0;
 	conv = CONV_BINARY;
diff -puN fs/hugetlbfs/inode.c~d-task-xid fs/hugetlbfs/inode.c
--- 25/fs/hugetlbfs/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/hugetlbfs/inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -412,8 +412,9 @@ static struct inode *hugetlbfs_get_inode
 static int hugetlbfs_mknod(struct inode *dir,
 			struct dentry *dentry, int mode, dev_t dev)
 {
-	struct inode *inode = hugetlbfs_get_inode(dir->i_sb, current->fsuid, 
-					current->fsgid, mode, dev);
+	struct inode *inode = hugetlbfs_get_inode(dir->i_sb,
+					tsk_fsuid(current),
+					tsk_fsgid(current), mode, dev);
 	int error = -ENOSPC;
 
 	if (inode) {
@@ -445,8 +446,9 @@ static int hugetlbfs_symlink(struct inod
 	struct inode *inode;
 	int error = -ENOSPC;
 
-	inode = hugetlbfs_get_inode(dir->i_sb, current->fsuid,
-					current->fsgid, S_IFLNK|S_IRWXUGO, 0);
+	inode = hugetlbfs_get_inode(dir->i_sb, tsk_fsuid(current),
+					tsk_fsgid(current),
+					S_IFLNK|S_IRWXUGO, 0);
 	if (inode) {
 		int l = strlen(symname)+1;
 		error = page_symlink(inode, symname, l);
@@ -655,8 +657,8 @@ hugetlbfs_fill_super(struct super_block 
 
 	config.nr_blocks = -1; /* No limit on size by default */
 	config.nr_inodes = -1; /* No limit on number of inodes by default */
-	config.uid = current->fsuid;
-	config.gid = current->fsgid;
+	config.uid = tsk_fsuid(current);
+	config.gid = tsk_fsgid(current);
 	config.mode = 0755;
 	ret = hugetlbfs_parse_options(data, &config);
 
@@ -762,8 +764,8 @@ struct file *hugetlb_zero_setup(size_t s
 		goto out_dentry;
 
 	error = -ENOSPC;
-	inode = hugetlbfs_get_inode(root->d_sb, current->fsuid,
-				current->fsgid, S_IFREG | S_IRWXUGO, 0);
+	inode = hugetlbfs_get_inode(root->d_sb, tsk_fsuid(current),
+				tsk_fsgid(current), S_IFREG | S_IRWXUGO, 0);
 	if (!inode)
 		goto out_file;
 
diff -puN fs/intermezzo/dir.c~d-task-xid fs/intermezzo/dir.c
--- 25/fs/intermezzo/dir.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/intermezzo/dir.c	2003-09-27 19:29:17.000000000 -0700
@@ -126,7 +126,7 @@ struct dentry *presto_tmpfs_ilookup(stru
 
 inline int presto_can_ilookup(void)
 {
-        return (current->euid == izo_authorized_uid ||
+        return (tsk_euid(current) == izo_authorized_uid ||
                 capable(CAP_DAC_READ_SEARCH));
 }
 
@@ -142,7 +142,7 @@ struct dentry *presto_iget_ilookup(struc
 
         if ( !presto_can_ilookup() ) {
                 CERROR("ilookup denied: euid %u, authorized_uid %u\n",
-                       current->euid, izo_authorized_uid);
+                       tsk_euid(current), izo_authorized_uid);
                 return ERR_PTR(-EPERM);
         }
         error = -ENOENT;
@@ -900,7 +900,7 @@ int presto_ioctl(struct inode *inode, st
                 }
         }
 
-        if (current->euid != 0 && current->euid != izo_authorized_uid) {
+        if (tsk_euid(current) != 0 && tsk_euid(current) != izo_authorized_uid) {
                 EXIT;
                 return -EPERM;
         }
diff -puN fs/intermezzo/file.c~d-task-xid fs/intermezzo/file.c
--- 25/fs/intermezzo/file.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/intermezzo/file.c	2003-09-27 19:29:17.000000000 -0700
@@ -213,14 +213,14 @@ static int presto_file_open(struct inode
                 /* LOCK: XXX check that the kernel lock protects this alloc */
                 fdata->fd_do_lml = 0;
                 fdata->fd_bytes_written = 0;
-                fdata->fd_fsuid = current->fsuid;
-                fdata->fd_fsgid = current->fsgid;
+                fdata->fd_fsuid = tsk_fsuid(current);
+                fdata->fd_fsgid = tsk_fsgid(current);
                 fdata->fd_mode = file->f_dentry->d_inode->i_mode;
                 fdata->fd_uid = file->f_dentry->d_inode->i_uid;
                 fdata->fd_gid = file->f_dentry->d_inode->i_gid;
-                fdata->fd_ngroups = current->ngroups;
-                for (i=0 ; i < current->ngroups ; i++)
-                        fdata->fd_groups[i] = current->groups[i];
+                fdata->fd_ngroups = tsk_ngroups(current);
+                for (i=0 ; i < tsk_ngroups(current) ; i++)
+                        fdata->fd_groups[i] = tsk_groups(current)[i];
                 if (!ISLENTO(minor)) 
                         fdata->fd_info.flags = LENTO_FL_KML; 
                 else { 
diff -puN fs/intermezzo/intermezzo_fs.h~d-task-xid fs/intermezzo/intermezzo_fs.h
--- 25/fs/intermezzo/intermezzo_fs.h~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/intermezzo/intermezzo_fs.h	2003-09-27 19:29:17.000000000 -0700
@@ -165,13 +165,13 @@ static inline void push_ctxt(struct run_
         save->fs = get_fs();
         save->pwd = dget(current->fs->pwd);
         save->pwdmnt = mntget(current->fs->pwdmnt);
-        save->fsgid = current->fsgid;
-        save->fsuid = current->fsuid;
+        save->fsgid = tsk_fsgid(current);
+        save->fsuid = tsk_fsuid(current);
         save->root = current->fs->root;
         save->rootmnt = current->fs->rootmnt;
-        save->ngroups = current->ngroups;
-        for (i = 0; i< current->ngroups; i++) 
-                save->groups[i] = current->groups[i];
+        save->ngroups = tsk_ngroups(current);
+        for (i = 0; i< tsk_ngroups(current); i++)
+                save->groups[i] = tsk_groups(current)[i];
 
         set_fs(new->fs);
         lock_kernel();
@@ -179,12 +179,12 @@ static inline void push_ctxt(struct run_
         if (new->root)
                 set_fs_root(current->fs, new->rootmnt, new->root);
         unlock_kernel();
-        current->fsuid = new->fsuid;
-        current->fsgid = new->fsgid;
+        set_tsk_fsuid(current, new->fsuid);
+        set_tsk_fsgid(current, new->fsgid);
         if (new->ngroups > 0) {
-                current->ngroups = new->ngroups;
+                set_tsk_ngroups(current, new->ngroups);
                 for (i = 0; i< new->ngroups; i++) 
-                        current->groups[i] = new->groups[i];
+                        tsk_groups(current)[i] = new->groups[i];
         }
         
 }
@@ -199,11 +199,11 @@ static inline void pop_ctxt(struct run_c
         if (saved->root)
                 set_fs_root(current->fs, saved->rootmnt, saved->root);
         unlock_kernel();
-        current->fsuid = saved->fsuid;
-        current->fsgid = saved->fsgid;
-        current->ngroups = saved->ngroups;
+        set_tsk_fsuid(current, saved->fsuid);
+        set_tsk_fsgid(current, saved->fsgid);
+        set_tsk_ngroups(current, saved->ngroups);
         for (i = 0; i< saved->ngroups; i++) 
-                current->groups[i] = saved->groups[i];
+                tsk_groups(current)[i] = saved->groups[i];
 
         mntput(saved->pwdmnt);
         dput(saved->pwd);
diff -puN fs/intermezzo/journal.c~d-task-xid fs/intermezzo/journal.c
--- 25/fs/intermezzo/journal.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/intermezzo/journal.c	2003-09-27 19:29:17.000000000 -0700
@@ -317,7 +317,7 @@ journal_log_prefix_with_groups_and_ids(c
         p.len = cpu_to_le32(rec->size);
         p.version = KML_MAJOR_VERSION | KML_MINOR_VERSION;
         p.pid = cpu_to_le32(current->pid);
-        p.auid = cpu_to_le32(current->uid);
+        p.auid = cpu_to_le32(tsk_uid(current));
         p.fsuid = cpu_to_le32(fsuid);
         p.fsgid = cpu_to_le32(fsgid);
         p.ngroups = cpu_to_le32(ngroups);
@@ -337,14 +337,14 @@ journal_log_prefix(char *buf, int opcode
         int i; 
 
         /* convert 16 bit gid's to 32 bit gid's */
-        for (i=0; i<current->ngroups; i++) 
-                groups[i] = (__u32) current->groups[i];
+        for (i=0; i<tsk_ngroups(current); i++)
+                groups[i] = (__u32) tsk_groups(current)[i];
         
         return journal_log_prefix_with_groups_and_ids(buf, opcode, rec,
-                                                      (__u32)current->ngroups,
+                                                      (__u32)tsk_ngroups(current),
                                                       groups,
-                                                      (__u32)current->fsuid,
-                                                      (__u32)current->fsgid);
+                                                      (__u32)tsk_fsuid(current),
+                                                      (__u32)tsk_fsgid(current));
 }
 
 static inline char *
@@ -353,8 +353,8 @@ journal_log_prefix_with_groups(char *buf
 {
         return journal_log_prefix_with_groups_and_ids(buf, opcode, rec,
                                                       ngroups, groups,
-                                                      (__u32)current->fsuid,
-                                                      (__u32)current->fsgid);
+                                                      (__u32)tsk_fsuid(current),
+                                                      (__u32)tsk_fsgid(current));
 }
 
 static inline char *log_dentry_version(char *buf, struct dentry *dentry)
@@ -1320,7 +1320,7 @@ int presto_write_lml_close(struct rec_in
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
         ino = cpu_to_le64(dentry->d_inode->i_ino);
         generation = cpu_to_le32(dentry->d_inode->i_generation);
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + sizeof(*new_file_ver) +
                 sizeof(ino) + sizeof(generation) + sizeof(pathlen) +
                 sizeof(remote_ino) + sizeof(remote_generation) + 
@@ -1530,7 +1530,7 @@ int presto_journal_setattr(struct rec_in
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + sizeof(*old_ver) +
                 sizeof(valid) + sizeof(mode) + sizeof(uid) + sizeof(gid) +
                 sizeof(fsize) + sizeof(mtime) + sizeof(ctime) + sizeof(flags) +
@@ -1601,7 +1601,7 @@ int presto_get_fileid(int minor, struct 
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + sizeof(pathlen) +
                 size_round(le32_to_cpu(pathlen)) +
                 sizeof(struct kml_suffix);
@@ -1660,7 +1660,7 @@ int presto_journal_create(struct rec_inf
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
                 sizeof(struct kml_suffix);
@@ -1716,7 +1716,7 @@ int presto_journal_symlink(struct rec_in
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
                 sizeof(targetlen) + sizeof(struct kml_suffix);
@@ -1774,7 +1774,7 @@ int presto_journal_mkdir(struct rec_info
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size = sizeof(__u32) * current->ngroups + 
+        size = sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
                 sizeof(struct kml_suffix);
@@ -1829,7 +1829,7 @@ presto_journal_rmdir(struct rec_info *re
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dir, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(pathlen) + sizeof(llen) + sizeof(*rb) +
                 sizeof(struct kml_suffix);
@@ -1892,7 +1892,7 @@ presto_journal_mknod(struct rec_info *re
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size = sizeof(__u32) * current->ngroups + 
+        size = sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(lmajor) +
                 sizeof(lminor) + sizeof(pathlen) +
@@ -1952,7 +1952,7 @@ presto_journal_link(struct rec_info *rec
         BUFF_ALLOC(buffer, srcbuffer);
         path = presto_path(tgt, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(srcpathlen) + sizeof(pathlen) +
                 sizeof(struct kml_suffix);
@@ -2010,7 +2010,7 @@ int presto_journal_rename(struct rec_inf
         BUFF_ALLOC(buffer, srcbuffer);
         path = presto_path(tgt, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->ngroups + 
+        size =  sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 4 * sizeof(*src_dir_ver) +
                 sizeof(srcpathlen) + sizeof(pathlen) +
                 sizeof(struct kml_suffix);
@@ -2070,7 +2070,7 @@ int presto_journal_unlink(struct rec_inf
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dir, root, buffer, PAGE_SIZE);
         pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size = sizeof(__u32) * current->ngroups + 
+        size = sizeof(__u32) * tsk_ngroups(current) +
                 sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(pathlen) + sizeof(llen) + sizeof(*rb) +
                 sizeof(old_targetlen) + sizeof(struct kml_suffix);
@@ -2149,14 +2149,14 @@ presto_journal_close(struct rec_info *re
                 open_fsuid = fd->fd_fsuid;
                 open_fsgid = fd->fd_fsgid;
         } else {
-                open_ngroups = current->ngroups;
-                for (i=0; i<current->ngroups; i++)
-                        open_groups[i] =  (__u32) current->groups[i]; 
+                open_ngroups = tsk_ngroups(current);
+                for (i=0; i<tsk_ngroups(current); i++)
+                        open_groups[i] =  (__u32) tsk_groups(current)[i];
                 open_mode = dentry->d_inode->i_mode;
                 open_uid = dentry->d_inode->i_uid;
                 open_gid = dentry->d_inode->i_gid;
-                open_fsuid = current->fsuid;
-                open_fsgid = current->fsgid;
+                open_fsuid = tsk_fsuid(current);
+                open_fsgid = tsk_fsgid(current);
         }
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
diff -puN fs/intermezzo/upcall.c~d-task-xid fs/intermezzo/upcall.c
--- 25/fs/intermezzo/upcall.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/intermezzo/upcall.c	2003-09-27 19:29:17.000000000 -0700
@@ -96,7 +96,7 @@ static struct izo_upcall_hdr *upc_pack(_
         hdr->u_version = IZO_UPC_VERSION;
         hdr->u_opc = opcode;
         hdr->u_pid = current->pid;
-        hdr->u_uid = current->fsuid;
+        hdr->u_uid = tsk_fsuid(current);
 
         if (path) { 
                 /*XXX Robert: please review what len to pass in for 
diff -puN fs/intermezzo/vfs.c~d-task-xid fs/intermezzo/vfs.c
--- 25/fs/intermezzo/vfs.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/intermezzo/vfs.c	2003-09-27 19:29:17.000000000 -0700
@@ -121,9 +121,9 @@ static inline int check_sticky(struct in
 {
         if (!(dir->i_mode & S_ISVTX))
                 return 0;
-        if (inode->i_uid == current->fsuid)
+        if (inode->i_uid == tsk_fsuid(current))
                 return 0;
-        if (dir->i_uid == current->fsuid)
+        if (dir->i_uid == tsk_fsuid(current))
                 return 0;
         return !capable(CAP_FOWNER);
 }
diff -puN fs/jfs/acl.c~d-task-xid fs/jfs/acl.c
--- 25/fs/jfs/acl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/jfs/acl.c	2003-09-27 19:29:17.000000000 -0700
@@ -147,7 +147,7 @@ int jfs_permission(struct inode * inode,
 			return -EACCES;
 	}
 
-	if (current->fsuid == inode->i_uid) {
+	if (tsk_fsuid(current) == inode->i_uid) {
 		mode >>= 6;
 		goto check_mode;
 	}
diff -puN fs/jfs/jfs_inode.c~d-task-xid fs/jfs/jfs_inode.c
--- 25/fs/jfs/jfs_inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/jfs/jfs_inode.c	2003-09-27 19:29:17.000000000 -0700
@@ -52,13 +52,13 @@ struct inode *ialloc(struct inode *paren
 		return NULL;
 	}
 
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	if (parent->i_mode & S_ISGID) {
 		inode->i_gid = parent->i_gid;
 		if (S_ISDIR(mode))
 			mode |= S_ISGID;
 	} else
-		inode->i_gid = current->fsgid;
+		inode->i_gid = tsk_fsgid(current);
 
 	inode->i_mode = mode;
 	if (S_ISDIR(mode))
diff -puN fs/jfs/xattr.c~d-task-xid fs/jfs/xattr.c
--- 25/fs/jfs/xattr.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/jfs/xattr.c	2003-09-27 19:29:17.000000000 -0700
@@ -653,7 +653,7 @@ static int can_set_system_xattr(struct i
 	struct posix_acl *acl;
 	int rc;
 
-	if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+	if ((tsk_fsuid(current) != inode->i_uid) && !capable(CAP_FOWNER))
 		return -EPERM;
 
 	/*
diff -puN fs/locks.c~d-task-xid fs/locks.c
--- 25/fs/locks.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/locks.c	2003-09-27 19:29:17.000000000 -0700
@@ -1194,7 +1194,7 @@ int fcntl_setlease(unsigned int fd, stru
 	dentry = filp->f_dentry;
 	inode = dentry->d_inode;
 
-	if ((current->fsuid != inode->i_uid) && !capable(CAP_LEASE))
+	if ((tsk_fsuid(current) != inode->i_uid) && !capable(CAP_LEASE))
 		return -EACCES;
 	if (!S_ISREG(inode->i_mode))
 		return -EINVAL;
diff -puN fs/minix/bitmap.c~d-task-xid fs/minix/bitmap.c
--- 25/fs/minix/bitmap.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/minix/bitmap.c	2003-09-27 19:29:17.000000000 -0700
@@ -247,8 +247,8 @@ struct inode * minix_new_inode(const str
 		iput(inode);
 		return NULL;
 	}
-	inode->i_uid = current->fsuid;
-	inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+	inode->i_uid = tsk_fsuid(current);
+	inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : tsk_fsgid(current);
 	inode->i_ino = j;
 	inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
 	inode->i_blocks = inode->i_blksize = 0;
diff -puN fs/namei.c~d-task-xid fs/namei.c
--- 25/fs/namei.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/namei.c	2003-09-27 19:29:17.000000000 -0700
@@ -174,7 +174,7 @@ int vfs_permission(struct inode * inode,
 			return -EACCES;
 	}
 
-	if (current->fsuid == inode->i_uid)
+	if (tsk_fsuid(current) == inode->i_uid)
 		mode >>= 6;
 	else if (in_group_p(inode->i_gid))
 		mode >>= 3;
@@ -309,7 +309,7 @@ static inline int exec_permission_lite(s
 	if ((inode->i_op && inode->i_op->permission))
 		return -EAGAIN;
 
-	if (current->fsuid == inode->i_uid)
+	if (tsk_fsuid(current) == inode->i_uid)
 		mode >>= 6;
 	else if (in_group_p(inode->i_gid))
 		mode >>= 3;
@@ -982,9 +982,9 @@ static inline int check_sticky(struct in
 {
 	if (!(dir->i_mode & S_ISVTX))
 		return 0;
-	if (inode->i_uid == current->fsuid)
+	if (inode->i_uid == tsk_fsuid(current))
 		return 0;
-	if (dir->i_uid == current->fsuid)
+	if (dir->i_uid == tsk_fsuid(current))
 		return 0;
 	return !capable(CAP_FOWNER);
 }
diff -puN fs/ncpfs/ioctl.c~d-task-xid fs/ncpfs/ioctl.c
--- 25/fs/ncpfs/ioctl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ncpfs/ioctl.c	2003-09-27 19:29:17.000000000 -0700
@@ -41,7 +41,7 @@ int ncp_ioctl(struct inode *inode, struc
 	case NCP_IOC_NCPREQUEST:
 
 		if ((permission(inode, MAY_WRITE, NULL) != 0)
-		    && (current->uid != server->m.mounted_uid)) {
+		    && (tsk_uid(current) != server->m.mounted_uid)) {
 			return -EACCES;
 		}
 		if (copy_from_user(&request, (struct ncp_ioctl_request *) arg,
@@ -100,7 +100,7 @@ int ncp_ioctl(struct inode *inode, struc
 			struct ncp_fs_info info;
 
 			if ((permission(inode, MAY_WRITE, NULL) != 0)
-			    && (current->uid != server->m.mounted_uid)) {
+			    && (tsk_uid(current) != server->m.mounted_uid)) {
 				return -EACCES;
 			}
 			if (copy_from_user(&info, (struct ncp_fs_info *) arg, 
@@ -128,7 +128,7 @@ int ncp_ioctl(struct inode *inode, struc
 			struct ncp_fs_info_v2 info2;
 
 			if ((permission(inode, MAY_WRITE, NULL) != 0)
-			    && (current->uid != server->m.mounted_uid)) {
+			    && (tsk_uid(current) != server->m.mounted_uid)) {
 				return -EACCES;
 			}
 			if (copy_from_user(&info2, (struct ncp_fs_info_v2 *) arg, 
@@ -156,7 +156,7 @@ int ncp_ioctl(struct inode *inode, struc
 			unsigned long tmp = server->m.mounted_uid;
 
 			if (   (permission(inode, MAY_READ, NULL) != 0)
-			    && (current->uid != server->m.mounted_uid))
+			    && (tsk_uid(current) != server->m.mounted_uid))
 			{
 				return -EACCES;
 			}
@@ -170,7 +170,7 @@ int ncp_ioctl(struct inode *inode, struc
 			struct ncp_setroot_ioctl sr;
 
 			if (   (permission(inode, MAY_READ, NULL) != 0)
-			    && (current->uid != server->m.mounted_uid))
+			    && (tsk_uid(current) != server->m.mounted_uid))
 			{
 				return -EACCES;
 			}
@@ -250,7 +250,7 @@ int ncp_ioctl(struct inode *inode, struc
 #ifdef CONFIG_NCPFS_PACKET_SIGNING	
 	case NCP_IOC_SIGN_INIT:
 		if ((permission(inode, MAY_WRITE, NULL) != 0)
-		    && (current->uid != server->m.mounted_uid))
+		    && (tsk_uid(current) != server->m.mounted_uid))
 		{
 			return -EACCES;
 		}
@@ -273,7 +273,7 @@ int ncp_ioctl(struct inode *inode, struc
 		
         case NCP_IOC_SIGN_WANTED:
 		if (   (permission(inode, MAY_READ, NULL) != 0)
-		    && (current->uid != server->m.mounted_uid))
+		    && (tsk_uid(current) != server->m.mounted_uid))
 		{
 			return -EACCES;
 		}
@@ -286,7 +286,7 @@ int ncp_ioctl(struct inode *inode, struc
 			int newstate;
 
 			if (   (permission(inode, MAY_WRITE, NULL) != 0)
-			    && (current->uid != server->m.mounted_uid))
+			    && (tsk_uid(current) != server->m.mounted_uid))
 			{
 				return -EACCES;
 			}
@@ -307,7 +307,7 @@ int ncp_ioctl(struct inode *inode, struc
 #ifdef CONFIG_NCPFS_IOCTL_LOCKING
 	case NCP_IOC_LOCKUNLOCK:
 		if (   (permission(inode, MAY_WRITE, NULL) != 0)
-		    && (current->uid != server->m.mounted_uid))
+		    && (tsk_uid(current) != server->m.mounted_uid))
 		{
 			return -EACCES;
 		}
@@ -379,7 +379,7 @@ outrel:			
 #endif	/* CONFIG_NCPFS_IOCTL_LOCKING */
 
 	case NCP_IOC_GETOBJECTNAME:
-		if (current->uid != server->m.mounted_uid) {
+		if (tsk_uid(current) != server->m.mounted_uid) {
 			return -EACCES;
 		}
 		{
@@ -405,7 +405,7 @@ outrel:			
 			return 0;
 		}
 	case NCP_IOC_SETOBJECTNAME:
-		if (current->uid != server->m.mounted_uid) {
+		if (tsk_uid(current) != server->m.mounted_uid) {
 			return -EACCES;
 		}
 		{
@@ -449,7 +449,7 @@ outrel:			
 			return 0;
 		}
 	case NCP_IOC_GETPRIVATEDATA:
-		if (current->uid != server->m.mounted_uid) {
+		if (tsk_uid(current) != server->m.mounted_uid) {
 			return -EACCES;
 		}
 		{
@@ -473,7 +473,7 @@ outrel:			
 			return 0;
 		}
 	case NCP_IOC_SETPRIVATEDATA:
-		if (current->uid != server->m.mounted_uid) {
+		if (tsk_uid(current) != server->m.mounted_uid) {
 			return -EACCES;
 		}
 		{
@@ -609,7 +609,7 @@ outrel:			
 #endif /* CONFIG_NCPFS_NLS */
 	case NCP_IOC_SETDENTRYTTL:
 		if ((permission(inode, MAY_WRITE, NULL) != 0) &&
-				 (current->uid != server->m.mounted_uid))
+				 (tsk_uid(current) != server->m.mounted_uid))
 			return -EACCES;
 		{
 			u_int32_t user;
@@ -638,7 +638,7 @@ outrel:			
            so we have this out of switch */
 	if (cmd == NCP_IOC_GETMOUNTUID) {
 		if ((permission(inode, MAY_READ, NULL) != 0)
-		    && (current->uid != server->m.mounted_uid)) {
+		    && (tsk_uid(current) != server->m.mounted_uid)) {
 			return -EACCES;
 		}
 		if (put_user(NEW_TO_OLD_UID(server->m.mounted_uid), (__kernel_uid_t *) arg))
diff -puN fs/nfsd/auth.c~d-task-xid fs/nfsd/auth.c
--- 25/fs/nfsd/auth.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/nfsd/auth.c	2003-09-27 19:29:17.000000000 -0700
@@ -32,20 +32,20 @@ nfsd_setuser(struct svc_rqst *rqstp, str
 	}
 
 	if (cred->cr_uid != (uid_t) -1)
-		current->fsuid = cred->cr_uid;
+		set_tsk_fsuid(current, cred->cr_uid);
 	else
-		current->fsuid = exp->ex_anon_uid;
+		set_tsk_fsuid(current, exp->ex_anon_uid);
 	if (cred->cr_gid != (gid_t) -1)
-		current->fsgid = cred->cr_gid;
+		set_tsk_fsgid(current, cred->cr_gid);
 	else
-		current->fsgid = exp->ex_anon_gid;
+		set_tsk_fsgid(current, exp->ex_anon_gid);
 	for (i = 0; i < NGROUPS; i++) {
 		gid_t group = cred->cr_groups[i];
 		if (group == (gid_t) NOGROUP)
 			break;
-		current->groups[i] = group;
+		tsk_groups(current)[i] = group;
 	}
-	current->ngroups = i;
+	set_tsk_ngroups(current, i);
 
 	if ((cred->cr_uid)) {
 		cap_t(current->cap_effective) &= ~CAP_NFSD_MASK;
diff -puN fs/nfsd/vfs.c~d-task-xid fs/nfsd/vfs.c
--- 25/fs/nfsd/vfs.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/nfsd/vfs.c	2003-09-27 19:29:17.000000000 -0700
@@ -1581,7 +1581,7 @@ nfsd_permission(struct svc_export *exp, 
 	 * with NFSv3.
 	 */
 	if ((acc & MAY_OWNER_OVERRIDE) &&
-	    inode->i_uid == current->fsuid)
+	    inode->i_uid == tsk_fsuid(current))
 		return 0;
 
 	err = permission(inode, acc & (MAY_READ|MAY_WRITE|MAY_EXEC), NULL);
diff -puN fs/open.c~d-task-xid fs/open.c
--- 25/fs/open.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/open.c	2003-09-27 19:29:18.000000000 -0700
@@ -372,7 +372,7 @@ asmlinkage long sys_utime(char __user * 
                 if (IS_IMMUTABLE(inode))
                         goto dput_and_out;
 
-		if (current->fsuid != inode->i_uid &&
+		if (tsk_fsuid(current) != inode->i_uid &&
 		    (error = permission(inode,MAY_WRITE,&nd)) != 0)
 			goto dput_and_out;
 	}
@@ -425,7 +425,7 @@ long do_utimes(char __user * filename, s
                 if (IS_IMMUTABLE(inode))
                         goto dput_and_out;
 
-		if (current->fsuid != inode->i_uid &&
+		if (tsk_fsuid(current) != inode->i_uid &&
 		    (error = permission(inode,MAY_WRITE,&nd)) != 0)
 			goto dput_and_out;
 	}
@@ -463,12 +463,13 @@ asmlinkage long sys_access(const char __
 	if (mode & ~S_IRWXO)	/* where's F_OK, X_OK, W_OK, R_OK? */
 		return -EINVAL;
 
-	old_fsuid = current->fsuid;
-	old_fsgid = current->fsgid;
+	old_fsuid = tsk_fsuid(current);
+	old_fsgid = tsk_fsgid(current);
 	old_cap = current->cap_effective;
 
-	current->fsuid = current->uid;
-	current->fsgid = current->gid;
+	/* FIXME: this is broken if the IDs are shared between threads.  */
+	set_tsk_fsuid(current, tsk_uid(current));
+	set_tsk_fsgid(current, tsk_gid(current));
 
 	/*
 	 * Clear the capabilities if we switch to a non-root user
@@ -478,7 +479,7 @@ asmlinkage long sys_access(const char __
 	 * value below.  We should hold task_capabilities_lock,
 	 * but we cannot because user_path_walk can sleep.
 	 */
-	if (current->uid)
+	if (tsk_uid(current))
 		cap_clear(current->cap_effective);
 	else
 		current->cap_effective = current->cap_permitted;
@@ -493,8 +494,8 @@ asmlinkage long sys_access(const char __
 		path_release(&nd);
 	}
 
-	current->fsuid = old_fsuid;
-	current->fsgid = old_fsgid;
+	set_tsk_fsuid(current, old_fsuid);
+	set_tsk_fsgid(current, old_fsgid);
 	current->cap_effective = old_cap;
 
 	return res;
diff -puN fs/pipe.c~d-task-xid fs/pipe.c
--- 25/fs/pipe.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/pipe.c	2003-09-27 19:29:18.000000000 -0700
@@ -523,8 +523,8 @@ static struct inode * get_pipe_inode(voi
 	 */
 	inode->i_state = I_DIRTY;
 	inode->i_mode = S_IFIFO | S_IRUSR | S_IWUSR;
-	inode->i_uid = current->fsuid;
-	inode->i_gid = current->fsgid;
+	inode->i_uid = tsk_fsuid(current);
+	inode->i_gid = tsk_fsgid(current);
 	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
 	inode->i_blksize = PAGE_SIZE;
 	return inode;
diff -puN fs/posix_acl.c~d-task-xid fs/posix_acl.c
--- 25/fs/posix_acl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/posix_acl.c	2003-09-27 19:29:18.000000000 -0700
@@ -220,11 +220,11 @@ posix_acl_permission(struct inode *inode
                 switch(pa->e_tag) {
                         case ACL_USER_OBJ:
 				/* (May have been checked already) */
-                                if (inode->i_uid == current->fsuid)
+                                if (inode->i_uid == tsk_fsuid(current))
                                         goto check_perm;
                                 break;
                         case ACL_USER:
-                                if (pa->e_id == current->fsuid)
+                                if (pa->e_id == tsk_fsuid(current))
                                         goto mask;
 				break;
                         case ACL_GROUP_OBJ:
diff -puN fs/proc/array.c~d-task-xid fs/proc/array.c
--- 25/fs/proc/array.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/proc/array.c	2003-09-27 19:29:18.000000000 -0700
@@ -166,8 +166,8 @@ static inline char * task_state(struct t
 	       	p->tgid,
 		p->pid, p->pid ? p->real_parent->pid : 0,
 		p->pid && p->ptrace ? p->parent->pid : 0,
-		p->uid, p->euid, p->suid, p->fsuid,
-		p->gid, p->egid, p->sgid, p->fsgid);
+		tsk_uid(p), tsk_euid(p), tsk_suid(p), tsk_fsuid(p),
+		tsk_gid(p), tsk_egid(p), tsk_sgid(p), tsk_fsgid(p));
 	read_unlock(&tasklist_lock);	
 	task_lock(p);
 	buffer += sprintf(buffer,
@@ -176,8 +176,8 @@ static inline char * task_state(struct t
 		p->files ? p->files->max_fds : 0);
 	task_unlock(p);
 
-	for (g = 0; g < p->ngroups; g++)
-		buffer += sprintf(buffer, "%d ", p->groups[g]);
+	for (g = 0; g < tsk_ngroups(p); g++)
+		buffer += sprintf(buffer, "%d ", tsk_groups(p)[g]);
 
 	buffer += sprintf(buffer, "\n");
 	return buffer;
diff -puN fs/proc/base.c~d-task-xid fs/proc/base.c
--- 25/fs/proc/base.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/proc/base.c	2003-09-27 19:29:18.000000000 -0700
@@ -648,7 +648,7 @@ static int proc_pid_follow_link(struct d
 	/* We don't need a base pointer in the /proc filesystem */
 	path_release(nd);
 
-	if (current->fsuid != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
+	if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
 		goto out;
 	error = proc_check_root(inode);
 	if (error)
@@ -695,7 +695,7 @@ static int proc_pid_readlink(struct dent
 
 	lock_kernel();
 
-	if (current->fsuid != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
+	if (tsk_fsuid(current) != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
 		goto out;
 	error = proc_check_root(inode);
 	if (error)
@@ -906,8 +906,8 @@ static struct inode *proc_pid_make_inode
 	inode->i_uid = 0;
 	inode->i_gid = 0;
 	if (ino == PROC_TGID_INO || ino == PROC_TID_INO || task_dumpable(task)) {
-		inode->i_uid = task->euid;
-		inode->i_gid = task->egid;
+		inode->i_uid = tsk_euid(task);
+		inode->i_gid = tsk_egid(task);
 	}
 	security_task_to_inode(task, inode);
 
@@ -936,8 +936,8 @@ static int pid_revalidate(struct dentry 
 	struct task_struct *task = proc_task(inode);
 	if (pid_alive(task)) {
 		if (proc_type(inode) == PROC_TGID_INO || proc_type(inode) == PROC_TID_INO || task_dumpable(task)) {
-			inode->i_uid = task->euid;
-			inode->i_gid = task->egid;
+			inode->i_uid = tsk_euid(task);
+			inode->i_gid = tsk_egid(task);
 		} else {
 			inode->i_uid = 0;
 			inode->i_gid = 0;
@@ -967,8 +967,8 @@ static int tid_fd_revalidate(struct dent
 			spin_unlock(&files->file_lock);
 			put_files_struct(files);
 			if (task_dumpable(task)) {
-				inode->i_uid = task->euid;
-				inode->i_gid = task->egid;
+				inode->i_uid = tsk_euid(task);
+				inode->i_gid = tsk_egid(task);
 			} else {
 				inode->i_uid = 0;
 				inode->i_gid = 0;
diff -puN fs/proc/inode.c~d-task-xid fs/proc/inode.c
--- 25/fs/proc/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/proc/inode.c	2003-09-27 19:29:18.000000000 -0700
@@ -139,8 +139,8 @@ static int parse_options(char *options,u
 {
 	char *this_char,*value;
 
-	*uid = current->uid;
-	*gid = current->gid;
+	*uid = tsk_uid(current);
+	*gid = tsk_gid(current);
 	if (!options)
 		return 1;
 	while ((this_char = strsep(&options,",")) != NULL) {
diff -puN fs/quota.c~d-task-xid fs/quota.c
--- 25/fs/quota.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/quota.c	2003-09-27 19:29:18.000000000 -0700
@@ -92,7 +92,7 @@ static int check_quotactl_valid(struct s
 	}
 	/* Check privileges */
 	if (cmd == Q_GETQUOTA || cmd == Q_XGETQUOTA) {
-		if (((type == USRQUOTA && current->euid != id) ||
+		if (((type == USRQUOTA && tsk_euid(current) != id) ||
 		     (type == GRPQUOTA && !in_egroup_p(id))) &&
 		    !capable(CAP_SYS_ADMIN))
 			return -EPERM;
diff -puN fs/ramfs/inode.c~d-task-xid fs/ramfs/inode.c
--- 25/fs/ramfs/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ramfs/inode.c	2003-09-27 19:29:18.000000000 -0700
@@ -54,8 +54,8 @@ static struct inode *ramfs_get_inode(str
 
 	if (inode) {
 		inode->i_mode = mode;
-		inode->i_uid = current->fsuid;
-		inode->i_gid = current->fsgid;
+		inode->i_uid = tsk_fsuid(current);
+		inode->i_gid = tsk_fsgid(current);
 		inode->i_blksize = PAGE_CACHE_SIZE;
 		inode->i_blocks = 0;
 		inode->i_mapping->a_ops = &ramfs_aops;
diff -puN fs/reiserfs/ioctl.c~d-task-xid fs/reiserfs/ioctl.c
--- 25/fs/reiserfs/ioctl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/reiserfs/ioctl.c	2003-09-27 19:29:18.000000000 -0700
@@ -41,7 +41,7 @@ int reiserfs_ioctl (struct inode * inode
 		if (IS_RDONLY(inode))
 			return -EROFS;
 
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if ((tsk_fsuid(current) != inode->i_uid) && !capable(CAP_FOWNER))
 			return -EPERM;
 
 		if (get_user(flags, (int *) arg))
@@ -68,7 +68,7 @@ int reiserfs_ioctl (struct inode * inode
 	case REISERFS_IOC_GETVERSION:
 		return put_user(inode->i_generation, (int *) arg);
 	case REISERFS_IOC_SETVERSION:
-		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		if ((tsk_fsuid(current) != inode->i_uid) && !capable(CAP_FOWNER))
 			return -EPERM;
 		if (IS_RDONLY(inode))
 			return -EROFS;
diff -puN fs/reiserfs/namei.c~d-task-xid fs/reiserfs/namei.c
--- 25/fs/reiserfs/namei.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/reiserfs/namei.c	2003-09-27 19:29:18.000000000 -0700
@@ -545,7 +545,7 @@ static int new_inode_init(struct inode *
     /* the quota init calls have to know who to charge the quota to, so
     ** we have to set uid and gid here
     */
-    inode->i_uid = current->fsuid;
+    inode->i_uid = tsk_fsuid(current);
     inode->i_mode = mode;
 
     if (dir->i_mode & S_ISGID) {
@@ -553,7 +553,7 @@ static int new_inode_init(struct inode *
         if (S_ISDIR(mode))
             inode->i_mode |= S_ISGID;
     } else {
-        inode->i_gid = current->fsgid;
+        inode->i_gid = tsk_fsgid(current);
     }
     return 0 ;
 }
diff -puN fs/smbfs/dir.c~d-task-xid fs/smbfs/dir.c
--- 25/fs/smbfs/dir.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/smbfs/dir.c	2003-09-27 19:29:18.000000000 -0700
@@ -658,8 +658,8 @@ smb_make_node(struct inode *dir, struct 
 
 	attr.ia_valid = ATTR_MODE | ATTR_UID | ATTR_GID;
 	attr.ia_mode = mode;
-	attr.ia_uid = current->euid;
-	attr.ia_gid = current->egid;
+	attr.ia_uid = tsk_euid(current);
+	attr.ia_gid = tsk_egid(current);
 
 	if (!new_valid_dev(dev))
 		return -EINVAL;
diff -puN fs/smbfs/inode.c~d-task-xid fs/smbfs/inode.c
--- 25/fs/smbfs/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/smbfs/inode.c	2003-09-27 19:29:18.000000000 -0700
@@ -562,7 +562,7 @@ int smb_fill_super(struct super_block *s
 		if (parse_options(mnt, raw_data))
 			goto out_bad_option;
 	}
-	mnt->mounted_uid = current->uid;
+	mnt->mounted_uid = tsk_uid(current);
 	smb_setcodepage(server, &mnt->codepage);
 
 	/*
diff -puN fs/smbfs/proc.c~d-task-xid fs/smbfs/proc.c
--- 25/fs/smbfs/proc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/smbfs/proc.c	2003-09-27 19:29:18.000000000 -0700
@@ -863,7 +863,7 @@ smb_newconn(struct smb_sb_info *server, 
 		goto out;
 
 	error = -EACCES;
-	if (current->uid != server->mnt->mounted_uid && 
+	if (tsk_uid(current) != server->mnt->mounted_uid &&
 	    !capable(CAP_SYS_ADMIN))
 		goto out;
 
diff -puN fs/sysfs/inode.c~d-task-xid fs/sysfs/inode.c
--- 25/fs/sysfs/inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/sysfs/inode.c	2003-09-27 19:29:18.000000000 -0700
@@ -29,8 +29,8 @@ struct inode * sysfs_new_inode(mode_t mo
 	struct inode * inode = new_inode(sysfs_sb);
 	if (inode) {
 		inode->i_mode = mode;
-		inode->i_uid = current->fsuid;
-		inode->i_gid = current->fsgid;
+		inode->i_uid = tsk_fsuid(current);
+		inode->i_gid = tsk_fsgid(current);
 		inode->i_blksize = PAGE_CACHE_SIZE;
 		inode->i_blocks = 0;
 		inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
diff -puN fs/sysv/ialloc.c~d-task-xid fs/sysv/ialloc.c
--- 25/fs/sysv/ialloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/sysv/ialloc.c	2003-09-27 19:29:18.000000000 -0700
@@ -165,9 +165,9 @@ struct inode * sysv_new_inode(const stru
 		if (S_ISDIR(mode))
 			mode |= S_ISGID;
 	} else
-		inode->i_gid = current->fsgid;
+		inode->i_gid = tsk_fsgid(current);
 
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	inode->i_ino = fs16_to_cpu(sbi, ino);
 	inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
 	inode->i_blocks = inode->i_blksize = 0;
diff -puN fs/udf/ialloc.c~d-task-xid fs/udf/ialloc.c
--- 25/fs/udf/ialloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/udf/ialloc.c	2003-09-27 19:29:18.000000000 -0700
@@ -119,7 +119,7 @@ struct inode * udf_new_inode (struct ino
 		mark_buffer_dirty(UDF_SB_LVIDBH(sb));
 	}
 	inode->i_mode = mode;
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	if (dir->i_mode & S_ISGID)
 	{
 		inode->i_gid = dir->i_gid;
@@ -127,7 +127,7 @@ struct inode * udf_new_inode (struct ino
 			mode |= S_ISGID;
 	}
 	else
-		inode->i_gid = current->fsgid;
+		inode->i_gid = tsk_fsgid(current);
 
 	UDF_I_LOCATION(inode).logicalBlockNum = block;
 	UDF_I_LOCATION(inode).partitionReferenceNum = UDF_I_LOCATION(dir).partitionReferenceNum;
diff -puN fs/udf/namei.c~d-task-xid fs/udf/namei.c
--- 25/fs/udf/namei.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/udf/namei.c	2003-09-27 19:29:18.000000000 -0700
@@ -686,7 +686,7 @@ static int udf_mknod(struct inode * dir,
 	if (!inode)
 		goto out;
 
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	init_special_inode(inode, mode, rdev);
 	if (!(fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err)))
 	{
diff -puN fs/ufs/ialloc.c~d-task-xid fs/ufs/ialloc.c
--- 25/fs/ufs/ialloc.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/ufs/ialloc.c	2003-09-27 19:29:18.000000000 -0700
@@ -256,13 +256,13 @@ cg_found:
 	sb->s_dirt = 1;
 
 	inode->i_mode = mode;
-	inode->i_uid = current->fsuid;
+	inode->i_uid = tsk_fsuid(current);
 	if (dir->i_mode & S_ISGID) {
 		inode->i_gid = dir->i_gid;
 		if (S_ISDIR(mode))
 			inode->i_mode |= S_ISGID;
 	} else
-		inode->i_gid = current->fsgid;
+		inode->i_gid = tsk_fsgid(current);
 
 	inode->i_ino = cg * uspi->s_ipg + bit;
 	inode->i_blksize = PAGE_SIZE;	/* This is the optimal IO size (for stat), not the fs block size */
diff -puN fs/xfs/linux/xfs_iops.c~d-task-xid fs/xfs/linux/xfs_iops.c
--- 25/fs/xfs/linux/xfs_iops.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/xfs/linux/xfs_iops.c	2003-09-27 19:29:18.000000000 -0700
@@ -603,7 +603,7 @@ capable_user_xattr(
 	    !capable(CAP_SYS_ADMIN))
 		return 0;
 	if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) &&
-	    (current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+	    (tsk_fsuid(current) != inode->i_uid) && !capable(CAP_FOWNER))
 		return 0;
 	return 1;
 }
diff -puN fs/xfs/xfs_acl.c~d-task-xid fs/xfs/xfs_acl.c
--- 25/fs/xfs/xfs_acl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/xfs/xfs_acl.c	2003-09-27 19:29:18.000000000 -0700
@@ -400,7 +400,7 @@ xfs_acl_allow_set(
 	VOP_GETATTR(vp, &va, 0, NULL, error);
 	if (error)
 		return error;
-	if (va.va_uid != current->fsuid && !capable(CAP_FOWNER))
+	if (va.va_uid != tsk_fsuid(current) && !capable(CAP_FOWNER))
 		return EPERM;
 	return error;
 }
@@ -510,13 +510,13 @@ xfs_acl_access(
 		switch (fap->acl_entry[i].ae_tag) {
 		case ACL_USER_OBJ:
 			seen_userobj = 1;
-			if (fuid != current->fsuid)
+			if (fuid != tsk_fsuid(current))
 				continue;
 			matched.ae_tag = ACL_USER_OBJ;
 			matched.ae_perm = allows;
 			break;
 		case ACL_USER:
-			if (fap->acl_entry[i].ae_id != current->fsuid)
+			if (fap->acl_entry[i].ae_id != tsk_fsuid(current))
 				continue;
 			matched.ae_tag = ACL_USER;
 			matched.ae_perm = allows;
diff -puN fs/xfs/xfs_dfrag.c~d-task-xid fs/xfs/xfs_dfrag.c
--- 25/fs/xfs/xfs_dfrag.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/xfs/xfs_dfrag.c	2003-09-27 19:29:18.000000000 -0700
@@ -153,12 +153,12 @@ xfs_swapext(
 	if ((error = _MAC_XFS_IACCESS(tip, MACWRITE, NULL))) {
 		goto error0;
 	}
-	if ((current->fsuid != ip->i_d.di_uid) &&
+	if ((tsk_fsuid(current) != ip->i_d.di_uid) &&
 	    (error = xfs_iaccess(ip, IWRITE, NULL)) &&
 	    !capable_cred(NULL, CAP_FOWNER)) {
 		goto error0;
 	}
-	if ((current->fsuid != tip->i_d.di_uid) &&
+	if ((tsk_fsuid(current) != tip->i_d.di_uid) &&
 	    (error = xfs_iaccess(tip, IWRITE, NULL)) &&
 	    !capable_cred(NULL, CAP_FOWNER)) {
 		goto error0;
diff -puN fs/xfs/xfs_inode.c~d-task-xid fs/xfs/xfs_inode.c
--- 25/fs/xfs/xfs_inode.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/xfs/xfs_inode.c	2003-09-27 19:29:18.000000000 -0700
@@ -1142,8 +1142,8 @@ xfs_ialloc(
 	ip->i_d.di_onlink = 0;
 	ip->i_d.di_nlink = nlink;
 	ASSERT(ip->i_d.di_nlink == nlink);
-	ip->i_d.di_uid = current->fsuid;
-	ip->i_d.di_gid = current->fsgid;
+	ip->i_d.di_uid = tsk_fsuid(current);
+	ip->i_d.di_gid = tsk_fsgid(current);
 	ip->i_d.di_projid = prid;
 	memset(&(ip->i_d.di_pad[0]), 0, sizeof(ip->i_d.di_pad));
 
@@ -3524,7 +3524,7 @@ xfs_iaccess(
 	if ((error = _ACL_XFS_IACCESS(ip, mode, cr)) != -1)
 		return error ? XFS_ERROR(error) : 0;
 
-	if (current->fsuid != ip->i_d.di_uid) {
+	if (tsk_fsuid(current) != ip->i_d.di_uid) {
 		mode >>= 3;
 		if (!in_group_p((gid_t)ip->i_d.di_gid))
 			mode >>= 3;
diff -puN fs/xfs/xfs_vnodeops.c~d-task-xid fs/xfs/xfs_vnodeops.c
--- 25/fs/xfs/xfs_vnodeops.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/fs/xfs/xfs_vnodeops.c	2003-09-27 19:29:18.000000000 -0700
@@ -433,7 +433,7 @@ xfs_setattr(
 	}
 
 	/* boolean: are we the file owner? */
-	file_owner = (current->fsuid == ip->i_d.di_uid);
+	file_owner = (tsk_fsuid(current) == ip->i_d.di_uid);
 
 	/*
 	 * Change various properties of a file.
@@ -2003,7 +2003,8 @@ xfs_create(
 	/*
 	 * Make sure that we have allocated dquot(s) on disk.
 	 */
-	error = XFS_QM_DQVOPALLOC(mp, dp, current->fsuid, current->fsgid,
+	error = XFS_QM_DQVOPALLOC(mp, dp, tsk_fsuid(current),
+			tsk_fsgid(current),
 			XFS_QMOPT_QUOTALL|XFS_QMOPT_INHERIT, &udqp, &gdqp);
 	if (error)
 		goto std_return;
@@ -2898,7 +2899,8 @@ xfs_mkdir(
 	/*
 	 * Make sure that we have allocated dquot(s) on disk.
 	 */
-	error = XFS_QM_DQVOPALLOC(mp, dp, current->fsuid, current->fsgid,
+	error = XFS_QM_DQVOPALLOC(mp, dp, tsk_fsuid(current),
+			tsk_fsgid(current),
 			XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp);
 	if (error)
 		goto std_return;
@@ -3455,7 +3457,8 @@ xfs_symlink(
 	/*
 	 * Make sure that we have allocated dquot(s) on disk.
 	 */
-	error = XFS_QM_DQVOPALLOC(mp, dp, current->fsuid, current->fsgid,
+	error = XFS_QM_DQVOPALLOC(mp, dp, tsk_fsuid(current),
+			tsk_fsgid(current),
 			XFS_QMOPT_QUOTALL | XFS_QMOPT_INHERIT, &udqp, &gdqp);
 	if (error)
 		goto std_return;
diff -puN include/linux/sched.h~d-task-xid include/linux/sched.h
--- 25/include/linux/sched.h~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/include/linux/sched.h	2003-09-27 19:29:18.000000000 -0700
@@ -400,10 +400,10 @@ struct task_struct {
 /* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */
 	unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;
 /* process credentials */
-	uid_t uid,euid,suid,fsuid;
-	gid_t gid,egid,sgid,fsgid;
-	int ngroups;
-	gid_t	groups[NGROUPS];
+	uid_t __uid,__euid,__suid,__fsuid;
+	gid_t __gid,__egid,__sgid,__fsgid;
+	int __ngroups;
+	gid_t	__groups[NGROUPS];
 	kernel_cap_t   cap_effective, cap_inheritable, cap_permitted;
 	int keep_capabilities:1;
 	struct user_struct *user;
@@ -470,6 +470,101 @@ static inline pid_t process_group(struct
 	return tsk->group_leader->__pgrp;
 }
 
+static inline uid_t tsk_uid(struct task_struct *tsk)
+{
+	return tsk->__uid;
+}
+
+static inline uid_t tsk_euid(struct task_struct *tsk)
+{
+	return tsk->__euid;
+}
+
+static inline uid_t tsk_suid(struct task_struct *tsk)
+{
+	return tsk->__suid;
+}
+
+static inline uid_t tsk_fsuid(struct task_struct *tsk)
+{
+	return tsk->__fsuid;
+}
+
+static inline gid_t tsk_gid(struct task_struct *tsk)
+{
+	return tsk->__gid;
+}
+
+static inline gid_t tsk_egid(struct task_struct *tsk)
+{
+	return tsk->__egid;
+}
+
+static inline gid_t tsk_sgid(struct task_struct *tsk)
+{
+	return tsk->__sgid;
+}
+
+static inline gid_t tsk_fsgid(struct task_struct *tsk)
+{
+	return tsk->__fsgid;
+}
+
+static inline int tsk_ngroups(struct task_struct *tsk)
+{
+	return tsk->__ngroups;
+}
+
+static inline gid_t *tsk_groups(struct task_struct *tsk)
+{
+	return tsk->__groups;
+}
+
+static inline void set_tsk_uid(struct task_struct *tsk, uid_t uid)
+{
+	tsk->__uid = uid;
+}
+
+static inline void set_tsk_euid(struct task_struct *tsk, uid_t uid)
+{
+	tsk->__euid = uid;
+}
+
+static inline void set_tsk_suid(struct task_struct *tsk, uid_t uid)
+{
+	tsk->__suid = uid;
+}
+
+static inline void set_tsk_fsuid(struct task_struct *tsk, uid_t uid)
+{
+	tsk->__fsuid = uid;
+}
+
+static inline void set_tsk_gid(struct task_struct *tsk, gid_t gid)
+{
+	tsk->__gid = gid;
+}
+
+static inline void set_tsk_egid(struct task_struct *tsk, gid_t gid)
+{
+	tsk->__egid = gid;
+}
+
+static inline void set_tsk_sgid(struct task_struct *tsk, gid_t gid)
+{
+	tsk->__sgid = gid;
+}
+
+static inline void set_tsk_fsgid(struct task_struct *tsk, gid_t gid)
+{
+	tsk->__fsgid = gid;
+}
+
+static inline void set_tsk_ngroups(struct task_struct *tsk, int ngroups)
+{
+	tsk->__ngroups = ngroups;
+}
+
 extern void __put_task_struct(struct task_struct *tsk);
 #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
 #define put_task_struct(tsk) \
diff -puN include/net/scm.h~d-task-xid include/net/scm.h
--- 25/include/net/scm.h~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/include/net/scm.h	2003-09-27 19:29:18.000000000 -0700
@@ -37,8 +37,8 @@ static __inline__ int scm_send(struct so
 			       struct scm_cookie *scm)
 {
 	memset(scm, 0, sizeof(*scm));
-	scm->creds.uid = current->uid;
-	scm->creds.gid = current->gid;
+	scm->creds.uid = tsk_uid(current);
+	scm->creds.gid = tsk_gid(current);
 	scm->creds.pid = current->pid;
 	if (msg->msg_controllen <= 0)
 		return 0;
diff -puN ipc/msg.c~d-task-xid ipc/msg.c
--- 25/ipc/msg.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/ipc/msg.c	2003-09-27 19:29:18.000000000 -0700
@@ -545,8 +545,8 @@ asmlinkage long sys_msgctl (int msqid, i
 		goto out_unlock_up;
 	ipcp = &msq->q_perm;
 	err = -EPERM;
-	if (current->euid != ipcp->cuid && 
-	    current->euid != ipcp->uid && !capable(CAP_SYS_ADMIN))
+	if (tsk_euid(current) != ipcp->cuid &&
+	    tsk_euid(current) != ipcp->uid && !capable(CAP_SYS_ADMIN))
 	    /* We _could_ check for CAP_CHOWN above, but we don't */
 		goto out_unlock_up;
 
diff -puN ipc/sem.c~d-task-xid ipc/sem.c
--- 25/ipc/sem.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/ipc/sem.c	2003-09-27 19:29:18.000000000 -0700
@@ -741,8 +741,8 @@ static int semctl_down(int semid, int se
 	}	
 	ipcp = &sma->sem_perm;
 	
-	if (current->euid != ipcp->cuid && 
-	    current->euid != ipcp->uid && !capable(CAP_SYS_ADMIN)) {
+	if (tsk_euid(current) != ipcp->cuid &&
+	    tsk_euid(current) != ipcp->uid && !capable(CAP_SYS_ADMIN)) {
 	    	err=-EPERM;
 		goto out_unlock;
 	}
diff -puN ipc/shm.c~d-task-xid ipc/shm.c
--- 25/ipc/shm.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/ipc/shm.c	2003-09-27 19:29:18.000000000 -0700
@@ -556,8 +556,8 @@ asmlinkage long sys_shmctl (int shmid, i
 		if(err)
 			goto out_unlock_up;
 
-		if (current->euid != shp->shm_perm.uid &&
-		    current->euid != shp->shm_perm.cuid && 
+		if (tsk_euid(current) != shp->shm_perm.uid &&
+		    tsk_euid(current) != shp->shm_perm.cuid &&
 		    !capable(CAP_SYS_ADMIN)) {
 			err=-EPERM;
 			goto out_unlock_up;
@@ -593,8 +593,8 @@ asmlinkage long sys_shmctl (int shmid, i
 		if(err)
 			goto out_unlock_up;
 		err=-EPERM;
-		if (current->euid != shp->shm_perm.uid &&
-		    current->euid != shp->shm_perm.cuid && 
+		if (tsk_euid(current) != shp->shm_perm.uid &&
+		    tsk_euid(current) != shp->shm_perm.cuid &&
 		    !capable(CAP_SYS_ADMIN)) {
 			goto out_unlock_up;
 		}
diff -puN ipc/util.c~d-task-xid ipc/util.c
--- 25/ipc/util.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/ipc/util.c	2003-09-27 19:29:18.000000000 -0700
@@ -185,8 +185,8 @@ found:
 	if (id > ids->max_id)
 		ids->max_id = id;
 
-	new->cuid = new->uid = current->euid;
-	new->gid = new->cgid = current->egid;
+	new->cuid = new->uid = tsk_euid(current);
+	new->gid = new->cgid = tsk_egid(current);
 
 	new->seq = ids->seq++;
 	if(ids->seq > ids->seq_max)
@@ -371,7 +371,7 @@ int ipcperms (struct kern_ipc_perm *ipcp
 
 	requested_mode = (flag >> 6) | (flag >> 3) | flag;
 	granted_mode = ipcp->mode;
-	if (current->euid == ipcp->cuid || current->euid == ipcp->uid)
+	if (tsk_euid(current) == ipcp->cuid || tsk_euid(current) == ipcp->uid)
 		granted_mode >>= 6;
 	else if (in_group_p(ipcp->cgid) || in_group_p(ipcp->gid))
 		granted_mode >>= 3;
diff -puN kernel/ptrace.c~d-task-xid kernel/ptrace.c
--- 25/kernel/ptrace.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/ptrace.c	2003-09-27 19:29:18.000000000 -0700
@@ -88,12 +88,12 @@ int ptrace_attach(struct task_struct *ta
 		goto bad;
 	if (!task->mm)
 		goto bad;
-	if(((current->uid != task->euid) ||
-	    (current->uid != task->suid) ||
-	    (current->uid != task->uid) ||
- 	    (current->gid != task->egid) ||
- 	    (current->gid != task->sgid) ||
- 	    (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
+	if(((tsk_uid(current) != tsk_euid(task)) ||
+	    (tsk_uid(current) != tsk_suid(task)) ||
+	    (tsk_uid(current) != tsk_uid(task)) ||
+ 	    (tsk_gid(current) != tsk_egid(task)) ||
+ 	    (tsk_gid(current) != tsk_sgid(task)) ||
+ 	    (tsk_gid(current) != tsk_gid(task))) && !capable(CAP_SYS_PTRACE))
 		goto bad;
 	rmb();
 	if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))
diff -puN kernel/sched.c~d-task-xid kernel/sched.c
--- 25/kernel/sched.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/sched.c	2003-09-27 19:29:18.000000000 -0700
@@ -2009,7 +2009,8 @@ static int setscheduler(pid_t pid, int p
 	if ((policy == SCHED_FIFO || policy == SCHED_RR) &&
 	    !capable(CAP_SYS_NICE))
 		goto out_unlock;
-	if ((current->euid != p->euid) && (current->euid != p->uid) &&
+	if ((tsk_euid(current) != tsk_euid(p)) &&
+	    (tsk_euid(current) != tsk_uid(p)) &&
 	    !capable(CAP_SYS_NICE))
 		goto out_unlock;
 
@@ -2175,8 +2176,9 @@ asmlinkage long sys_sched_setaffinity(pi
 	read_unlock(&tasklist_lock);
 
 	retval = -EPERM;
-	if ((current->euid != p->euid) && (current->euid != p->uid) &&
-			!capable(CAP_SYS_NICE))
+	if ((tsk_euid(current) != tsk_euid(p)) &&
+	    (tsk_euid(current) != tsk_uid(p)) &&
+	    !capable(CAP_SYS_NICE))
 		goto out_unlock;
 
 	retval = set_cpus_allowed(p, new_mask);
diff -puN kernel/signal.c~d-task-xid kernel/signal.c
--- 25/kernel/signal.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/signal.c	2003-09-27 19:29:18.000000000 -0700
@@ -594,8 +594,10 @@ static int check_kill_permission(int sig
 	if ((!info || ((unsigned long)info != 1 &&
 			(unsigned long)info != 2 && SI_FROMUSER(info)))
 	    && ((sig != SIGCONT) || (current->session != t->session))
-	    && (current->euid ^ t->suid) && (current->euid ^ t->uid)
-	    && (current->uid ^ t->suid) && (current->uid ^ t->uid)
+	    && (tsk_euid(current) ^ tsk_suid(t))
+	    && (tsk_euid(current) ^ tsk_uid(t))
+	    && (tsk_uid(current) ^ tsk_suid(t))
+	    && (tsk_uid(current) ^ tsk_uid(t))
 	    && !capable(CAP_KILL))
 		return error;
 	return security_task_kill(t, info, sig);
@@ -717,7 +719,7 @@ static int send_signal(int sig, struct s
 			q->info.si_errno = 0;
 			q->info.si_code = SI_USER;
 			q->info.si_pid = current->pid;
-			q->info.si_uid = current->uid;
+			q->info.si_uid = tsk_uid(current);
 			break;
 		case 1:
 			q->info.si_signo = sig;
@@ -1415,7 +1417,7 @@ void do_notify_parent(struct task_struct
 	info.si_signo = sig;
 	info.si_errno = 0;
 	info.si_pid = tsk->pid;
-	info.si_uid = tsk->uid;
+	info.si_uid = tsk_uid(tsk);
 
 	/* FIXME: find out whether or not this is supposed to be c*time. */
 	info.si_utime = tsk->utime;
@@ -1504,7 +1506,7 @@ do_notify_parent_cldstop(struct task_str
 	info.si_signo = SIGCHLD;
 	info.si_errno = 0;
 	info.si_pid = tsk->pid;
-	info.si_uid = tsk->uid;
+	info.si_uid = tsk_uid(tsk);
 
 	/* FIXME: find out whether or not this is supposed to be c*time. */
 	info.si_utime = tsk->utime;
@@ -1753,7 +1755,7 @@ relock:
 				info->si_errno = 0;
 				info->si_code = SI_USER;
 				info->si_pid = current->parent->pid;
-				info->si_uid = current->parent->uid;
+				info->si_uid = tsk_uid(current->parent);
 			}
 
 			/* If the (new) signal is now blocked, requeue it.  */
@@ -2148,7 +2150,7 @@ sys_kill(int pid, int sig)
 	info.si_errno = 0;
 	info.si_code = SI_USER;
 	info.si_pid = current->tgid;
-	info.si_uid = current->uid;
+	info.si_uid = tsk_uid(current);
 
 	return kill_something_info(sig, &info, pid);
 }
@@ -2177,7 +2179,7 @@ asmlinkage long sys_tgkill(int tgid, int
 	info.si_errno = 0;
 	info.si_code = SI_TKILL;
 	info.si_pid = current->tgid;
-	info.si_uid = current->uid;
+	info.si_uid = tsk_uid(current);
 
 	read_lock(&tasklist_lock);
 	p = find_task_by_pid(pid);
@@ -2217,7 +2219,7 @@ sys_tkill(int pid, int sig)
 	info.si_errno = 0;
 	info.si_code = SI_TKILL;
 	info.si_pid = current->tgid;
-	info.si_uid = current->uid;
+	info.si_uid = tsk_uid(current);
 
 	read_lock(&tasklist_lock);
 	p = find_task_by_pid(pid);
diff -puN kernel/sys.c~d-task-xid kernel/sys.c
--- 25/kernel/sys.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/sys.c	2003-09-27 19:29:18.000000000 -0700
@@ -240,8 +240,8 @@ static int set_one_prio(struct task_stru
 {
 	int no_nice;
 
-	if (p->uid != current->euid &&
-		p->uid != current->uid && !capable(CAP_SYS_NICE)) {
+	if (tsk_uid(p) != tsk_euid(current) &&
+		tsk_uid(p) != tsk_uid(current) && !capable(CAP_SYS_NICE)) {
 		error = -EPERM;
 		goto out;
 	}
@@ -304,7 +304,7 @@ asmlinkage long sys_setpriority(int whic
 				goto out_unlock;
 
 			do_each_thread(g, p)
-				if (p->uid == who)
+				if (tsk_uid(p) == who)
 					error = set_one_prio(p, niceval, error);
 			while_each_thread(g, p);
 			break;
@@ -363,7 +363,7 @@ asmlinkage long sys_getpriority(int whic
 				goto out_unlock;
 
 			do_each_thread(g, p)
-				if (p->uid == who) {
+				if (tsk_uid(p) == who) {
 					niceval = 20 - task_nice(p);
 					if (niceval > retval)
 						retval = niceval;
@@ -515,8 +515,8 @@ void ctrl_alt_del(void)
  */
 asmlinkage long sys_setregid(gid_t rgid, gid_t egid)
 {
-	int old_rgid = current->gid;
-	int old_egid = current->egid;
+	int old_rgid = tsk_gid(current);
+	int old_egid = tsk_egid(current);
 	int new_rgid = old_rgid;
 	int new_egid = old_egid;
 	int retval;
@@ -527,7 +527,7 @@ asmlinkage long sys_setregid(gid_t rgid,
 
 	if (rgid != (gid_t) -1) {
 		if ((old_rgid == rgid) ||
-		    (current->egid==rgid) ||
+		    (tsk_egid(current) == rgid) ||
 		    capable(CAP_SETGID))
 			new_rgid = rgid;
 		else
@@ -535,8 +535,8 @@ asmlinkage long sys_setregid(gid_t rgid,
 	}
 	if (egid != (gid_t) -1) {
 		if ((old_rgid == egid) ||
-		    (current->egid == egid) ||
-		    (current->sgid == egid) ||
+		    (tsk_egid(current) == egid) ||
+		    (tsk_sgid(current) == egid) ||
 		    capable(CAP_SETGID))
 			new_egid = egid;
 		else {
@@ -550,10 +550,10 @@ asmlinkage long sys_setregid(gid_t rgid,
 	}
 	if (rgid != (gid_t) -1 ||
 	    (egid != (gid_t) -1 && egid != old_rgid))
-		current->sgid = new_egid;
-	current->fsgid = new_egid;
-	current->egid = new_egid;
-	current->gid = new_rgid;
+		set_tsk_sgid(current, new_egid);
+	set_tsk_fsgid(current, new_egid);
+	set_tsk_egid(current, new_egid);
+	set_tsk_gid(current, new_rgid);
 	return 0;
 }
 
@@ -564,7 +564,7 @@ asmlinkage long sys_setregid(gid_t rgid,
  */
 asmlinkage long sys_setgid(gid_t gid)
 {
-	int old_egid = current->egid;
+	int old_egid = tsk_egid(current);
 	int retval;
 
 	retval = security_task_setgid(gid, (gid_t)-1, (gid_t)-1, LSM_SETID_ID);
@@ -578,16 +578,20 @@ asmlinkage long sys_setgid(gid_t gid)
 			current->mm->dumpable=0;
 			wmb();
 		}
-		current->gid = current->egid = current->sgid = current->fsgid = gid;
+		set_tsk_gid(current, gid);
+		set_tsk_egid(current, gid);
+		set_tsk_sgid(current, gid);
+		set_tsk_fsgid(current, gid);
 	}
-	else if ((gid == current->gid) || (gid == current->sgid))
+	else if ((gid == tsk_gid(current)) || (gid == tsk_sgid(current)))
 	{
 		if(old_egid != gid)
 		{
 			current->mm->dumpable=0;
 			wmb();
 		}
-		current->egid = current->fsgid = gid;
+		set_tsk_egid(current, gid);
+		set_tsk_fsgid(current, gid);
 	}
 	else
 		return -EPERM;
@@ -616,7 +620,7 @@ static int set_user(uid_t new_ruid, int 
 		current->mm->dumpable = 0;
 		wmb();
 	}
-	current->uid = new_ruid;
+	set_tsk_uid(current, new_ruid);
 	return 0;
 }
 
@@ -644,14 +648,14 @@ asmlinkage long sys_setreuid(uid_t ruid,
 	if (retval)
 		return retval;
 
-	new_ruid = old_ruid = current->uid;
-	new_euid = old_euid = current->euid;
-	old_suid = current->suid;
+	new_ruid = old_ruid = tsk_uid(current);
+	new_euid = old_euid = tsk_euid(current);
+	old_suid = tsk_suid(current);
 
 	if (ruid != (uid_t) -1) {
 		new_ruid = ruid;
 		if ((old_ruid != ruid) &&
-		    (current->euid != ruid) &&
+		    (tsk_euid(current) != ruid) &&
 		    !capable(CAP_SETUID))
 			return -EPERM;
 	}
@@ -659,8 +663,8 @@ asmlinkage long sys_setreuid(uid_t ruid,
 	if (euid != (uid_t) -1) {
 		new_euid = euid;
 		if ((old_ruid != euid) &&
-		    (current->euid != euid) &&
-		    (current->suid != euid) &&
+		    (tsk_euid(current) != euid) &&
+		    (tsk_suid(current) != euid) &&
 		    !capable(CAP_SETUID))
 			return -EPERM;
 	}
@@ -673,11 +677,12 @@ asmlinkage long sys_setreuid(uid_t ruid,
 		current->mm->dumpable=0;
 		wmb();
 	}
-	current->fsuid = current->euid = new_euid;
+	set_tsk_fsuid(current, new_euid);
+	set_tsk_euid(current, new_euid);
 	if (ruid != (uid_t) -1 ||
 	    (euid != (uid_t) -1 && euid != old_ruid))
-		current->suid = current->euid;
-	current->fsuid = current->euid;
+		set_tsk_suid(current, new_euid);
+	set_tsk_fsuid(current, new_euid);
 
 	return security_task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_RE);
 }
@@ -697,7 +702,7 @@ asmlinkage long sys_setreuid(uid_t ruid,
  */
 asmlinkage long sys_setuid(uid_t uid)
 {
-	int old_euid = current->euid;
+	int old_euid = tsk_euid(current);
 	int old_ruid, old_suid, new_ruid, new_suid;
 	int retval;
 
@@ -705,15 +710,15 @@ asmlinkage long sys_setuid(uid_t uid)
 	if (retval)
 		return retval;
 
-	old_ruid = new_ruid = current->uid;
-	old_suid = current->suid;
+	old_ruid = new_ruid = tsk_uid(current);
+	old_suid = tsk_suid(current);
 	new_suid = old_suid;
 	
 	if (capable(CAP_SETUID)) {
 		if (uid != old_ruid && set_user(uid, old_euid != uid) < 0)
 			return -EAGAIN;
 		new_suid = uid;
-	} else if ((uid != current->uid) && (uid != new_suid))
+	} else if ((uid != tsk_uid(current)) && (uid != new_suid))
 		return -EPERM;
 
 	if (old_euid != uid)
@@ -721,8 +726,9 @@ asmlinkage long sys_setuid(uid_t uid)
 		current->mm->dumpable = 0;
 		wmb();
 	}
-	current->fsuid = current->euid = uid;
-	current->suid = new_suid;
+	set_tsk_fsuid(current, uid);
+	set_tsk_euid(current, uid);
+	set_tsk_suid(current, new_suid);
 
 	return security_task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_ID);
 }
@@ -734,9 +740,9 @@ asmlinkage long sys_setuid(uid_t uid)
  */
 asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid)
 {
-	int old_ruid = current->uid;
-	int old_euid = current->euid;
-	int old_suid = current->suid;
+	int old_ruid = tsk_uid(current);
+	int old_euid = tsk_euid(current);
+	int old_suid = tsk_suid(current);
 	int retval;
 
 	retval = security_task_setuid(ruid, euid, suid, LSM_SETID_RES);
@@ -744,31 +750,32 @@ asmlinkage long sys_setresuid(uid_t ruid
 		return retval;
 
 	if (!capable(CAP_SETUID)) {
-		if ((ruid != (uid_t) -1) && (ruid != current->uid) &&
-		    (ruid != current->euid) && (ruid != current->suid))
+		if ((ruid != (uid_t) -1) && (ruid != tsk_uid(current)) &&
+		    (ruid != tsk_euid(current)) && (ruid != tsk_suid(current)))
 			return -EPERM;
-		if ((euid != (uid_t) -1) && (euid != current->uid) &&
-		    (euid != current->euid) && (euid != current->suid))
+		if ((euid != (uid_t) -1) && (euid != tsk_uid(current)) &&
+		    (euid != tsk_euid(current)) && (euid != tsk_suid(current)))
 			return -EPERM;
-		if ((suid != (uid_t) -1) && (suid != current->uid) &&
-		    (suid != current->euid) && (suid != current->suid))
+		if ((suid != (uid_t) -1) && (suid != tsk_uid(current)) &&
+		    (suid != tsk_euid(current)) && (suid != tsk_suid(current)))
 			return -EPERM;
 	}
 	if (ruid != (uid_t) -1) {
-		if (ruid != current->uid && set_user(ruid, euid != current->euid) < 0)
+		if (ruid != tsk_uid(current) &&
+		    set_user(ruid, euid != tsk_euid(current)) < 0)
 			return -EAGAIN;
 	}
 	if (euid != (uid_t) -1) {
-		if (euid != current->euid)
+		if (euid != tsk_euid(current))
 		{
 			current->mm->dumpable = 0;
 			wmb();
 		}
-		current->euid = euid;
+		set_tsk_euid(current, euid);
 	}
-	current->fsuid = current->euid;
+	set_tsk_fsuid(current, tsk_euid(current));
 	if (suid != (uid_t) -1)
-		current->suid = suid;
+		set_tsk_suid(current, suid);
 
 	return security_task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_RES);
 }
@@ -777,9 +784,9 @@ asmlinkage long sys_getresuid(uid_t *rui
 {
 	int retval;
 
-	if (!(retval = put_user(current->uid, ruid)) &&
-	    !(retval = put_user(current->euid, euid)))
-		retval = put_user(current->suid, suid);
+	if (!(retval = put_user(tsk_uid(current), ruid)) &&
+	    !(retval = put_user(tsk_euid(current), euid)))
+		retval = put_user(tsk_suid(current), suid);
 
 	return retval;
 }
@@ -796,29 +803,29 @@ asmlinkage long sys_setresgid(gid_t rgid
 		return retval;
 
 	if (!capable(CAP_SETGID)) {
-		if ((rgid != (gid_t) -1) && (rgid != current->gid) &&
-		    (rgid != current->egid) && (rgid != current->sgid))
+		if ((rgid != (gid_t) -1) && (rgid != tsk_gid(current)) &&
+		    (rgid != tsk_egid(current)) && (rgid != tsk_sgid(current)))
 			return -EPERM;
-		if ((egid != (gid_t) -1) && (egid != current->gid) &&
-		    (egid != current->egid) && (egid != current->sgid))
+		if ((egid != (gid_t) -1) && (egid != tsk_gid(current)) &&
+		    (egid != tsk_egid(current)) && (egid != tsk_sgid(current)))
 			return -EPERM;
-		if ((sgid != (gid_t) -1) && (sgid != current->gid) &&
-		    (sgid != current->egid) && (sgid != current->sgid))
+		if ((sgid != (gid_t) -1) && (sgid != tsk_gid(current)) &&
+		    (sgid != tsk_egid(current)) && (sgid != tsk_sgid(current)))
 			return -EPERM;
 	}
 	if (egid != (gid_t) -1) {
-		if (egid != current->egid)
+		if (egid != tsk_egid(current))
 		{
 			current->mm->dumpable = 0;
 			wmb();
 		}
-		current->egid = egid;
+		set_tsk_egid(current, egid);
 	}
-	current->fsgid = current->egid;
+	set_tsk_fsgid(current, tsk_egid(current));
 	if (rgid != (gid_t) -1)
-		current->gid = rgid;
+		set_tsk_gid(current, rgid);
 	if (sgid != (gid_t) -1)
-		current->sgid = sgid;
+		set_tsk_sgid(current, sgid);
 	return 0;
 }
 
@@ -826,9 +833,9 @@ asmlinkage long sys_getresgid(gid_t *rgi
 {
 	int retval;
 
-	if (!(retval = put_user(current->gid, rgid)) &&
-	    !(retval = put_user(current->egid, egid)))
-		retval = put_user(current->sgid, sgid);
+	if (!(retval = put_user(tsk_gid(current), rgid)) &&
+	    !(retval = put_user(tsk_egid(current), egid)))
+		retval = put_user(tsk_sgid(current), sgid);
 
 	return retval;
 }
@@ -844,12 +851,12 @@ asmlinkage long sys_setfsuid(uid_t uid)
 {
 	int old_fsuid;
 
-	old_fsuid = current->fsuid;
+	old_fsuid = tsk_fsuid(current);
 	if (security_task_setuid(uid, (uid_t)-1, (uid_t)-1, LSM_SETID_FS))
 		return old_fsuid;
 
-	if (uid == current->uid || uid == current->euid ||
-	    uid == current->suid || uid == current->fsuid || 
+	if (uid == tsk_uid(current) || uid == tsk_euid(current) ||
+	    uid == tsk_suid(current) || uid == tsk_fsuid(current) ||
 	    capable(CAP_SETUID))
 	{
 		if (uid != old_fsuid)
@@ -857,7 +864,7 @@ asmlinkage long sys_setfsuid(uid_t uid)
 			current->mm->dumpable = 0;
 			wmb();
 		}
-		current->fsuid = uid;
+		set_tsk_fsuid(current, uid);
 	}
 
 	security_task_post_setuid(old_fsuid, (uid_t)-1, (uid_t)-1, LSM_SETID_FS);
@@ -872,12 +879,12 @@ asmlinkage long sys_setfsgid(gid_t gid)
 {
 	int old_fsgid;
 
-	old_fsgid = current->fsgid;
+	old_fsgid = tsk_fsgid(current);
 	if (security_task_setgid(gid, (gid_t)-1, (gid_t)-1, LSM_SETID_FS))
 		return old_fsgid;
 
-	if (gid == current->gid || gid == current->egid ||
-	    gid == current->sgid || gid == current->fsgid || 
+	if (gid == tsk_gid(current) || gid == tsk_egid(current) ||
+	    gid == tsk_sgid(current) || gid == tsk_fsgid(current) ||
 	    capable(CAP_SETGID))
 	{
 		if (gid != old_fsgid)
@@ -885,7 +892,7 @@ asmlinkage long sys_setfsgid(gid_t gid)
 			current->mm->dumpable = 0;
 			wmb();
 		}
-		current->fsgid = gid;
+		set_tsk_fsgid(current, gid);
 	}
 	return old_fsgid;
 }
@@ -1083,11 +1090,12 @@ asmlinkage long sys_getgroups(int gidset
 
 	if (gidsetsize < 0)
 		return -EINVAL;
-	i = current->ngroups;
+	i = tsk_ngroups(current);
 	if (gidsetsize) {
 		if (i > gidsetsize)
 			return -EINVAL;
-		if (copy_to_user(grouplist, current->groups, sizeof(gid_t)*i))
+		if (copy_to_user(grouplist, tsk_groups(current),
+				 sizeof(gid_t)*i))
 			return -EFAULT;
 	}
 	return i;
@@ -1112,17 +1120,17 @@ asmlinkage long sys_setgroups(int gidset
 	retval = security_task_setgroups(gidsetsize, groups);
 	if (retval)
 		return retval;
-	memcpy(current->groups, groups, gidsetsize * sizeof(gid_t));
-	current->ngroups = gidsetsize;
+	memcpy(tsk_groups(current), groups, gidsetsize * sizeof(gid_t));
+	set_tsk_ngroups(current, gidsetsize);
 	return 0;
 }
 
 static int supplemental_group_member(gid_t grp)
 {
-	int i = current->ngroups;
+	int i = tsk_ngroups(current);
 
 	if (i) {
-		gid_t *groups = current->groups;
+		gid_t *groups = tsk_groups(current);
 		do {
 			if (*groups == grp)
 				return 1;
@@ -1139,7 +1147,7 @@ static int supplemental_group_member(gid
 int in_group_p(gid_t grp)
 {
 	int retval = 1;
-	if (grp != current->fsgid)
+	if (grp != tsk_fsgid(current))
 		retval = supplemental_group_member(grp);
 	return retval;
 }
@@ -1147,7 +1155,7 @@ int in_group_p(gid_t grp)
 int in_egroup_p(gid_t grp)
 {
 	int retval = 1;
-	if (grp != current->egid)
+	if (grp != tsk_egid(current))
 		retval = supplemental_group_member(grp);
 	return retval;
 }
diff -puN kernel/sysctl.c~d-task-xid kernel/sysctl.c
--- 25/kernel/sysctl.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/sysctl.c	2003-09-27 19:29:18.000000000 -0700
@@ -885,7 +885,7 @@ asmlinkage long sys_sysctl(struct __sysc
 
 static int test_perm(int mode, int op)
 {
-	if (!current->euid)
+	if (!tsk_euid(current))
 		mode >>= 6;
 	else if (in_egroup_p(0))
 		mode >>= 3;
diff -puN kernel/timer.c~d-task-xid kernel/timer.c
--- 25/kernel/timer.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/timer.c	2003-09-27 19:29:18.000000000 -0700
@@ -926,25 +926,25 @@ asmlinkage long sys_getppid(void)
 asmlinkage long sys_getuid(void)
 {
 	/* Only we change this so SMP safe */
-	return current->uid;
+	return tsk_uid(current);
 }
 
 asmlinkage long sys_geteuid(void)
 {
 	/* Only we change this so SMP safe */
-	return current->euid;
+	return tsk_euid(current);
 }
 
 asmlinkage long sys_getgid(void)
 {
 	/* Only we change this so SMP safe */
-	return current->gid;
+	return tsk_gid(current);
 }
 
 asmlinkage long sys_getegid(void)
 {
 	/* Only we change this so SMP safe */
-	return  current->egid;
+	return  tsk_egid(current);
 }
 
 #endif
diff -puN kernel/uid16.c~d-task-xid kernel/uid16.c
--- 25/kernel/uid16.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/kernel/uid16.c	2003-09-27 19:29:18.000000000 -0700
@@ -73,9 +73,9 @@ asmlinkage long sys_getresuid16(old_uid_
 {
 	int retval;
 
-	if (!(retval = put_user(high2lowuid(current->uid), ruid)) &&
-	    !(retval = put_user(high2lowuid(current->euid), euid)))
-		retval = put_user(high2lowuid(current->suid), suid);
+	if (!(retval = put_user(high2lowuid(tsk_uid(current)), ruid)) &&
+	    !(retval = put_user(high2lowuid(tsk_euid(current)), euid)))
+		retval = put_user(high2lowuid(tsk_suid(current)), suid);
 
 	return retval;
 }
@@ -90,9 +90,9 @@ asmlinkage long sys_getresgid16(old_gid_
 {
 	int retval;
 
-	if (!(retval = put_user(high2lowgid(current->gid), rgid)) &&
-	    !(retval = put_user(high2lowgid(current->egid), egid)))
-		retval = put_user(high2lowgid(current->sgid), sgid);
+	if (!(retval = put_user(high2lowgid(tsk_gid(current)), rgid)) &&
+	    !(retval = put_user(high2lowgid(tsk_egid(current)), egid)))
+		retval = put_user(high2lowgid(tsk_sgid(current)), sgid);
 
 	return retval;
 }
@@ -114,12 +114,12 @@ asmlinkage long sys_getgroups16(int gids
 
 	if (gidsetsize < 0)
 		return -EINVAL;
-	i = current->ngroups;
+	i = tsk_ngroups(current);
 	if (gidsetsize) {
 		if (i > gidsetsize)
 			return -EINVAL;
 		for(j=0;j<i;j++)
-			groups[j] = current->groups[j];
+			groups[j] = tsk_groups(current)[j];
 		if (copy_to_user(grouplist, groups, sizeof(old_gid_t)*i))
 			return -EFAULT;
 	}
@@ -143,27 +143,27 @@ asmlinkage long sys_setgroups16(int gids
 	i = security_task_setgroups(gidsetsize, new_groups);
 	if (i)
 		return i;
-	memcpy(current->groups, new_groups, gidsetsize * sizeof(gid_t));
-	current->ngroups = gidsetsize;
+	memcpy(tsk_groups(current), new_groups, gidsetsize * sizeof(gid_t));
+	set_tsk_ngroups(current, gidsetsize);
 	return 0;
 }
 
 asmlinkage long sys_getuid16(void)
 {
-	return high2lowuid(current->uid);
+	return high2lowuid(tsk_uid(current));
 }
 
 asmlinkage long sys_geteuid16(void)
 {
-	return high2lowuid(current->euid);
+	return high2lowuid(tsk_euid(current));
 }
 
 asmlinkage long sys_getgid16(void)
 {
-	return high2lowgid(current->gid);
+	return high2lowgid(tsk_gid(current));
 }
 
 asmlinkage long sys_getegid16(void)
 {
-	return high2lowgid(current->egid);
+	return high2lowgid(tsk_egid(current));
 }
diff -puN mm/oom_kill.c~d-task-xid mm/oom_kill.c
--- 25/mm/oom_kill.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/mm/oom_kill.c	2003-09-27 19:29:18.000000000 -0700
@@ -92,7 +92,7 @@ static int badness(struct task_struct *p
 	 * less likely that we kill those.
 	 */
 	if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_ADMIN) ||
-				p->uid == 0 || p->euid == 0)
+				tsk_uid(p) == 0 || tsk_euid(p) == 0)
 		points /= 4;
 
 	/*
diff -puN mm/shmem.c~d-task-xid mm/shmem.c
--- 25/mm/shmem.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/mm/shmem.c	2003-09-27 19:29:18.000000000 -0700
@@ -1051,8 +1051,8 @@ shmem_get_inode(struct super_block *sb, 
 	inode = new_inode(sb);
 	if (inode) {
 		inode->i_mode = mode;
-		inode->i_uid = current->fsuid;
-		inode->i_gid = current->fsgid;
+		inode->i_uid = tsk_fsuid(current);
+		inode->i_gid = tsk_fsgid(current);
 		inode->i_blksize = PAGE_CACHE_SIZE;
 		inode->i_blocks = 0;
 		inode->i_mapping->a_ops = &shmem_aops;
@@ -1673,8 +1673,8 @@ static int shmem_fill_super(struct super
 	struct dentry *root;
 	unsigned long blocks, inodes;
 	int mode   = S_IRWXUGO | S_ISVTX;
-	uid_t uid = current->fsuid;
-	gid_t gid = current->fsgid;
+	uid_t uid = tsk_fsuid(current);
+	gid_t gid = tsk_fsgid(current);
 	struct shmem_sb_info *sbinfo;
 	int err = -ENOMEM;
 
diff -puN net/core/scm.c~d-task-xid net/core/scm.c
--- 25/net/core/scm.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/core/scm.c	2003-09-27 19:29:18.000000000 -0700
@@ -42,10 +42,12 @@
 static __inline__ int scm_check_creds(struct ucred *creds)
 {
 	if ((creds->pid == current->tgid || capable(CAP_SYS_ADMIN)) &&
-	    ((creds->uid == current->uid || creds->uid == current->euid ||
-	      creds->uid == current->suid) || capable(CAP_SETUID)) &&
-	    ((creds->gid == current->gid || creds->gid == current->egid ||
-	      creds->gid == current->sgid) || capable(CAP_SETGID))) {
+	    ((creds->uid == tsk_uid(current) ||
+	      creds->uid == tsk_euid(current) ||
+	      creds->uid == tsk_suid(current)) || capable(CAP_SETUID)) &&
+	    ((creds->gid == tsk_gid(current) ||
+	      creds->gid == tsk_egid(current) ||
+	      creds->gid == tsk_sgid(current)) || capable(CAP_SETGID))) {
 	       return 0;
 	}
 	return -EPERM;
diff -puN net/ipv6/ip6_flowlabel.c~d-task-xid net/ipv6/ip6_flowlabel.c
--- 25/net/ipv6/ip6_flowlabel.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/ipv6/ip6_flowlabel.c	2003-09-27 19:29:18.000000000 -0700
@@ -342,7 +342,7 @@ fl_create(struct in6_flowlabel_req *freq
 		fl->owner = current->pid;
 		break;
 	case IPV6_FL_S_USER:
-		fl->owner = current->euid;
+		fl->owner = tsk_euid(current);
 		break;
 	default:
 		err = -EINVAL;
diff -puN net/socket.c~d-task-xid net/socket.c
--- 25/net/socket.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/socket.c	2003-09-27 19:29:18.000000000 -0700
@@ -468,8 +468,8 @@ struct socket *sock_alloc(void)
 
 	inode->i_mode = S_IFSOCK|S_IRWXUGO;
 	inode->i_sock = 1;
-	inode->i_uid = current->fsuid;
-	inode->i_gid = current->fsgid;
+	inode->i_uid = tsk_fsuid(current);
+	inode->i_gid = tsk_fsgid(current);
 
 	get_cpu_var(sockets_in_use)++;
 	put_cpu_var(sockets_in_use);
diff -puN net/sunrpc/auth.c~d-task-xid net/sunrpc/auth.c
--- 25/net/sunrpc/auth.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/sunrpc/auth.c	2003-09-27 19:29:18.000000000 -0700
@@ -247,10 +247,10 @@ struct rpc_cred *
 rpcauth_lookupcred(struct rpc_auth *auth, int taskflags)
 {
 	struct auth_cred acred = {
-		.uid = current->fsuid,
-		.gid = current->fsgid,
-		.ngroups = current->ngroups,
-		.groups = current->groups,
+		.uid = tsk_fsuid(current),
+		.gid = tsk_fsgid(current),
+		.ngroups = tsk_ngroups(current),
+		.groups = tsk_groups(current),
 	};
 	dprintk("RPC:     looking up %s cred\n",
 		auth->au_ops->au_name);
@@ -262,10 +262,10 @@ rpcauth_bindcred(struct rpc_task *task)
 {
 	struct rpc_auth *auth = task->tk_auth;
 	struct auth_cred acred = {
-		.uid = current->fsuid,
-		.gid = current->fsgid,
-		.ngroups = current->ngroups,
-		.groups = current->groups,
+		.uid = tsk_fsuid(current),
+		.gid = tsk_fsgid(current),
+		.ngroups = tsk_ngroups(current),
+		.groups = tsk_groups(current),
 	};
 
 	dprintk("RPC: %4d looking up %s cred\n",
diff -puN net/sunrpc/auth_unix.c~d-task-xid net/sunrpc/auth_unix.c
--- 25/net/sunrpc/auth_unix.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/sunrpc/auth_unix.c	2003-09-27 19:29:18.000000000 -0700
@@ -88,8 +88,8 @@ unx_create_cred(struct rpc_auth *auth, s
 
 		cred->uc_uid = acred->uid;
 		cred->uc_gid = acred->gid;
-		cred->uc_puid = current->uid;
-		cred->uc_pgid = current->gid;
+		cred->uc_puid = tsk_uid(current);
+		cred->uc_pgid = tsk_gid(current);
 		for (i = 0; i < groups; i++)
 			cred->uc_gids[i] = (gid_t) acred->groups[i];
 		if (i < NFS_NGROUPS)
@@ -122,8 +122,8 @@ unx_match(struct auth_cred *acred, struc
 
 		if (cred->uc_uid != acred->uid
 		 || cred->uc_gid != acred->gid
-		 || cred->uc_puid != current->uid
-		 || cred->uc_pgid != current->gid)
+		 || cred->uc_puid != tsk_uid(current)
+		 || cred->uc_pgid != tsk_gid(current))
 			return 0;
 
 		groups = acred->ngroups;
diff -puN net/sunrpc/sched.c~d-task-xid net/sunrpc/sched.c
--- 25/net/sunrpc/sched.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/sunrpc/sched.c	2003-09-27 19:29:18.000000000 -0700
@@ -718,7 +718,8 @@ rpc_init_task(struct rpc_task *task, str
 	task->tk_flags  = flags;
 	task->tk_exit   = callback;
 	init_waitqueue_head(&task->tk_wait);
-	if (current->uid != current->fsuid || current->gid != current->fsgid)
+	if (tsk_uid(current) != tsk_fsuid(current) ||
+	    tsk_gid(current) != tsk_fsgid(current))
 		task->tk_flags |= RPC_TASK_SETUID;
 
 	/* Initialize retry counters */
diff -puN net/unix/af_unix.c~d-task-xid net/unix/af_unix.c
--- 25/net/unix/af_unix.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/net/unix/af_unix.c	2003-09-27 19:29:18.000000000 -0700
@@ -449,8 +449,8 @@ static int unix_listen(struct socket *so
 	sk->sk_state		= TCP_LISTEN;
 	/* set credentials so connect can copy them */
 	sk->sk_peercred.pid	= current->pid;
-	sk->sk_peercred.uid	= current->euid;
-	sk->sk_peercred.gid	= current->egid;
+	sk->sk_peercred.uid	= tsk_euid(current);
+	sk->sk_peercred.gid	= tsk_egid(current);
 	err = 0;
 
 out_unlock:
@@ -984,8 +984,8 @@ restart:
 	newsk->sk_state		= TCP_ESTABLISHED;
 	newsk->sk_type		= SOCK_STREAM;
 	newsk->sk_peercred.pid	= current->pid;
-	newsk->sk_peercred.uid	= current->euid;
-	newsk->sk_peercred.gid	= current->egid;
+	newsk->sk_peercred.uid	= tsk_euid(current);
+	newsk->sk_peercred.gid	= tsk_egid(current);
 	newu = unix_sk(newsk);
 	newsk->sk_sleep		= &newu->peer_wait;
 	otheru = unix_sk(other);
@@ -1046,8 +1046,8 @@ static int unix_socketpair(struct socket
 	unix_peer(ska)=skb;
 	unix_peer(skb)=ska;
 	ska->sk_peercred.pid = skb->sk_peercred.pid = current->pid;
-	ska->sk_peercred.uid = skb->sk_peercred.uid = current->euid;
-	ska->sk_peercred.gid = skb->sk_peercred.gid = current->egid;
+	ska->sk_peercred.uid = skb->sk_peercred.uid = tsk_euid(current);
+	ska->sk_peercred.gid = skb->sk_peercred.gid = tsk_egid(current);
 
 	if (ska->sk_type != SOCK_DGRAM) {
 		ska->sk_state = TCP_ESTABLISHED;
diff -puN security/commoncap.c~d-task-xid security/commoncap.c
--- 25/security/commoncap.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/security/commoncap.c	2003-09-27 19:29:18.000000000 -0700
@@ -103,7 +103,7 @@ int cap_bprm_set_security (struct linux_
 	 */
 
 	if (!issecure (SECURE_NOROOT)) {
-		if (bprm->e_uid == 0 || current->uid == 0) {
+		if (bprm->e_uid == 0 || tsk_uid(current) == 0) {
 			cap_set_full (bprm->cap_inheritable);
 			cap_set_full (bprm->cap_permitted);
 		}
@@ -167,8 +167,8 @@ int cap_bprm_secureexec (struct linux_bi
 	   test between the old and new capability sets.  For now,
 	   it simply preserves the legacy decision algorithm used by
 	   the old userland. */
-	return (current->euid != current->uid ||
-		current->egid != current->gid);
+	return (tsk_euid(current) != tsk_uid(current) ||
+		tsk_egid(current) != tsk_gid(current));
 }
 
 /* moved from kernel/sys.c. */
@@ -205,15 +205,16 @@ static inline void cap_emulate_setxuid (
 					int old_suid)
 {
 	if ((old_ruid == 0 || old_euid == 0 || old_suid == 0) &&
-	    (current->uid != 0 && current->euid != 0 && current->suid != 0) &&
+	    (tsk_uid(current) != 0 && tsk_euid(current) != 0 &&
+	     tsk_suid(current) != 0) &&
 	    !current->keep_capabilities) {
 		cap_clear (current->cap_permitted);
 		cap_clear (current->cap_effective);
 	}
-	if (old_euid == 0 && current->euid != 0) {
+	if (old_euid == 0 && tsk_euid(current) != 0) {
 		cap_clear (current->cap_effective);
 	}
-	if (old_euid != 0 && current->euid == 0) {
+	if (old_euid != 0 && tsk_euid(current) == 0) {
 		current->cap_effective = current->cap_permitted;
 	}
 }
@@ -242,11 +243,11 @@ int cap_task_post_setuid (uid_t old_ruid
 			 */
 
 			if (!issecure (SECURE_NO_SETUID_FIXUP)) {
-				if (old_fsuid == 0 && current->fsuid != 0) {
+				if (old_fsuid == 0 && tsk_fsuid(current) != 0) {
 					cap_t (current->cap_effective) &=
 					    ~CAP_FS_MASK;
 				}
-				if (old_fsuid != 0 && current->fsuid == 0) {
+				if (old_fsuid != 0 && tsk_fsuid(current) == 0) {
 					cap_t (current->cap_effective) |=
 					    (cap_t (current->cap_permitted) &
 					     CAP_FS_MASK);
diff -puN security/dummy.c~d-task-xid security/dummy.c
--- 25/security/dummy.c~d-task-xid	2003-09-27 19:29:17.000000000 -0700
+++ 25-akpm/security/dummy.c	2003-09-27 19:29:18.000000000 -0700
@@ -35,11 +35,11 @@ static int dummy_capget (struct task_str
 {
 	*effective = *inheritable = *permitted = 0;
 	if (!issecure(SECURE_NOROOT)) {
-		if (target->euid == 0) {
+		if (tsk_euid(target) == 0) {
 			*permitted |= (~0 & ~CAP_FS_MASK);
 			*effective |= (~0 & ~CAP_TO_MASK(CAP_SETPCAP) & ~CAP_FS_MASK);
 		}
-		if (target->fsuid == 0) {
+		if (tsk_fsuid(target) == 0) {
 			*permitted |= CAP_FS_MASK;
 			*effective |= CAP_FS_MASK;
 		}
@@ -70,7 +70,7 @@ static int dummy_acct (struct file *file
 
 static int dummy_capable (struct task_struct *tsk, int cap)
 {
-	if (cap_is_fs_cap (cap) ? tsk->fsuid == 0 : tsk->euid == 0)
+	if (cap_is_fs_cap (cap) ? tsk_fsuid(tsk) == 0 : tsk_euid(tsk) == 0)
 		/* capability granted */
 		return 0;
 
@@ -95,7 +95,7 @@ static int dummy_quota_on (struct file *
 
 static int dummy_syslog (int type)
 {
-	if ((type != 3) && current->euid)
+	if ((type != 3) && tsk_euid(current))
 		return -EPERM;
 	return 0;
 }
@@ -128,7 +128,7 @@ static int dummy_vm_enough_memory(long p
 		/*
 		 * Leave the last 3% for root
 		 */
-		if (current->euid)
+		if (tsk_euid(current))
 			free -= free / 32;
 
 		if (free > pages)
@@ -179,8 +179,8 @@ static int dummy_bprm_secureexec (struct
 	   in the AT_SECURE field to decide whether secure mode
 	   is required.  Hence, this logic is required to preserve
 	   the legacy decision algorithm used by the old userland. */
-	return (current->euid != current->uid ||
-		current->egid != current->gid);
+	return (tsk_euid(current) != tsk_uid(current) ||
+		tsk_egid(current) != tsk_gid(current));
 }
 
 static int dummy_sb_alloc_security (struct super_block *sb)
@@ -575,7 +575,8 @@ static int dummy_task_prctl (int option,
 
 static void dummy_task_reparent_to_init (struct task_struct *p)
 {
-	p->euid = p->fsuid = 0;
+	set_tsk_euid(p, 0);
+	set_tsk_fsuid(p, 0);
 	return;
 }
 
@@ -685,7 +686,7 @@ static int dummy_sem_semop (struct sem_a
 
 static int dummy_netlink_send (struct sk_buff *skb)
 {
-	if (current->euid == 0)
+	if (tsk_euid(current) == 0)
 		cap_raise (NETLINK_CB (skb).eff_cap, CAP_NET_ADMIN);
 	else
 		NETLINK_CB (skb).eff_cap = 0;

_