[PATCH] Introduce BSD-style user credential [1/3]

From: Trond Myklebust (trond.myklebust@fys.uio.no)
Date: Fri Aug 30 2002 - 18:14:31 EST


Convert references to current->fsuid, current->fsgid, current->ngroups into

  current_fsuid()
  current_fsgid()
  current_ngroups()
  current_setfsuid(uid)
  current_setfsgid(gid)

in order to simplify transition to user credentials.

Cheers,
  Trond

diff -u --recursive --new-file linux-2.5.32/arch/s390x/kernel/linux32.c linux-2.5.32-cred1/arch/s390x/kernel/linux32.c
--- linux-2.5.32/arch/s390x/kernel/linux32.c Tue Jul 30 00:08:09 2002
+++ linux-2.5.32-cred1/arch/s390x/kernel/linux32.c Wed Aug 28 23:44:39 2002
@@ -194,7 +194,7 @@
 
         if (gidsetsize < 0)
                 return -EINVAL;
- i = current->ngroups;
+ i = current_ngroups();
         if (gidsetsize) {
                 if (i > gidsetsize)
                         return -EINVAL;
diff -u --recursive --new-file linux-2.5.32/arch/sparc64/kernel/sys_sparc32.c linux-2.5.32-cred1/arch/sparc64/kernel/sys_sparc32.c
--- linux-2.5.32/arch/sparc64/kernel/sys_sparc32.c Sat Aug 24 12:59:14 2002
+++ linux-2.5.32-cred1/arch/sparc64/kernel/sys_sparc32.c Wed Aug 28 23:44:39 2002
@@ -211,7 +211,7 @@
 
         if (gidsetsize < 0)
                 return -EINVAL;
- i = current->ngroups;
+ i = current_ngroups();
         if (gidsetsize) {
                 if (i > gidsetsize)
                         return -EINVAL;
diff -u --recursive --new-file linux-2.5.32/drivers/hotplug/pci_hotplug_core.c linux-2.5.32-cred1/drivers/hotplug/pci_hotplug_core.c
--- linux-2.5.32/drivers/hotplug/pci_hotplug_core.c Tue Jul 23 02:24:20 2002
+++ linux-2.5.32-cred1/drivers/hotplug/pci_hotplug_core.c Wed Aug 28 23:44:39 2002
@@ -93,8 +93,8 @@
 
         if (inode) {
                 inode->i_mode = mode;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
                 inode->i_blksize = PAGE_CACHE_SIZE;
                 inode->i_blocks = 0;
                 inode->i_rdev = NODEV;
diff -u --recursive --new-file linux-2.5.32/drivers/isdn/capi/capifs.c linux-2.5.32-cred1/drivers/isdn/capi/capifs.c
--- linux-2.5.32/drivers/isdn/capi/capifs.c Fri Aug 16 00:01:13 2002
+++ linux-2.5.32-cred1/drivers/isdn/capi/capifs.c Wed Aug 28 23:44:39 2002
@@ -401,8 +401,8 @@
 
                 if ((np->inode = capifs_new_inode(sb)) != NULL) {
                         struct inode *inode = np->inode;
- inode->i_uid = sbi->setuid ? sbi->uid : current->fsuid;
- inode->i_gid = sbi->setgid ? sbi->gid : current->fsgid;
+ inode->i_uid = sbi->setuid ? sbi->uid : current_fsuid();
+ inode->i_gid = sbi->setgid ? sbi->gid : current_fsgid();
                         inode->i_nlink = 1;
                         inode->i_ino = ino + 2;
                         init_special_inode(inode, sbi->mode|S_IFCHR, kdev_t_to_nr(np->kdev));
diff -u --recursive --new-file linux-2.5.32/drivers/usb/core/inode.c linux-2.5.32-cred1/drivers/usb/core/inode.c
--- linux-2.5.32/drivers/usb/core/inode.c Fri Aug 2 19:55:22 2002
+++ linux-2.5.32-cred1/drivers/usb/core/inode.c Wed Aug 28 23:44:40 2002
@@ -148,8 +148,8 @@
 
         if (inode) {
                 inode->i_mode = mode;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
                 inode->i_blksize = PAGE_CACHE_SIZE;
                 inode->i_blocks = 0;
                 inode->i_rdev = NODEV;
diff -u --recursive --new-file linux-2.5.32/fs/affs/inode.c linux-2.5.32-cred1/fs/affs/inode.c
--- linux-2.5.32/fs/affs/inode.c Thu May 23 15:18:41 2002
+++ linux-2.5.32-cred1/fs/affs/inode.c Wed Aug 28 23:44:40 2002
@@ -325,8 +325,8 @@
         mark_buffer_dirty_inode(bh, inode);
         affs_brelse(bh);
 
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
         inode->i_ino = block;
         inode->i_nlink = 1;
         inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
diff -u --recursive --new-file linux-2.5.32/fs/attr.c linux-2.5.32-cred1/fs/attr.c
--- linux-2.5.32/fs/attr.c Mon Jul 22 12:12:48 2002
+++ linux-2.5.32-cred1/fs/attr.c Wed Aug 28 23:44:40 2002
@@ -30,7 +30,7 @@
 
         /* Make sure a caller can chown. */
         if ((ia_valid & ATTR_UID) &&
- (current->fsuid != inode->i_uid ||
+ (current_fsuid() != inode->i_uid ||
              attr->ia_uid != inode->i_uid) && !capable(CAP_CHOWN))
                 goto error;
 
@@ -42,7 +42,7 @@
 
         /* Make sure a caller can chmod. */
         if (ia_valid & ATTR_MODE) {
- if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+ if ((current_fsuid() != inode->i_uid) && !capable(CAP_FOWNER))
                         goto error;
                 /* Also check the setgid bit! */
                 if (!in_group_p((ia_valid & ATTR_GID) ? attr->ia_gid :
@@ -52,7 +52,7 @@
 
         /* 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 (current_fsuid() != inode->i_uid && !capable(CAP_FOWNER))
                         goto error;
         }
 fine:
diff -u --recursive --new-file linux-2.5.32/fs/bfs/dir.c linux-2.5.32-cred1/fs/bfs/dir.c
--- linux-2.5.32/fs/bfs/dir.c Thu May 23 15:24:30 2002
+++ linux-2.5.32-cred1/fs/bfs/dir.c Wed Aug 28 23:44:40 2002
@@ -98,8 +98,8 @@
         }
         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 = current_fsuid();
+ inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
         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 -u --recursive --new-file linux-2.5.32/fs/coda/coda_linux.c linux-2.5.32-cred1/fs/coda/coda_linux.c
--- linux-2.5.32/fs/coda/coda_linux.c Mon May 20 15:34:54 2002
+++ linux-2.5.32-cred1/fs/coda/coda_linux.c Wed Aug 28 23:44:40 2002
@@ -66,17 +66,17 @@
         cred->cr_uid = (vuid_t) current->uid;
         cred->cr_euid = (vuid_t) current->euid;
         cred->cr_suid = (vuid_t) current->suid;
- cred->cr_fsuid = (vuid_t) current->fsuid;
+ cred->cr_fsuid = (vuid_t) current_fsuid();
 
         cred->cr_groupid = (vgid_t) current->gid;
         cred->cr_egid = (vgid_t) current->egid;
         cred->cr_sgid = (vgid_t) current->sgid;
- cred->cr_fsgid = (vgid_t) current->fsgid;
+ cred->cr_fsgid = (vgid_t) current_fsgid();
 }
 
 int coda_cred_ok(struct coda_cred *cred)
 {
- return(current->fsuid == cred->cr_fsuid);
+ return(current_fsuid() == cred->cr_fsuid);
 }
 
 int coda_cred_eq(struct coda_cred *cred1, struct coda_cred *cred2)
diff -u --recursive --new-file linux-2.5.32/fs/devpts/inode.c linux-2.5.32-cred1/fs/devpts/inode.c
--- linux-2.5.32/fs/devpts/inode.c Fri Jul 5 02:02:21 2002
+++ linux-2.5.32-cred1/fs/devpts/inode.c Wed Aug 28 23:44:40 2002
@@ -137,8 +137,8 @@
                 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 : current_fsuid();
+ inode->i_gid = config.setgid ? config.gid : current_fsgid();
         inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
         init_special_inode(inode, S_IFCHR|config.mode, device);
 
diff -u --recursive --new-file linux-2.5.32/fs/dquot.c linux-2.5.32-cred1/fs/dquot.c
--- linux-2.5.32/fs/dquot.c Mon Jul 22 12:12:48 2002
+++ linux-2.5.32-cred1/fs/dquot.c Wed Aug 28 23:44:40 2002
@@ -785,7 +785,7 @@
 {
         switch (dquot->dq_type) {
                 case USRQUOTA:
- return current->fsuid == dquot->dq_id && !(dquot->dq_flags & flag);
+ return current_fsuid() == dquot->dq_id && !(dquot->dq_flags & flag);
                 case GRPQUOTA:
                         return in_group_p(dquot->dq_id) && !(dquot->dq_flags & flag);
         }
diff -u --recursive --new-file linux-2.5.32/fs/driverfs/inode.c linux-2.5.32-cred1/fs/driverfs/inode.c
--- linux-2.5.32/fs/driverfs/inode.c Mon Aug 5 20:13:07 2002
+++ linux-2.5.32-cred1/fs/driverfs/inode.c Wed Aug 28 23:44:40 2002
@@ -98,8 +98,8 @@
 
         if (inode) {
                 inode->i_mode = mode;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
                 inode->i_blksize = PAGE_CACHE_SIZE;
                 inode->i_blocks = 0;
                 inode->i_rdev = NODEV;
diff -u --recursive --new-file linux-2.5.32/fs/exec.c linux-2.5.32-cred1/fs/exec.c
--- linux-2.5.32/fs/exec.c Wed Aug 14 15:46:59 2002
+++ linux-2.5.32-cred1/fs/exec.c Thu Aug 29 00:28:51 2002
@@ -770,8 +770,10 @@
                 do_unlock = 1;
         }
 
- current->suid = current->euid = current->fsuid = bprm->e_uid;
- current->sgid = current->egid = current->fsgid = bprm->e_gid;
+ current->suid = current->euid = bprm->e_uid;
+ current_setfsuid(bprm->e_uid);
+ current->sgid = current->egid = bprm->e_gid;
+ current_setfsgid(bprm->e_gid);
 
         if(do_unlock)
                 unlock_kernel();
diff -u --recursive --new-file linux-2.5.32/fs/ext2/balloc.c linux-2.5.32-cred1/fs/ext2/balloc.c
--- linux-2.5.32/fs/ext2/balloc.c Thu Jul 4 18:17:10 2002
+++ linux-2.5.32-cred1/fs/ext2/balloc.c Wed Aug 28 23:44:40 2002
@@ -105,7 +105,7 @@
                 count = free_blocks;
 
         if (free_blocks < root_blocks + count && !capable(CAP_SYS_RESOURCE) &&
- sbi->s_resuid != current->fsuid &&
+ sbi->s_resuid != current_fsuid() &&
             (sbi->s_resgid == 0 || !in_group_p (sbi->s_resgid))) {
                 /*
                  * We are too close to reserve and we are not privileged.
diff -u --recursive --new-file linux-2.5.32/fs/ext2/ialloc.c linux-2.5.32-cred1/fs/ext2/ialloc.c
--- linux-2.5.32/fs/ext2/ialloc.c Thu Jul 4 18:17:10 2002
+++ linux-2.5.32-cred1/fs/ext2/ialloc.c Wed Aug 28 23:44:40 2002
@@ -344,7 +344,7 @@
                 cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) - 1);
         mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
         sb->s_dirt = 1;
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         if (test_opt (sb, GRPID))
                 inode->i_gid = dir->i_gid;
         else if (dir->i_mode & S_ISGID) {
@@ -352,7 +352,7 @@
                 if (S_ISDIR(mode))
                         mode |= S_ISGID;
         } else
- inode->i_gid = current->fsgid;
+ inode->i_gid = current_fsgid();
         inode->i_mode = mode;
 
         inode->i_ino = ino;
diff -u --recursive --new-file linux-2.5.32/fs/ext2/ioctl.c linux-2.5.32-cred1/fs/ext2/ioctl.c
--- linux-2.5.32/fs/ext2/ioctl.c Fri Jun 21 07:33:18 2002
+++ linux-2.5.32-cred1/fs/ext2/ioctl.c Wed Aug 28 23:44:40 2002
@@ -30,7 +30,7 @@
                 if (IS_RDONLY(inode))
                         return -EROFS;
 
- if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+ if ((current_fsuid() != inode->i_uid) && !capable(CAP_FOWNER))
                         return -EACCES;
 
                 if (get_user(flags, (int *) arg))
@@ -79,7 +79,7 @@
         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 ((current_fsuid() != inode->i_uid) && !capable(CAP_FOWNER))
                         return -EPERM;
                 if (IS_RDONLY(inode))
                         return -EROFS;
diff -u --recursive --new-file linux-2.5.32/fs/ext3/balloc.c linux-2.5.32-cred1/fs/ext3/balloc.c
--- linux-2.5.32/fs/ext3/balloc.c Thu Jul 4 18:17:11 2002
+++ linux-2.5.32-cred1/fs/ext3/balloc.c Wed Aug 28 23:44:40 2002
@@ -411,7 +411,7 @@
         es = sb->u.ext3_sb.s_es;
         if (le32_to_cpu(es->s_free_blocks_count) <=
                         le32_to_cpu(es->s_r_blocks_count) &&
- ((sb->u.ext3_sb.s_resuid != current->fsuid) &&
+ ((sb->u.ext3_sb.s_resuid != current_fsuid()) &&
              (sb->u.ext3_sb.s_resgid == 0 ||
               !in_group_p(sb->u.ext3_sb.s_resgid)) &&
              !capable(CAP_SYS_RESOURCE)))
diff -u --recursive --new-file linux-2.5.32/fs/ext3/ialloc.c linux-2.5.32-cred1/fs/ext3/ialloc.c
--- linux-2.5.32/fs/ext3/ialloc.c Thu Jul 4 18:17:11 2002
+++ linux-2.5.32-cred1/fs/ext3/ialloc.c Wed Aug 28 23:44:40 2002
@@ -367,7 +367,7 @@
         sb->s_dirt = 1;
         if (err) goto fail;
 
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         if (test_opt (sb, GRPID))
                 inode->i_gid = dir->i_gid;
         else if (dir->i_mode & S_ISGID) {
@@ -375,7 +375,7 @@
                 if (S_ISDIR(mode))
                         mode |= S_ISGID;
         } else
- inode->i_gid = current->fsgid;
+ inode->i_gid = current_fsgid();
         inode->i_mode = mode;
 
         inode->i_ino = j;
diff -u --recursive --new-file linux-2.5.32/fs/ext3/ioctl.c linux-2.5.32-cred1/fs/ext3/ioctl.c
--- linux-2.5.32/fs/ext3/ioctl.c Fri Jun 21 07:33:18 2002
+++ linux-2.5.32-cred1/fs/ext3/ioctl.c Wed Aug 28 23:44:40 2002
@@ -37,7 +37,7 @@
                 if (IS_RDONLY(inode))
                         return -EROFS;
 
- if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+ if ((current_fsuid() != inode->i_uid) && !capable(CAP_FOWNER))
                         return -EACCES;
 
                 if (get_user(flags, (int *) arg))
@@ -123,7 +123,7 @@
                 __u32 generation;
                 int err;
 
- if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+ if ((current_fsuid() != inode->i_uid) && !capable(CAP_FOWNER))
                         return -EPERM;
                 if (IS_RDONLY(inode))
                         return -EROFS;
diff -u --recursive --new-file linux-2.5.32/fs/file_table.c linux-2.5.32-cred1/fs/file_table.c
--- linux-2.5.32/fs/file_table.c Mon Jul 22 12:12:48 2002
+++ linux-2.5.32-cred1/fs/file_table.c Wed Aug 28 23:44:40 2002
@@ -52,8 +52,8 @@
                 }
                 atomic_set(&f->f_count,1);
                 f->f_version = ++event;
- f->f_uid = current->fsuid;
- f->f_gid = current->fsgid;
+ f->f_uid = current_fsuid();
+ f->f_gid = current_fsgid();
                 list_add(&f->f_list, &anon_list);
                 file_list_unlock();
                 return f;
@@ -96,8 +96,8 @@
         filp->f_mode = mode;
         atomic_set(&filp->f_count, 1);
         filp->f_dentry = dentry;
- filp->f_uid = current->fsuid;
- filp->f_gid = current->fsgid;
+ filp->f_uid = current_fsuid();
+ filp->f_gid = current_fsgid();
         filp->f_op = dentry->d_inode->i_fop;
         if (filp->f_op->open)
                 return filp->f_op->open(dentry->d_inode, filp);
diff -u --recursive --new-file linux-2.5.32/fs/hpfs/namei.c linux-2.5.32-cred1/fs/hpfs/namei.c
--- linux-2.5.32/fs/hpfs/namei.c Thu May 23 15:18:50 2002
+++ linux-2.5.32-cred1/fs/hpfs/namei.c Wed Aug 28 23:44:40 2002
@@ -77,11 +77,11 @@
                 result->i_ctime = result->i_mtime = result->i_atime = local_to_gmt(dir->i_sb, dee.creation_date);
                 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 != current_fsuid() ||
+ result->i_gid != current_fsgid() ||
                     result->i_mode != (mode | S_IFDIR)) {
- result->i_uid = current->fsuid;
- result->i_gid = current->fsgid;
+ result->i_uid = current_fsuid();
+ result->i_gid = current_fsgid();
                         result->i_mode = mode | S_IFDIR;
                         hpfs_write_inode_nolock(result);
                 }
@@ -152,11 +152,11 @@
                         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 != current_fsuid() ||
+ result->i_gid != current_fsgid() ||
                     result->i_mode != (mode | S_IFREG)) {
- result->i_uid = current->fsuid;
- result->i_gid = current->fsgid;
+ result->i_uid = current_fsuid();
+ result->i_gid = current_fsgid();
                         result->i_mode = mode | S_IFREG;
                         hpfs_write_inode_nolock(result);
                 }
@@ -217,8 +217,8 @@
                 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 = current_fsuid();
+ result->i_gid = current_fsgid();
                 result->i_nlink = 1;
                 result->i_size = 0;
                 result->i_blocks = 1;
@@ -288,8 +288,8 @@
                 /*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 = current_fsuid();
+ result->i_gid = current_fsgid();
                 result->i_blocks = 1;
                 result->i_size = strlen(symlink);
                 result->i_op = &page_symlink_inode_operations;
diff -u --recursive --new-file linux-2.5.32/fs/intermezzo/file.c linux-2.5.32-cred1/fs/intermezzo/file.c
--- linux-2.5.32/fs/intermezzo/file.c Mon May 20 15:36:08 2002
+++ linux-2.5.32-cred1/fs/intermezzo/file.c Wed Aug 28 23:44:41 2002
@@ -147,11 +147,11 @@
                 /* we believe that on open the kernel lock
                    assures that only one process will do this allocation */
                 fdata->fd_do_lml = 0;
- fdata->fd_fsuid = current->fsuid;
- fdata->fd_fsgid = current->fsgid;
+ fdata->fd_fsuid = current_fsuid();
+ fdata->fd_fsgid = current_fsgid();
                 fdata->fd_mode = file->f_dentry->d_inode->i_mode;
- fdata->fd_ngroups = current->ngroups;
- for (i=0 ; i<current->ngroups ; i++)
+ fdata->fd_ngroups = current_ngroups();
+ for (i=0 ; i<current_ngroups() ; i++)
                         fdata->fd_groups[i] = current->groups[i];
                 fdata->fd_bytes_written = 0; /*when open,written data is zero*/
                 file->private_data = fdata;
diff -u --recursive --new-file linux-2.5.32/fs/intermezzo/journal.c linux-2.5.32-cred1/fs/intermezzo/journal.c
--- linux-2.5.32/fs/intermezzo/journal.c Mon May 20 15:36:12 2002
+++ linux-2.5.32-cred1/fs/intermezzo/journal.c Wed Aug 28 23:44:41 2002
@@ -258,14 +258,14 @@
         int i;
 
         /* convert 16 bit gid's to 32 bit gid's */
- for (i=0; i<current->ngroups; i++)
+ for (i=0; i<current_ngroups(); i++)
                 groups[i] = (__u32) current->groups[i];
         
         return journal_log_prefix_with_groups_and_ids(buf, opcode, rec,
- (__u32)current->ngroups,
+ (__u32)current_ngroups(),
                                                       groups,
- (__u32)current->fsuid,
- (__u32)current->fsgid);
+ (__u32)current_fsuid(),
+ (__u32)current_fsgid());
 }
 
 static inline char *
@@ -274,8 +274,8 @@
 {
         return journal_log_prefix_with_groups_and_ids(buf, opcode, rec,
                                                       ngroups, groups,
- (__u32)current->fsuid,
- (__u32)current->fsgid);
+ (__u32)current_fsuid(),
+ (__u32)current_fsgid());
 }
 
 static inline char *log_version(char *buf, struct dentry *dentry)
@@ -897,7 +897,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + sizeof(*new_file_ver) +
                 sizeof(ino) + sizeof(generation) + sizeof(pathlen) +
                 sizeof(remote_ino) + sizeof(remote_generation) +
@@ -1139,7 +1139,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + sizeof(*old_ver) +
                 sizeof(valid) + sizeof(mode) + sizeof(uid) + sizeof(gid) +
                 sizeof(fsize) + sizeof(mtime) + sizeof(ctime) + sizeof(flags) +
@@ -1220,7 +1220,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
                 sizeof(struct journal_suffix);
@@ -1282,7 +1282,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
                 sizeof(targetlen) + sizeof(struct journal_suffix);
@@ -1345,7 +1345,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
                 sizeof(struct journal_suffix);
@@ -1405,7 +1405,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(pathlen) + sizeof(llen) + sizeof(struct journal_suffix);
 
@@ -1472,7 +1472,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(lmajor) +
                 sizeof(lminor) + sizeof(pathlen) +
@@ -1537,7 +1537,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(srcpathlen) + sizeof(pathlen) +
                 sizeof(struct journal_suffix);
@@ -1600,7 +1600,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 4 * sizeof(*src_dir_ver) +
                 sizeof(srcpathlen) + sizeof(pathlen) +
                 sizeof(struct journal_suffix);
@@ -1661,7 +1661,7 @@
         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) * current_ngroups() +
                 sizeof(struct journal_prefix) + 3 * sizeof(*tgt_dir_ver) +
                 sizeof(pathlen) + sizeof(llen) + sizeof(struct journal_suffix);
 
@@ -1741,14 +1741,14 @@
                 open_fsuid = fd->fd_fsuid;
                 open_fsgid = fd->fd_fsgid;
         } else {
- open_ngroups = current->ngroups;
- for (i=0; i<current->ngroups; i++)
+ open_ngroups = current_ngroups();
+ for (i=0; i<current_ngroups(); i++)
                         open_groups[i] = (__u32) current->groups[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 = current_fsuid();
+ open_fsgid = current_fsgid();
         }
         BUFF_ALLOC(buffer, NULL);
         path = presto_path(dentry, root, buffer, PAGE_SIZE);
@@ -2011,7 +2011,7 @@
          */
         mode=cpu_to_le32(dentry->d_inode->i_mode);
 
- size = sizeof(__u32) * current->ngroups +
+ size = sizeof(__u32) * current_ngroups() +
                 sizeof(struct journal_prefix) +
                 2 * sizeof(struct presto_version) +
                 sizeof(flags) + sizeof(mode) + sizeof(namelen) +
diff -u --recursive --new-file linux-2.5.32/fs/intermezzo/kml_reint.c linux-2.5.32-cred1/fs/intermezzo/kml_reint.c
--- linux-2.5.32/fs/intermezzo/kml_reint.c Sat Mar 2 05:19:20 2002
+++ linux-2.5.32-cred1/fs/intermezzo/kml_reint.c Wed Aug 28 23:44:41 2002
@@ -27,18 +27,18 @@
 
 static void kmlreint_pre_secure (struct kml_rec *rec)
 {
- if (current->fsuid != current->uid)
+ if (current_fsuid() != current->uid)
                 CDEBUG (D_KML, "reint_kmlreint_pre_secure: cannot setfsuid\n");
- if (current->fsgid != current->gid)
+ if (current_fsgid() != current->gid)
                 CDEBUG (D_KML, "reint_kmlreint_pre_secure: cannot setfsgid\n");
- current->fsuid = rec->rec_head.uid;
- current->fsgid = rec->rec_head.fsgid;
+ current_setfsuid(rec->rec_head.uid);
+ current_setfsgid(rec->rec_head.fsgid);
 }
 
 static void kmlreint_post_secure (struct kml_rec *rec)
 {
- current->fsuid = current->uid;
- current->fsgid = current->gid;
+ current_setfsuid(current->uid);
+ current_setfsgid(current->gid);
         /* current->egid = current->gid; */
         /* ????????????? */
 }
diff -u --recursive --new-file linux-2.5.32/fs/intermezzo/upcall.c linux-2.5.32-cred1/fs/intermezzo/upcall.c
--- linux-2.5.32/fs/intermezzo/upcall.c Mon May 20 15:36:58 2002
+++ linux-2.5.32-cred1/fs/intermezzo/upcall.c Wed Aug 28 23:44:41 2002
@@ -63,7 +63,7 @@
         outp = (union down_args *) (inp);\
         inp->uh.opcode = (op);\
         inp->uh.pid = current->pid;\
- inp->uh.uid = current->fsuid;\
+ inp->uh.uid = current_fsuid();\
         outsize = insize;\
 } while (0)
 
diff -u --recursive --new-file linux-2.5.32/fs/intermezzo/vfs.c linux-2.5.32-cred1/fs/intermezzo/vfs.c
--- linux-2.5.32/fs/intermezzo/vfs.c Tue Jun 18 16:02:41 2002
+++ linux-2.5.32-cred1/fs/intermezzo/vfs.c Wed Aug 28 23:44:41 2002
@@ -70,9 +70,9 @@
 {
         if (!(dir->i_mode & S_ISVTX))
                 return 0;
- if (inode->i_uid == current->fsuid)
+ if (inode->i_uid == current_fsuid())
                 return 0;
- if (dir->i_uid == current->fsuid)
+ if (dir->i_uid == current_fsuid())
                 return 0;
         return !capable(CAP_FOWNER);
 }
diff -u --recursive --new-file linux-2.5.32/fs/jffs/inode-v23.c linux-2.5.32-cred1/fs/jffs/inode-v23.c
--- linux-2.5.32/fs/jffs/inode-v23.c Sat Jul 27 17:21:19 2002
+++ linux-2.5.32-cred1/fs/jffs/inode-v23.c Wed Aug 28 23:44:41 2002
@@ -479,8 +479,8 @@
         raw_inode.pino = new_dir_f->ino;
 /* raw_inode.version = f->highest_version + 1; */
         raw_inode.mode = f->mode;
- raw_inode.uid = current->fsuid;
- raw_inode.gid = current->fsgid;
+ raw_inode.uid = current_fsuid();
+ raw_inode.gid = current_fsgid();
 #if 0
         raw_inode.uid = f->uid;
         raw_inode.gid = f->gid;
@@ -862,9 +862,9 @@
         raw_inode.pino = dir_f->ino;
         raw_inode.version = 1;
         raw_inode.mode = dir_mode;
- raw_inode.uid = current->fsuid;
- raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
- /* raw_inode.gid = current->fsgid; */
+ raw_inode.uid = current_fsuid();
+ raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
+ /* raw_inode.gid = current_fsgid(); */
         raw_inode.atime = CURRENT_TIME;
         raw_inode.mtime = raw_inode.atime;
         raw_inode.ctime = raw_inode.atime;
@@ -1026,8 +1026,8 @@
         raw_inode.pino = del_f->pino;
 /* raw_inode.version = del_f->highest_version + 1; */
         raw_inode.mode = del_f->mode;
- raw_inode.uid = current->fsuid;
- raw_inode.gid = current->fsgid;
+ raw_inode.uid = current_fsuid();
+ raw_inode.gid = current_fsgid();
         raw_inode.atime = CURRENT_TIME;
         raw_inode.mtime = del_f->mtime;
         raw_inode.ctime = raw_inode.atime;
@@ -1101,9 +1101,9 @@
         raw_inode.pino = dir_f->ino;
         raw_inode.version = 1;
         raw_inode.mode = mode;
- raw_inode.uid = current->fsuid;
- raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
- /* raw_inode.gid = current->fsgid; */
+ raw_inode.uid = current_fsuid();
+ raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
+ /* raw_inode.gid = current_fsgid(); */
         raw_inode.atime = CURRENT_TIME;
         raw_inode.mtime = raw_inode.atime;
         raw_inode.ctime = raw_inode.atime;
@@ -1212,8 +1212,8 @@
         raw_inode.pino = dir_f->ino;
         raw_inode.version = 1;
         raw_inode.mode = S_IFLNK | S_IRWXUGO;
- raw_inode.uid = current->fsuid;
- raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+ raw_inode.uid = current_fsuid();
+ raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
         raw_inode.atime = CURRENT_TIME;
         raw_inode.mtime = raw_inode.atime;
         raw_inode.ctime = raw_inode.atime;
@@ -1314,8 +1314,8 @@
         raw_inode.pino = dir_f->ino;
         raw_inode.version = 1;
         raw_inode.mode = mode;
- raw_inode.uid = current->fsuid;
- raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+ raw_inode.uid = current_fsuid();
+ raw_inode.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
         raw_inode.atime = CURRENT_TIME;
         raw_inode.mtime = raw_inode.atime;
         raw_inode.ctime = raw_inode.atime;
diff -u --recursive --new-file linux-2.5.32/fs/jffs2/fs.c linux-2.5.32-cred1/fs/jffs2/fs.c
--- linux-2.5.32/fs/jffs2/fs.c Tue Jul 23 15:08:22 2002
+++ linux-2.5.32-cred1/fs/jffs2/fs.c Wed Aug 28 23:44:41 2002
@@ -229,14 +229,14 @@
 
         memset(ri, 0, sizeof(*ri));
         /* Set OS-specific defaults for new inodes */
- ri->uid = current->fsuid;
+ ri->uid = current_fsuid();
 
         if (dir_i->i_mode & S_ISGID) {
                 ri->gid = dir_i->i_gid;
                 if (S_ISDIR(mode))
                         ri->mode |= S_ISGID;
         } else {
- ri->gid = current->fsgid;
+ ri->gid = current_fsgid();
         }
         ri->mode = mode;
         ret = jffs2_do_new_inode (c, f, mode, ri);
diff -u --recursive --new-file linux-2.5.32/fs/jfs/jfs_inode.c linux-2.5.32-cred1/fs/jfs/jfs_inode.c
--- linux-2.5.32/fs/jfs/jfs_inode.c Sun Aug 4 03:47:06 2002
+++ linux-2.5.32-cred1/fs/jfs/jfs_inode.c Wed Aug 28 23:44:41 2002
@@ -52,13 +52,13 @@
                 return NULL;
         }
 
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         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 = current_fsgid();
 
         inode->i_mode = mode;
         if (S_ISDIR(mode))
diff -u --recursive --new-file linux-2.5.32/fs/lockd/host.c linux-2.5.32-cred1/fs/lockd/host.c
--- linux-2.5.32/fs/lockd/host.c Tue Feb 5 08:49:27 2002
+++ linux-2.5.32-cred1/fs/lockd/host.c Wed Aug 28 23:44:41 2002
@@ -187,14 +187,14 @@
                                         host->h_nextrebind - jiffies);
                 }
         } else {
- uid_t saved_fsuid = current->fsuid;
+ uid_t saved_fsuid = current_fsuid();
                 kernel_cap_t saved_cap = current->cap_effective;
 
                 /* Create RPC socket as root user so we get a priv port */
- current->fsuid = 0;
+ current_setfsuid(0);
                 cap_raise (current->cap_effective, CAP_NET_BIND_SERVICE);
                 xprt = xprt_create_proto(host->h_proto, &host->h_addr, NULL);
- current->fsuid = saved_fsuid;
+ current_setfsuid(saved_fsuid);
                 current->cap_effective = saved_cap;
                 if (xprt == NULL)
                         goto forgetit;
diff -u --recursive --new-file linux-2.5.32/fs/locks.c linux-2.5.32-cred1/fs/locks.c
--- linux-2.5.32/fs/locks.c Wed Aug 21 17:29:29 2002
+++ linux-2.5.32-cred1/fs/locks.c Wed Aug 28 23:44:41 2002
@@ -1202,7 +1202,7 @@
         dentry = filp->f_dentry;
         inode = dentry->d_inode;
 
- if ((current->fsuid != inode->i_uid) && !capable(CAP_LEASE))
+ if ((current_fsuid() != inode->i_uid) && !capable(CAP_LEASE))
                 return -EACCES;
         if (!S_ISREG(inode->i_mode))
                 return -EINVAL;
diff -u --recursive --new-file linux-2.5.32/fs/minix/bitmap.c linux-2.5.32-cred1/fs/minix/bitmap.c
--- linux-2.5.32/fs/minix/bitmap.c Thu May 23 15:18:51 2002
+++ linux-2.5.32-cred1/fs/minix/bitmap.c Wed Aug 28 23:44:41 2002
@@ -247,8 +247,8 @@
                 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 = current_fsuid();
+ inode->i_gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
         inode->i_ino = j;
         inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
         inode->i_blocks = inode->i_blksize = 0;
diff -u --recursive --new-file linux-2.5.32/fs/namei.c linux-2.5.32-cred1/fs/namei.c
--- linux-2.5.32/fs/namei.c Mon Jul 22 23:20:31 2002
+++ linux-2.5.32-cred1/fs/namei.c Wed Aug 28 23:44:41 2002
@@ -174,7 +174,7 @@
                         return -EACCES;
         }
 
