aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/svcauth_unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/svcauth_unix.c')
-rw-r--r--net/sunrpc/svcauth_unix.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
index faf17195a9fd..bdea0a1b6d1d 100644
--- a/net/sunrpc/svcauth_unix.c
+++ b/net/sunrpc/svcauth_unix.c
@@ -470,7 +470,7 @@ static void unix_gid_request(struct cache_detail *cd,
470 char tuid[20]; 470 char tuid[20];
471 struct unix_gid *ug = container_of(h, struct unix_gid, h); 471 struct unix_gid *ug = container_of(h, struct unix_gid, h);
472 472
473 snprintf(tuid, 20, "%u", ug->uid); 473 snprintf(tuid, 20, "%u", from_kuid(&init_user_ns, ug->uid));
474 qword_add(bpp, blen, tuid); 474 qword_add(bpp, blen, tuid);
475 (*bpp)[-1] = '\n'; 475 (*bpp)[-1] = '\n';
476} 476}
@@ -486,7 +486,8 @@ static int unix_gid_parse(struct cache_detail *cd,
486 char *mesg, int mlen) 486 char *mesg, int mlen)
487{ 487{
488 /* uid expiry Ngid gid0 gid1 ... gidN-1 */ 488 /* uid expiry Ngid gid0 gid1 ... gidN-1 */
489 int uid; 489 int id;
490 kuid_t uid;
490 int gids; 491 int gids;
491 int rv; 492 int rv;
492 int i; 493 int i;
@@ -498,9 +499,12 @@ static int unix_gid_parse(struct cache_detail *cd,
498 return -EINVAL; 499 return -EINVAL;
499 mesg[mlen-1] = 0; 500 mesg[mlen-1] = 0;
500 501
501 rv = get_int(&mesg, &uid); 502 rv = get_int(&mesg, &id);
502 if (rv) 503 if (rv)
503 return -EINVAL; 504 return -EINVAL;
505 uid = make_kuid(&init_user_ns, id);
506 if (!uid_valid(uid))
507 return -EINVAL;
504 ug.uid = uid; 508 ug.uid = uid;
505 509
506 expiry = get_expiry(&mesg); 510 expiry = get_expiry(&mesg);
@@ -554,7 +558,7 @@ static int unix_gid_show(struct seq_file *m,
554 struct cache_detail *cd, 558 struct cache_detail *cd,
555 struct cache_head *h) 559 struct cache_head *h)
556{ 560{
557 struct user_namespace *user_ns = current_user_ns(); 561 struct user_namespace *user_ns = &init_user_ns;
558 struct unix_gid *ug; 562 struct unix_gid *ug;
559 int i; 563 int i;
560 int glen; 564 int glen;
@@ -570,7 +574,7 @@ static int unix_gid_show(struct seq_file *m,
570 else 574 else
571 glen = 0; 575 glen = 0;
572 576
573 seq_printf(m, "%u %d:", ug->uid, glen); 577 seq_printf(m, "%u %d:", from_kuid_munged(user_ns, ug->uid), glen);
574 for (i = 0; i < glen; i++) 578 for (i = 0; i < glen; i++)
575 seq_printf(m, " %d", from_kgid_munged(user_ns, GROUP_AT(ug->gi, i))); 579 seq_printf(m, " %d", from_kgid_munged(user_ns, GROUP_AT(ug->gi, i)));
576 seq_printf(m, "\n"); 580 seq_printf(m, "\n");