aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2013-01-29 19:18:50 -0500
committerEric W. Biederman <ebiederm@xmission.com>2013-02-12 06:19:31 -0500
commit447c50943fd008755122c7a62bac068e73c1cf2c (patch)
tree426cd65ce6dc68aebd9185602560c7c30eb48272
parentf791f7c5e354870eaa5e31c4038c6723683283f1 (diff)
9p: Modify the stat structures to use kuid_t and kgid_t
9p has thre strucrtures that can encode inode stat information. Modify all of those structures to contain kuid_t and kgid_t values. Modify he wire encoders and decoders of those structures to use 'u' and 'g' instead of 'd' in the format string where uids and gids are present. This results in all kuid and kgid conversion to and from on the wire values being performed by the same code in protocol.c where the client is known at the time of the conversion. Cc: Eric Van Hensbergen <ericvh@gmail.com> Cc: Ron Minnich <rminnich@gmail.com> Cc: Latchesar Ionkov <lucho@ionkov.net> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-rw-r--r--fs/9p/vfs_inode.c6
-rw-r--r--include/net/9p/9p.h14
-rw-r--r--net/9p/client.c18
-rw-r--r--net/9p/protocol.c13
4 files changed, 30 insertions, 21 deletions
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index 890bed538f9b..1581fe218934 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -228,9 +228,9 @@ v9fs_blank_wstat(struct p9_wstat *wstat)
228 wstat->uid = NULL; 228 wstat->uid = NULL;
229 wstat->gid = NULL; 229 wstat->gid = NULL;
230 wstat->muid = NULL; 230 wstat->muid = NULL;
231 wstat->n_uid = ~0; 231 wstat->n_uid = INVALID_UID;
232 wstat->n_gid = ~0; 232 wstat->n_gid = INVALID_GID;
233 wstat->n_muid = ~0; 233 wstat->n_muid = INVALID_UID;
234 wstat->extension = NULL; 234 wstat->extension = NULL;
235} 235}
236 236
diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h
index 7184853ca360..27dfe85772b1 100644
--- a/include/net/9p/9p.h
+++ b/include/net/9p/9p.h
@@ -407,17 +407,17 @@ struct p9_wstat {
407 char *gid; 407 char *gid;
408 char *muid; 408 char *muid;
409 char *extension; /* 9p2000.u extensions */ 409 char *extension; /* 9p2000.u extensions */
410 u32 n_uid; /* 9p2000.u extensions */ 410 kuid_t n_uid; /* 9p2000.u extensions */
411 u32 n_gid; /* 9p2000.u extensions */ 411 kgid_t n_gid; /* 9p2000.u extensions */
412 u32 n_muid; /* 9p2000.u extensions */ 412 kuid_t n_muid; /* 9p2000.u extensions */
413}; 413};
414 414
415struct p9_stat_dotl { 415struct p9_stat_dotl {
416 u64 st_result_mask; 416 u64 st_result_mask;
417 struct p9_qid qid; 417 struct p9_qid qid;
418 u32 st_mode; 418 u32 st_mode;
419 u32 st_uid; 419 kuid_t st_uid;
420 u32 st_gid; 420 kgid_t st_gid;
421 u64 st_nlink; 421 u64 st_nlink;
422 u64 st_rdev; 422 u64 st_rdev;
423 u64 st_size; 423 u64 st_size;
@@ -471,8 +471,8 @@ struct p9_stat_dotl {
471struct p9_iattr_dotl { 471struct p9_iattr_dotl {
472 u32 valid; 472 u32 valid;
473 u32 mode; 473 u32 mode;
474 u32 uid; 474 kuid_t uid;
475 u32 gid; 475 kgid_t gid;
476 u64 size; 476 u64 size;
477 u64 atime_sec; 477 u64 atime_sec;
478 u64 atime_nsec; 478 u64 atime_nsec;
diff --git a/net/9p/client.c b/net/9p/client.c
index 17855f080acd..8eb75425e6e6 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -1711,7 +1711,9 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid)
1711 (unsigned long long)ret->qid.path, ret->qid.version, ret->mode, 1711 (unsigned long long)ret->qid.path, ret->qid.version, ret->mode,
1712 ret->atime, ret->mtime, (unsigned long long)ret->length, 1712 ret->atime, ret->mtime, (unsigned long long)ret->length,
1713 ret->name, ret->uid, ret->gid, ret->muid, ret->extension, 1713 ret->name, ret->uid, ret->gid, ret->muid, ret->extension,
1714 ret->n_uid, ret->n_gid, ret->n_muid); 1714 from_kuid(&init_user_ns, ret->n_uid),
1715 from_kgid(&init_user_ns, ret->n_gid),
1716 from_kuid(&init_user_ns, ret->n_muid));
1715 1717
1716 p9_free_req(clnt, req); 1718 p9_free_req(clnt, req);
1717 return ret; 1719 return ret;
@@ -1765,8 +1767,10 @@ struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid,
1765 "<<< st_btime_sec=%lld st_btime_nsec=%lld\n" 1767 "<<< st_btime_sec=%lld st_btime_nsec=%lld\n"
1766 "<<< st_gen=%lld st_data_version=%lld", 1768 "<<< st_gen=%lld st_data_version=%lld",
1767 ret->st_result_mask, ret->qid.type, ret->qid.path, 1769 ret->st_result_mask, ret->qid.type, ret->qid.path,
1768 ret->qid.version, ret->st_mode, ret->st_nlink, ret->st_uid, 1770 ret->qid.version, ret->st_mode, ret->st_nlink,
1769 ret->st_gid, ret->st_rdev, ret->st_size, ret->st_blksize, 1771 from_kuid(&init_user_ns, ret->st_uid),
1772 from_kgid(&init_user_ns, ret->st_gid),
1773 ret->st_rdev, ret->st_size, ret->st_blksize,
1770 ret->st_blocks, ret->st_atime_sec, ret->st_atime_nsec, 1774 ret->st_blocks, ret->st_atime_sec, ret->st_atime_nsec,
1771 ret->st_mtime_sec, ret->st_mtime_nsec, ret->st_ctime_sec, 1775 ret->st_mtime_sec, ret->st_mtime_nsec, ret->st_ctime_sec,
1772 ret->st_ctime_nsec, ret->st_btime_sec, ret->st_btime_nsec, 1776 ret->st_ctime_nsec, ret->st_btime_sec, ret->st_btime_nsec,
@@ -1829,7 +1833,9 @@ int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst)
1829 (unsigned long long)wst->qid.path, wst->qid.version, wst->mode, 1833 (unsigned long long)wst->qid.path, wst->qid.version, wst->mode,
1830 wst->atime, wst->mtime, (unsigned long long)wst->length, 1834 wst->atime, wst->mtime, (unsigned long long)wst->length,
1831 wst->name, wst->uid, wst->gid, wst->muid, wst->extension, 1835 wst->name, wst->uid, wst->gid, wst->muid, wst->extension,
1832 wst->n_uid, wst->n_gid, wst->n_muid); 1836 from_kuid(&init_user_ns, wst->n_uid),
1837 from_kgid(&init_user_ns, wst->n_gid),
1838 from_kuid(&init_user_ns, wst->n_muid));
1833 1839
1834 req = p9_client_rpc(clnt, P9_TWSTAT, "dwS", fid->fid, wst->size+2, wst); 1840 req = p9_client_rpc(clnt, P9_TWSTAT, "dwS", fid->fid, wst->size+2, wst);
1835 if (IS_ERR(req)) { 1841 if (IS_ERR(req)) {
@@ -1858,7 +1864,9 @@ int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *p9attr)
1858 " valid=%x mode=%x uid=%d gid=%d size=%lld\n" 1864 " valid=%x mode=%x uid=%d gid=%d size=%lld\n"
1859 " atime_sec=%lld atime_nsec=%lld\n" 1865 " atime_sec=%lld atime_nsec=%lld\n"
1860 " mtime_sec=%lld mtime_nsec=%lld\n", 1866 " mtime_sec=%lld mtime_nsec=%lld\n",
1861 p9attr->valid, p9attr->mode, p9attr->uid, p9attr->gid, 1867 p9attr->valid, p9attr->mode,
1868 from_kuid(&init_user_ns, p9attr->uid),
1869 from_kgid(&init_user_ns, p9attr->gid),
1862 p9attr->size, p9attr->atime_sec, p9attr->atime_nsec, 1870 p9attr->size, p9attr->atime_sec, p9attr->atime_nsec,
1863 p9attr->mtime_sec, p9attr->mtime_nsec); 1871 p9attr->mtime_sec, p9attr->mtime_nsec);
1864 1872
diff --git a/net/9p/protocol.c b/net/9p/protocol.c
index c289c6cee98e..ab9127ec5b7a 100644
--- a/net/9p/protocol.c
+++ b/net/9p/protocol.c
@@ -199,11 +199,12 @@ p9pdu_vreadf(struct p9_fcall *pdu, int proto_version, const char *fmt,
199 va_arg(ap, struct p9_wstat *); 199 va_arg(ap, struct p9_wstat *);
200 200
201 memset(stbuf, 0, sizeof(struct p9_wstat)); 201 memset(stbuf, 0, sizeof(struct p9_wstat));
202 stbuf->n_uid = stbuf->n_gid = stbuf->n_muid = 202 stbuf->n_uid = stbuf->n_muid = INVALID_UID;
203 -1; 203 stbuf->n_gid = INVALID_GID;
204
204 errcode = 205 errcode =
205 p9pdu_readf(pdu, proto_version, 206 p9pdu_readf(pdu, proto_version,
206 "wwdQdddqssss?sddd", 207 "wwdQdddqssss?sugu",
207 &stbuf->size, &stbuf->type, 208 &stbuf->size, &stbuf->type,
208 &stbuf->dev, &stbuf->qid, 209 &stbuf->dev, &stbuf->qid,
209 &stbuf->mode, &stbuf->atime, 210 &stbuf->mode, &stbuf->atime,
@@ -316,7 +317,7 @@ p9pdu_vreadf(struct p9_fcall *pdu, int proto_version, const char *fmt,
316 memset(stbuf, 0, sizeof(struct p9_stat_dotl)); 317 memset(stbuf, 0, sizeof(struct p9_stat_dotl));
317 errcode = 318 errcode =
318 p9pdu_readf(pdu, proto_version, 319 p9pdu_readf(pdu, proto_version,
319 "qQdddqqqqqqqqqqqqqqq", 320 "qQdugqqqqqqqqqqqqqqq",
320 &stbuf->st_result_mask, 321 &stbuf->st_result_mask,
321 &stbuf->qid, 322 &stbuf->qid,
322 &stbuf->st_mode, 323 &stbuf->st_mode,
@@ -426,7 +427,7 @@ p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt,
426 va_arg(ap, const struct p9_wstat *); 427 va_arg(ap, const struct p9_wstat *);
427 errcode = 428 errcode =
428 p9pdu_writef(pdu, proto_version, 429 p9pdu_writef(pdu, proto_version,
429 "wwdQdddqssss?sddd", 430 "wwdQdddqssss?sugu",
430 stbuf->size, stbuf->type, 431 stbuf->size, stbuf->type,
431 stbuf->dev, &stbuf->qid, 432 stbuf->dev, &stbuf->qid,
432 stbuf->mode, stbuf->atime, 433 stbuf->mode, stbuf->atime,
@@ -504,7 +505,7 @@ p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt,
504 struct p9_iattr_dotl *); 505 struct p9_iattr_dotl *);
505 506
506 errcode = p9pdu_writef(pdu, proto_version, 507 errcode = p9pdu_writef(pdu, proto_version,
507 "ddddqqqqq", 508 "ddugqqqqq",
508 p9attr->valid, 509 p9attr->valid,
509 p9attr->mode, 510 p9attr->mode,
510 p9attr->uid, 511 p9attr->uid,