- if (current->fsuid == inode->i_uid)
+ if (current_fsuid() == inode->i_uid)
                 mode >>= 6;
         else if (in_group_p(inode->i_gid))
                 mode >>= 3;
@@ -324,7 +324,7 @@
         if ((inode->i_op && inode->i_op->permission))
                 return -EAGAIN;
 
- if (current->fsuid == inode->i_uid)
+ if (current_fsuid() == inode->i_uid)
                 mode >>= 6;
         else if (in_group_p(inode->i_gid))
                 mode >>= 3;
@@ -983,9 +983,9 @@
 {
         if (!(dir->i_mode & S_ISVTX))
                 return 0;
- if (inode->i_uid == current->fsuid)
+ if (inode->i_uid == current_fsuid())
                 return 0;
- if (dir->i_uid == current->fsuid)
+ if (dir->i_uid == current_fsuid())
                 return 0;
         return !capable(CAP_FOWNER);
 }
diff -u --recursive --new-file linux-2.5.32/fs/nfsd/auth.c linux-2.5.32-cred1/fs/nfsd/auth.c
--- linux-2.5.32/fs/nfsd/auth.c Tue Feb 5 18:39:38 2002
+++ linux-2.5.32-cred1/fs/nfsd/auth.c Wed Aug 28 23:44:41 2002
@@ -35,13 +35,13 @@
         }
 
         if (cred->cr_uid != (uid_t) -1)
