mirror of https://gitee.com/openkylin/linux.git
9p: Add 'u' and 'g' format specifies for kuids and kgids
This allows concentrating all of the conversion to and from kuids and kgids into the format needed by the 9p protocol into one location. 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>
This commit is contained in:
parent
d5ea055f1c
commit
97fc8b1ebf
|
@ -85,6 +85,8 @@ pdu_write_u(struct p9_fcall *pdu, const char __user *udata, size_t size)
|
|||
d - int32_t
|
||||
q - int64_t
|
||||
s - string
|
||||
u - numeric uid
|
||||
g - numeric gid
|
||||
S - stat
|
||||
Q - qid
|
||||
D - data blob (int32_t size followed by void *, results are not freed)
|
||||
|
@ -163,6 +165,26 @@ p9pdu_vreadf(struct p9_fcall *pdu, int proto_version, const char *fmt,
|
|||
(*sptr)[len] = 0;
|
||||
}
|
||||
break;
|
||||
case 'u': {
|
||||
kuid_t *uid = va_arg(ap, kuid_t *);
|
||||
__le32 le_val;
|
||||
if (pdu_read(pdu, &le_val, sizeof(le_val))) {
|
||||
errcode = -EFAULT;
|
||||
break;
|
||||
}
|
||||
*uid = make_kuid(&init_user_ns,
|
||||
le32_to_cpu(le_val));
|
||||
} break;
|
||||
case 'g': {
|
||||
kgid_t *gid = va_arg(ap, kgid_t *);
|
||||
__le32 le_val;
|
||||
if (pdu_read(pdu, &le_val, sizeof(le_val))) {
|
||||
errcode = -EFAULT;
|
||||
break;
|
||||
}
|
||||
*gid = make_kgid(&init_user_ns,
|
||||
le32_to_cpu(le_val));
|
||||
} break;
|
||||
case 'Q':{
|
||||
struct p9_qid *qid =
|
||||
va_arg(ap, struct p9_qid *);
|
||||
|
@ -377,6 +399,20 @@ p9pdu_vwritef(struct p9_fcall *pdu, int proto_version, const char *fmt,
|
|||
errcode = -EFAULT;
|
||||
}
|
||||
break;
|
||||
case 'u': {
|
||||
kuid_t uid = va_arg(ap, kuid_t);
|
||||
__le32 val = cpu_to_le32(
|
||||
from_kuid(&init_user_ns, uid));
|
||||
if (pdu_write(pdu, &val, sizeof(val)))
|
||||
errcode = -EFAULT;
|
||||
} break;
|
||||
case 'g': {
|
||||
kgid_t gid = va_arg(ap, kgid_t);
|
||||
__le32 val = cpu_to_le32(
|
||||
from_kgid(&init_user_ns, gid));
|
||||
if (pdu_write(pdu, &val, sizeof(val)))
|
||||
errcode = -EFAULT;
|
||||
} break;
|
||||
case 'Q':{
|
||||
const struct p9_qid *qid =
|
||||
va_arg(ap, const struct p9_qid *);
|
||||
|
|
Loading…
Reference in New Issue