Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6af99ec authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

nfsd4: name->id mapping should fail with BADOWNER not BADNAME



According to rfc 3530 BADNAME is for strings that represent paths;
BADOWNER is for user/group names that don't map.

And the too-long name should probably be BADOWNER as well; it's
effectively the same as if we couldn't map it.

Cc: stable@kernel.org
Reported-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Reported-by: default avatarSimon Kirby <sim@hostway.ca>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 255c7cf8
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -524,13 +524,13 @@ idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen
	int ret;
	int ret;


	if (namelen + 1 > sizeof(key.name))
	if (namelen + 1 > sizeof(key.name))
		return -EINVAL;
		return -ESRCH; /* nfserr_badowner */
	memcpy(key.name, name, namelen);
	memcpy(key.name, name, namelen);
	key.name[namelen] = '\0';
	key.name[namelen] = '\0';
	strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
	strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
	ret = idmap_lookup(rqstp, nametoid_lookup, &key, &nametoid_cache, &item);
	ret = idmap_lookup(rqstp, nametoid_lookup, &key, &nametoid_cache, &item);
	if (ret == -ENOENT)
	if (ret == -ENOENT)
		ret = -ESRCH; /* nfserr_badname */
		ret = -ESRCH; /* nfserr_badowner */
	if (ret)
	if (ret)
		return ret;
		return ret;
	*id = item->id;
	*id = item->id;
+1 −0
Original line number Original line Diff line number Diff line
@@ -158,6 +158,7 @@ void nfsd_lockd_shutdown(void);
#define	nfserr_attrnotsupp	cpu_to_be32(NFSERR_ATTRNOTSUPP)
#define	nfserr_attrnotsupp	cpu_to_be32(NFSERR_ATTRNOTSUPP)
#define	nfserr_bad_xdr		cpu_to_be32(NFSERR_BAD_XDR)
#define	nfserr_bad_xdr		cpu_to_be32(NFSERR_BAD_XDR)
#define	nfserr_openmode		cpu_to_be32(NFSERR_OPENMODE)
#define	nfserr_openmode		cpu_to_be32(NFSERR_OPENMODE)
#define	nfserr_badowner		cpu_to_be32(NFSERR_BADOWNER)
#define	nfserr_locks_held	cpu_to_be32(NFSERR_LOCKS_HELD)
#define	nfserr_locks_held	cpu_to_be32(NFSERR_LOCKS_HELD)
#define	nfserr_op_illegal	cpu_to_be32(NFSERR_OP_ILLEGAL)
#define	nfserr_op_illegal	cpu_to_be32(NFSERR_OP_ILLEGAL)
#define	nfserr_grace		cpu_to_be32(NFSERR_GRACE)
#define	nfserr_grace		cpu_to_be32(NFSERR_GRACE)
+1 −1
Original line number Original line Diff line number Diff line
@@ -738,7 +738,7 @@ nfserrno (int errno)
		{ nfserr_jukebox, -EAGAIN },
		{ nfserr_jukebox, -EAGAIN },
		{ nfserr_jukebox, -EWOULDBLOCK },
		{ nfserr_jukebox, -EWOULDBLOCK },
		{ nfserr_jukebox, -ENOMEM },
		{ nfserr_jukebox, -ENOMEM },
		{ nfserr_badname, -ESRCH },
		{ nfserr_badowner, -ESRCH },
		{ nfserr_io, -ETXTBSY },
		{ nfserr_io, -ETXTBSY },
		{ nfserr_notsupp, -EOPNOTSUPP },
		{ nfserr_notsupp, -EOPNOTSUPP },
		{ nfserr_toosmall, -ETOOSMALL },
		{ nfserr_toosmall, -ETOOSMALL },