- current->fsuid = cred->cr_uid;
+ current_setfsuid(cred->cr_uid);
         else
- current->fsuid = exp->ex_anon_uid;
+ current_setfsuid(exp->ex_anon_uid);
         if (cred->cr_gid != (gid_t) -1)
- current->fsgid = cred->cr_gid;
+ current_setfsgid(cred->cr_gid);
         else
- current->fsgid = exp->ex_anon_gid;
+ current_setfsgid(exp->ex_anon_gid);
         for (i = 0; i < NGROUPS; i++) {
                 gid_t group = cred->cr_groups[i];
                 if (group == (gid_t) NOGROUP)
diff -u --recursive --new-file linux-2.5.32/fs/nfsd/vfs.c linux-2.5.32-cred1/fs/nfsd/vfs.c
--- linux-2.5.32/fs/nfsd/vfs.c Thu Aug 22 01:26:44 2002
+++ linux-2.5.32-cred1/fs/nfsd/vfs.c Wed Aug 28 23:44:41 2002
@@ -1498,7 +1498,7 @@
                 IS_APPEND(inode)? " append" : "",
                 IS_RDONLY(inode)? " ro" : "");
         dprintk(" owner %d/%d user %d/%d\n",
- inode->i_uid, inode->i_gid, current->fsuid, current->fsgid);
+ inode->i_uid, inode->i_gid, current_fsuid(), current_fsgid());
 #endif
 
         /* only care about readonly exports for files and
@@ -1540,7 +1540,7 @@
          * with NFSv3.
          */
         if ((acc & MAY_OWNER_OVERRIDE) &&
- inode->i_uid == current->fsuid)
+ inode->i_uid == current_fsuid())
                 return 0;
 
         acc &= ~ MAY_OWNER_OVERRIDE; /* This bit is no longer needed,
diff -u --recursive --new-file linux-2.5.32/fs/open.c linux-2.5.32-cred1/fs/open.c
--- linux-2.5.32/fs/open.c Mon Jul 22 12:12:48 2002
+++ linux-2.5.32-cred1/fs/open.c Wed Aug 28 23:44:41 2002
@@ -259,7 +259,7 @@
 
                 newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
         } else {
- if (current->fsuid != inode->i_uid &&
+ if (current_fsuid() != inode->i_uid &&
                     (error = permission(inode,MAY_WRITE)) != 0)
                         goto dput_and_out;
         }
@@ -306,7 +306,7 @@
                 newattrs.ia_mtime = times[1].tv_sec;
                 newattrs.ia_valid |= ATTR_ATIME_SET | ATTR_MTIME_SET;
         } else {
- if (current->fsuid != inode->i_uid &&
+ if (current_fsuid() != inode->i_uid &&
                     (error = permission(inode,MAY_WRITE)) != 0)
                         goto dput_and_out;
         }
@@ -334,12 +334,12 @@
         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 = current_fsuid();
+ old_fsgid = current_fsgid();
         old_cap = current->cap_effective;
 
- current->fsuid = current->uid;
- current->fsgid = current->gid;
+ current_setfsuid(current->uid);
+ current_setfsgid(current->gid);
 
         /*
          * Clear the capabilities if we switch to a non-root user
@@ -364,8 +364,8 @@
                 path_release(&nd);
         }
 
- current->fsuid = old_fsuid;
- current->fsgid = old_fsgid;
+ current_setfsuid(old_fsuid);
+ current_setfsgid(old_fsgid);
         current->cap_effective = old_cap;
 
         return res;
diff -u --recursive --new-file linux-2.5.32/fs/pipe.c linux-2.5.32-cred1/fs/pipe.c
--- linux-2.5.32/fs/pipe.c Mon Jul 15 19:03:05 2002
+++ linux-2.5.32-cred1/fs/pipe.c Wed Aug 28 23:44:41 2002
@@ -564,8 +564,8 @@
          */
         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 = current_fsuid();
