Commit d76b0d9b2d87cfc95686e148767cbf7d0e22bdc0

Authored by David Howells
Committed by James Morris
1 parent 1d045980e1

CRED: Use creds in file structs

Attach creds to file structs and discard f_uid/f_gid.

file_operations::open() methods (such as hppfs_open()) should use file->f_cred
rather than current_cred().  At the moment file->f_cred will be current_cred()
at this point.

Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: James Morris <jmorris@namei.org>
Signed-off-by: James Morris <jmorris@namei.org>

Showing 11 changed files with 31 additions and 27 deletions Side-by-side Diff

arch/mips/kernel/vpe.c
... ... @@ -1085,8 +1085,8 @@
1085 1085 v->load_addr = NULL;
1086 1086 v->len = 0;
1087 1087  
1088   - v->uid = filp->f_uid;
1089   - v->gid = filp->f_gid;
  1088 + v->uid = filp->f_cred->fsuid;
  1089 + v->gid = filp->f_cred->fsgid;
1090 1090  
1091 1091 #ifdef CONFIG_MIPS_APSP_KSPD
1092 1092 /* get kspd to tell us when a syscall_exit happens */
drivers/isdn/hysdn/hysdn_procconf.c
... ... @@ -246,7 +246,8 @@
246 246 }
247 247 if (card->debug_flags & (LOG_PROC_OPEN | LOG_PROC_ALL))
248 248 hysdn_addlog(card, "config open for uid=%d gid=%d mode=0x%x",
249   - filep->f_uid, filep->f_gid, filep->f_mode);
  249 + filep->f_cred->fsuid, filep->f_cred->fsgid,
  250 + filep->f_mode);
250 251  
251 252 if ((filep->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_WRITE) {
252 253 /* write only access -> write boot file or conf line */
... ... @@ -331,7 +332,8 @@
331 332 }
332 333 if (card->debug_flags & (LOG_PROC_OPEN | LOG_PROC_ALL))
333 334 hysdn_addlog(card, "config close for uid=%d gid=%d mode=0x%x",
334   - filep->f_uid, filep->f_gid, filep->f_mode);
  335 + filep->f_cred->fsuid, filep->f_cred->fsgid,
  336 + filep->f_mode);
335 337  
336 338 if ((filep->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_WRITE) {
337 339 /* write only access -> write boot file or conf line */
... ... @@ -174,7 +174,7 @@
174 174 BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC);
175 175  
176 176 err = venus_close(coda_inode->i_sb, coda_i2f(coda_inode),
177   - coda_flags, coda_file->f_uid);
  177 + coda_flags, coda_file->f_cred->fsuid);
178 178  
179 179 host_inode = cfi->cfi_container->f_path.dentry->d_inode;
180 180 cii = ITOC(coda_inode);
... ... @@ -36,7 +36,9 @@
36 36  
37 37 static inline void file_free_rcu(struct rcu_head *head)
38 38 {
39   - struct file *f = container_of(head, struct file, f_u.fu_rcuhead);
  39 + struct file *f = container_of(head, struct file, f_u.fu_rcuhead);
  40 +
  41 + put_cred(f->f_cred);
40 42 kmem_cache_free(filp_cachep, f);
41 43 }
42 44  
... ... @@ -121,8 +123,7 @@
121 123 INIT_LIST_HEAD(&f->f_u.fu_list);
122 124 atomic_long_set(&f->f_count, 1);
123 125 rwlock_init(&f->f_owner.lock);
124   - f->f_uid = cred->fsuid;
125   - f->f_gid = cred->fsgid;
  126 + f->f_cred = get_cred(cred);
126 127 eventpoll_init_file(f);
127 128 /* f->f_version: 0 */
128 129 return f;
... ... @@ -426,7 +426,7 @@
426 426  
427 427 static int hppfs_open(struct inode *inode, struct file *file)
428 428 {
429   - const struct cred *cred = current_cred();
  429 + const struct cred *cred = file->f_cred;
430 430 struct hppfs_private *data;
431 431 struct vfsmount *proc_mnt;
432 432 struct dentry *proc_dentry;
... ... @@ -490,7 +490,7 @@
490 490  
491 491 static int hppfs_dir_open(struct inode *inode, struct file *file)
492 492 {
493   - const struct cred *cred = current_cred();
  493 + const struct cred *cred = file->f_cred;
494 494 struct hppfs_private *data;
495 495 struct vfsmount *proc_mnt;
496 496 struct dentry *proc_dentry;
... ... @@ -827,7 +827,7 @@
827 827 fmode_t f_mode;
828 828 loff_t f_pos;
829 829 struct fown_struct f_owner;
830   - unsigned int f_uid, f_gid;
  830 + const struct cred *f_cred;
831 831 struct file_ra_state f_ra;
832 832  
833 833 u64 f_version;
net/ipv4/netfilter/ipt_LOG.c
... ... @@ -340,8 +340,8 @@
340 340 read_lock_bh(&skb->sk->sk_callback_lock);
341 341 if (skb->sk->sk_socket && skb->sk->sk_socket->file)
342 342 printk("UID=%u GID=%u ",
343   - skb->sk->sk_socket->file->f_uid,
344   - skb->sk->sk_socket->file->f_gid);
  343 + skb->sk->sk_socket->file->f_cred->fsuid,
  344 + skb->sk->sk_socket->file->f_cred->fsgid);
345 345 read_unlock_bh(&skb->sk->sk_callback_lock);
346 346 }
347 347  
net/ipv6/netfilter/ip6t_LOG.c
... ... @@ -364,8 +364,8 @@
364 364 read_lock_bh(&skb->sk->sk_callback_lock);
365 365 if (skb->sk->sk_socket && skb->sk->sk_socket->file)
366 366 printk("UID=%u GID=%u ",
367   - skb->sk->sk_socket->file->f_uid,
368   - skb->sk->sk_socket->file->f_gid);
  367 + skb->sk->sk_socket->file->f_cred->fsuid,
  368 + skb->sk->sk_socket->file->f_cred->fsgid);
