--- linux-2.6.21-rc6/kernel/sys.c +++ linux-2.6.21-rc6-ed/kernel/sys.c @@ -2138,8 +2138,10 @@ asmlinkage long sys_getrusage(int who, s asmlinkage long sys_umask(int mask) { - mask = xchg(¤t->fs->umask, mask & S_IRWXUGO); - return mask; + struct fs_struct *fs = current->fs; + int old = fs->umask; + fs->umask = mask & S_IRWXUGO; + return old; } asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,