+ inode->i_gid = current_fsgid();
         inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
         inode->i_blksize = PAGE_SIZE;
         return inode;
diff -u --recursive --new-file linux-2.5.32/fs/proc/base.c linux-2.5.32-cred1/fs/proc/base.c
--- linux-2.5.32/fs/proc/base.c Tue Aug 13 01:20:00 2002
+++ linux-2.5.32-cred1/fs/proc/base.c Wed Aug 28 23:44:41 2002
@@ -526,7 +526,7 @@
         /* 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 (current_fsuid() != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
                 goto out;
         error = proc_check_root(inode);
         if (error)
@@ -568,7 +568,7 @@
 
         lock_kernel();
 
- if (current->fsuid != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
+ if (current_fsuid() != inode->i_uid && !capable(CAP_DAC_OVERRIDE))
                 goto out;
         error = proc_check_root(inode);
         if (error)
diff -u --recursive --new-file linux-2.5.32/fs/ramfs/inode.c linux-2.5.32-cred1/fs/ramfs/inode.c
--- linux-2.5.32/fs/ramfs/inode.c Sat Jul 27 17:21:19 2002
+++ linux-2.5.32-cred1/fs/ramfs/inode.c Wed Aug 28 23:44:41 2002
@@ -85,8 +85,8 @@
 
         if (inode) {
                 inode->i_mode = mode;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
                 inode->i_blksize = PAGE_CACHE_SIZE;
                 inode->i_blocks = 0;
                 inode->i_rdev = NODEV;
diff -u --recursive --new-file linux-2.5.32/fs/reiserfs/namei.c linux-2.5.32-cred1/fs/reiserfs/namei.c
--- linux-2.5.32/fs/reiserfs/namei.c Tue Aug 6 08:57:09 2002
+++ linux-2.5.32-cred1/fs/reiserfs/namei.c Wed Aug 28 23:44:41 2002
@@ -545,7 +545,7 @@
     /* 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 = current_fsuid();
     inode->i_mode = mode;
 
     if (dir->i_mode & S_ISGID) {
@@ -553,7 +553,7 @@
         if (S_ISDIR(mode))
             inode->i_mode |= S_ISGID;
     } else {
- inode->i_gid = current->fsgid;
+ inode->i_gid = current_fsgid();
     }
     return 0 ;
 }
diff -u --recursive --new-file linux-2.5.32/fs/sysv/ialloc.c linux-2.5.32-cred1/fs/sysv/ialloc.c
--- linux-2.5.32/fs/sysv/ialloc.c Thu May 23 15:18:57 2002
+++ linux-2.5.32-cred1/fs/sysv/ialloc.c Wed Aug 28 23:44:41 2002
@@ -165,9 +165,9 @@
                 if (S_ISDIR(mode))
                         mode |= S_ISGID;
         } else
- inode->i_gid = current->fsgid;
+ inode->i_gid = current_fsgid();
 
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         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 -u --recursive --new-file linux-2.5.32/fs/udf/ialloc.c linux-2.5.32-cred1/fs/udf/ialloc.c
--- linux-2.5.32/fs/udf/ialloc.c Thu May 23 15:18:59 2002
+++ linux-2.5.32-cred1/fs/udf/ialloc.c Wed Aug 28 23:44:41 2002
@@ -118,7 +118,7 @@
                 mark_buffer_dirty(UDF_SB_LVIDBH(sb));
         }
         inode->i_mode = mode;
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         if (dir->i_mode & S_ISGID)
         {
                 inode->i_gid = dir->i_gid;
@@ -126,7 +126,7 @@
                         mode |= S_ISGID;
         }
         else
- inode->i_gid = current->fsgid;
+ inode->i_gid = current_fsgid();
 
         UDF_I_LOCATION(inode).logicalBlockNum = block;
         UDF_I_LOCATION(inode).partitionReferenceNum = UDF_I_LOCATION(dir).partitionReferenceNum;
diff -u --recursive --new-file linux-2.5.32/fs/udf/namei.c linux-2.5.32-cred1/fs/udf/namei.c
--- linux-2.5.32/fs/udf/namei.c Thu May 23 15:19:00 2002
+++ linux-2.5.32-cred1/fs/udf/namei.c Wed Aug 28 23:44:41 2002
@@ -687,7 +687,7 @@
         if (!inode)
                 goto out;
 
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         init_special_inode(inode, mode, rdev);
         if (!(fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err)))
         {
diff -u --recursive --new-file linux-2.5.32/fs/ufs/ialloc.c linux-2.5.32-cred1/fs/ufs/ialloc.c
--- linux-2.5.32/fs/ufs/ialloc.c Tue Aug 20 14:25:37 2002
+++ linux-2.5.32-cred1/fs/ufs/ialloc.c Wed Aug 28 23:44:41 2002
@@ -254,13 +254,13 @@
         sb->s_dirt = 1;
 
         inode->i_mode = mode;
- inode->i_uid = current->fsuid;
+ inode->i_uid = current_fsuid();
         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 = current_fsgid();
 
         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 -u --recursive --new-file linux-2.5.32/fs/umsdos/namei.c linux-2.5.32-cred1/fs/umsdos/namei.c
--- linux-2.5.32/fs/umsdos/namei.c Sat Jun 1 03:18:10 2002
+++ linux-2.5.32-cred1/fs/umsdos/namei.c Wed Aug 28 23:44:41 2002
@@ -255,8 +255,8 @@
         info.entry.mode = mode;
         info.entry.rdev = rdev;
         info.entry.flags = flags;
- info.entry.uid = current->fsuid;
- info.entry.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+ info.entry.uid = current_fsuid();
+ info.entry.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
         info.entry.ctime = info.entry.atime = info.entry.mtime = CURRENT_TIME;
         info.entry.nlink = 1;
         ret = umsdos_newentry (dentry->d_parent, &info);
@@ -779,8 +779,8 @@
 
         info.entry.mode = mode | S_IFDIR;
         info.entry.rdev = 0;
- info.entry.uid = current->fsuid;
- info.entry.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+ info.entry.uid = current_fsuid();
+ info.entry.gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current_fsgid();
         info.entry.ctime = info.entry.atime = info.entry.mtime = CURRENT_TIME;
         info.entry.flags = 0;
         info.entry.nlink = 1;
diff -u --recursive --new-file linux-2.5.32/include/linux/sched.h linux-2.5.32-cred1/include/linux/sched.h
--- linux-2.5.32/include/linux/sched.h Mon Aug 26 21:30:27 2002
+++ linux-2.5.32-cred1/include/linux/sched.h Wed Aug 28 23:44:41 2002
@@ -946,6 +946,28 @@
 
 #endif /* CONFIG_SMP */
 
