Commit d76b0d9b2d87cfc95686e148767cbf7d0e22bdc0
Committed by
James Morris
1 parent
1d045980e1
Exists in
master
and in
4 other branches
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 */ |
fs/coda/file.c
... | ... | @@ -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); |
fs/file_table.c
... | ... | @@ -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; |
fs/hppfs/hppfs.c
... | ... | @@ -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; |
include/linux/fs.h
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 |