369 369 read_unlock_bh(&skb->sk->sk_callback_lock);
370 370 }
371 371  
net/netfilter/nfnetlink_log.c
... ... @@ -474,8 +474,9 @@
474 474 if (skb->sk) {
475 475 read_lock_bh(&skb->sk->sk_callback_lock);
476 476 if (skb->sk->sk_socket && skb->sk->sk_socket->file) {
477   - __be32 uid = htonl(skb->sk->sk_socket->file->f_uid);
478   - __be32 gid = htonl(skb->sk->sk_socket->file->f_gid);
  477 + struct file *file = skb->sk->sk_socket->file;
  478 + __be32 uid = htonl(file->f_cred->fsuid);
  479 + __be32 gid = htonl(file->f_cred->fsgid);
479 480 /* need to unlock here since NLA_PUT may goto */
480 481 read_unlock_bh(&skb->sk->sk_callback_lock);
481 482 NLA_PUT_BE32(inst->skb, NFULA_UID, uid);
net/netfilter/xt_owner.c
... ... @@ -34,12 +34,12 @@
34 34 return false;
35 35  
36 36 if (info->match & IPT_OWNER_UID)
37   - if ((filp->f_uid != info->uid) ^
  37 + if ((filp->f_cred->fsuid != info->uid) ^
38 38 !!(info->invert & IPT_OWNER_UID))
39 39 return false;
40 40  
41 41 if (info->match & IPT_OWNER_GID)
42   - if ((filp->f_gid != info->gid) ^
  42 + if ((filp->f_cred->fsgid != info->gid) ^
43 43 !!(info->invert & IPT_OWNER_GID))
44 44 return false;
45 45  
46 46  
... ... @@ -60,12 +60,12 @@
60 60 return false;
61 61  
62 62 if (info->match & IP6T_OWNER_UID)
63   - if ((filp->f_uid != info->uid) ^
  63 + if ((filp->f_cred->fsuid != info->uid) ^
64 64 !!(info->invert & IP6T_OWNER_UID))
65 65 return false;
66 66  
67 67 if (info->match & IP6T_OWNER_GID)
68   - if ((filp->f_gid != info->gid) ^
  68 + if ((filp->f_cred->fsgid != info->gid) ^
69 69 !!(info->invert & IP6T_OWNER_GID))
70 70 return false;
71 71  
72 72  
... ... @@ -93,14 +93,14 @@
93 93 (XT_OWNER_UID | XT_OWNER_GID)) == 0;
94 94  
95 95 if (info->match & XT_OWNER_UID)
96   - if ((filp->f_uid >= info->uid_min &&
97   - filp->f_uid <= info->uid_max) ^
  96 + if ((filp->f_cred->fsuid >= info->uid_min &&
  97 + filp->f_cred->fsuid <= info->uid_max) ^
98 98 !(info->invert & XT_OWNER_UID))
99 99 return false;
100 100  
101 101 if (info->match & XT_OWNER_GID)
102   - if ((filp->f_gid >= info->gid_min &&
103   - filp->f_gid <= info->gid_max) ^
  102 + if ((filp->f_cred->fsgid >= info->gid_min &&
  103 + filp->f_cred->fsgid <= info->gid_max) ^
104 104 !(info->invert & XT_OWNER_GID))
105 105 return false;
106 106  
net/sched/cls_flow.c
... ... @@ -260,14 +260,14 @@
260 260 static u32 flow_get_skuid(const struct sk_buff *skb)
261 261 {
262 262 if (skb->sk && skb->sk->sk_socket && skb->sk->sk_socket->file)
263   - return skb->sk->sk_socket->file->f_uid;
  263 + return skb->sk->sk_socket->file->f_cred->fsuid;
264 264 return 0;
265 265 }
266 266  
267 267 static u32 flow_get_skgid(const struct sk_buff *skb)
268 268 {
269 269 if (skb->sk && skb->sk->sk_socket && skb->sk->sk_socket->file)
270   - return skb->sk->sk_socket->file->f_gid;
  270 + return skb->sk->sk_socket->file->f_cred->fsgid;
271 271 return 0;
272 272 }
273 273