+/* Provisional functions for the transition to reference-counted ucreds */
+static inline uid_t current_fsuid(void)
+{
+ return current->fsuid;
+}
+static inline gid_t current_fsgid(void)
+{
+ return current->fsgid;
+}
+static inline int current_ngroups(void)
+{
+ return current->ngroups;
+}
+static inline void current_setfsuid(uid_t uid)
+{
+ current->fsuid = uid;
+}
+static inline void current_setfsgid(gid_t gid)
+{
+ current->fsgid = gid;
+}
+
 #endif /* __KERNEL__ */
 
 #endif
diff -u --recursive --new-file linux-2.5.32/kernel/sys.c linux-2.5.32-cred1/kernel/sys.c
--- linux-2.5.32/kernel/sys.c Fri Aug 16 06:33:01 2002
+++ linux-2.5.32-cred1/kernel/sys.c Thu Aug 29 00:27:10 2002
@@ -468,7 +468,7 @@
         if (rgid != (gid_t) -1 ||
             (egid != (gid_t) -1 && egid != old_rgid))
                 current->sgid = new_egid;
- current->fsgid = new_egid;
+ current_setfsgid(new_egid);
         current->egid = new_egid;
         current->gid = new_rgid;
         return 0;
@@ -495,7 +495,8 @@
                         current->mm->dumpable=0;
                         wmb();
                 }
- current->gid = current->egid = current->sgid = current->fsgid = gid;
+ current->gid = current->egid = current->sgid = gid;
+ current_setfsgid(gid);
         }
         else if ((gid == current->gid) || (gid == current->sgid))
         {
@@ -504,7 +505,8 @@
                         current->mm->dumpable=0;
                         wmb();
                 }
- current->egid = current->fsgid = gid;
+ current->egid = gid;
+ current_setfsgid(gid);
         }
         else
                 return -EPERM;
@@ -591,11 +593,12 @@
                 current->mm->dumpable=0;
                 wmb();
         }
- current->fsuid = current->euid = new_euid;
+ current->euid = new_euid;
+ current_setfsuid(new_euid);
         if (ruid != (uid_t) -1 ||
             (euid != (uid_t) -1 && euid != old_ruid))
                 current->suid = current->euid;
- current->fsuid = current->euid;
+ current_setfsuid(current->euid);
 
         return security_ops->task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_RE);
 }
@@ -639,7 +642,8 @@
                 current->mm->dumpable = 0;
                 wmb();
         }
- current->fsuid = current->euid = uid;
+ current->euid = uid;
+ current_setfsuid(uid);
         current->suid = new_suid;
 
         return security_ops->task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_ID);
@@ -684,7 +688,7 @@
                 }
                 current->euid = euid;
         }
- current->fsuid = current->euid;
+ current_setfsuid(current->euid);
         if (suid != (uid_t) -1)
                 current->suid = suid;
 
@@ -732,7 +736,7 @@
                 }
                 current->egid = egid;
         }
- current->fsgid = current->egid;
+ current_setfsgid(current->egid);
         if (rgid != (gid_t) -1)
                 current->gid = rgid;
         if (sgid != (gid_t) -1)
@@ -767,9 +771,9 @@
         if (retval)
                 return retval;
 
- old_fsuid = current->fsuid;
+ old_fsuid = current_fsuid();
         if (uid == current->uid || uid == current->euid ||
- uid == current->suid || uid == current->fsuid ||
+ uid == current->suid || uid == current_fsuid() ||
             capable(CAP_SETUID))
         {
                 if (uid != old_fsuid)
@@ -777,7 +781,7 @@
                         current->mm->dumpable = 0;
                         wmb();
                 }
- current->fsuid = uid;
+ current_setfsuid(uid);
         }
 
         retval = security_ops->task_post_setuid(old_fsuid, (uid_t)-1, (uid_t)-1, LSM_SETID_FS);
@@ -799,9 +803,9 @@
         if (retval)
                 return retval;
 
- old_fsgid = current->fsgid;
+ old_fsgid = current_fsgid();
         if (gid == current->gid || gid == current->egid ||
- gid == current->sgid || gid == current->fsgid ||
+ gid == current->sgid || gid == current_fsgid() ||
             capable(CAP_SETGID))
         {
                 if (gid != old_fsgid)
@@ -809,7 +813,7 @@
                         current->mm->dumpable = 0;
                         wmb();
                 }
- current->fsgid = gid;
+ current_setfsgid(gid);
         }
         return old_fsgid;
 }
@@ -989,7 +993,7 @@
 
         if (gidsetsize < 0)
                 return -EINVAL;
- i = current->ngroups;
+ i = current_ngroups();
         if (gidsetsize) {
                 if (i > gidsetsize)
                         return -EINVAL;
@@ -1025,7 +1029,7 @@
 
 static int supplemental_group_member(gid_t grp)
 {
- int i = current->ngroups;
+ int i = current_ngroups();
 
         if (i) {
                 gid_t *groups = current->groups;
@@ -1045,7 +1049,7 @@
 int in_group_p(gid_t grp)
 {
         int retval = 1;
- if (grp != current->fsgid)
+ if (grp != current_fsgid())
                 retval = supplemental_group_member(grp);
         return retval;
 }
diff -u --recursive --new-file linux-2.5.32/kernel/uid16.c linux-2.5.32-cred1/kernel/uid16.c
--- linux-2.5.32/kernel/uid16.c Sat Jul 20 01:00:55 2002
+++ linux-2.5.32-cred1/kernel/uid16.c Wed Aug 28 23:44:41 2002
@@ -114,7 +114,7 @@
 
         if (gidsetsize < 0)
                 return -EINVAL;
- i = current->ngroups;
+ i = current_ngroups();
         if (gidsetsize) {
                 if (i > gidsetsize)
                         return -EINVAL;
diff -u --recursive --new-file linux-2.5.32/mm/shmem.c linux-2.5.32-cred1/mm/shmem.c
--- linux-2.5.32/mm/shmem.c Wed Aug 14 03:09:12 2002
+++ linux-2.5.32-cred1/mm/shmem.c Wed Aug 28 23:44:41 2002
@@ -783,8 +783,8 @@
         inode = new_inode(sb);
         if (inode) {
                 inode->i_mode = mode;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
                 inode->i_blksize = PAGE_CACHE_SIZE;
                 inode->i_blocks = 0;
                 inode->i_rdev = NODEV;
@@ -1408,8 +1408,8 @@
         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 = current_fsuid();
+ gid_t gid = current_fsgid();
         struct shmem_sb_info *sbinfo;
         struct sysinfo si;
         int err;
diff -u --recursive --new-file linux-2.5.32/net/socket.c linux-2.5.32-cred1/net/socket.c
--- linux-2.5.32/net/socket.c Mon Jul 29 07:54:49 2002
+++ linux-2.5.32-cred1/net/socket.c Wed Aug 28 23:44:41 2002
@@ -470,8 +470,8 @@
 
         inode->i_mode = S_IFSOCK|S_IRWXUGO;
         inode->i_sock = 1;
- inode->i_uid = current->fsuid;
- inode->i_gid = current->fsgid;
+ inode->i_uid = current_fsuid();
+ inode->i_gid = current_fsgid();
 
         sockets_in_use[smp_processor_id()].counter++;
         return sock;
diff -u --recursive --new-file linux-2.5.32/net/sunrpc/auth_unix.c linux-2.5.32-cred1/net/sunrpc/auth_unix.c
--- linux-2.5.32/net/sunrpc/auth_unix.c Tue Feb 5 16:23:07 2002
+++ linux-2.5.32-cred1/net/sunrpc/auth_unix.c Wed Aug 28 23:44:41 2002
@@ -80,14 +80,14 @@
                 cred->uc_gid = cred->uc_fsgid = 0;
                 cred->uc_gids[0] = NOGROUP;
         } else {
- int groups = current->ngroups;
+ int groups = current_ngroups();
                 if (groups > NFS_NGROUPS)
                         groups = NFS_NGROUPS;
 
                 cred->uc_uid = current->uid;
                 cred->uc_gid = current->gid;
- cred->uc_fsuid = current->fsuid;
- cred->uc_fsgid = current->fsgid;
+ cred->uc_fsuid = current_fsuid();
+ cred->uc_fsgid = current_fsgid();
                 for (i = 0; i < groups; i++)
                         cred->uc_gids[i] = (gid_t) current->groups[i];
                 if (i < NFS_NGROUPS)
@@ -142,11 +142,11 @@
 
                 if (cred->uc_uid != current->uid
                  || cred->uc_gid != current->gid
- || cred->uc_fsuid != current->fsuid
- || cred->uc_fsgid != current->fsgid)
+ || cred->uc_fsuid != current_fsuid()
+ || cred->uc_fsgid != current_fsgid())
                         return 0;
 
- groups = current->ngroups;
+ groups = current_ngroups();
                 if (groups > NFS_NGROUPS)
                         groups = NFS_NGROUPS;
                 for (i = 0; i < groups ; i++)
diff -u --recursive --new-file linux-2.5.32/net/sunrpc/sched.c linux-2.5.32-cred1/net/sunrpc/sched.c
--- linux-2.5.32/net/sunrpc/sched.c Sun Jul 7 19:50:03 2002
+++ linux-2.5.32-cred1/net/sunrpc/sched.c Wed Aug 28 23:44:41 2002
@@ -750,7 +750,7 @@
         task->tk_flags = flags;
         task->tk_exit = callback;
         init_waitqueue_head(&task->tk_wait);
- if (current->uid != current->fsuid || current->gid != current->fsgid)
+ if (current->uid != current_fsuid() || current->gid != current_fsgid())
                 task->tk_flags |= RPC_TASK_SETUID;
 
         /* Initialize retry counters */
diff -u --recursive --new-file linux-2.5.32/security/capability.c linux-2.5.32-cred1/security/capability.c
--- linux-2.5.32/security/capability.c Tue Jul 30 00:44:17 2002
+++ linux-2.5.32-cred1/security/capability.c Wed Aug 28 23:44:41 2002
@@ -583,11 +583,11 @@
                          */
 
                         if (!issecure (SECURE_NO_SETUID_FIXUP)) {
- if (old_fsuid == 0 && current->fsuid != 0) {
+ if (old_fsuid == 0 && current_fsuid() != 0) {
                                         cap_t (current->cap_effective) &=
                                             ~CAP_FS_MASK;
                                 }
- if (old_fsuid != 0 && current->fsuid == 0) {
+ if (old_fsuid != 0 && current_fsuid() == 0) {
                                         cap_t (current->cap_effective) |=
                                             (cap_t (current->cap_permitted) &
                                              CAP_FS_MASK);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Aug 31 2002 - 22:00:32 EST