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

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

nfsd: fix encode_entryplus_baggage stack usage



We stick an extra svc_fh in nfsd3_readdirres to save the need to
kmalloc, though maybe it would be fine to kmalloc instead.

Acked-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 3554116d
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -842,21 +842,21 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,

static __be32 *encode_entryplus_baggage(struct nfsd3_readdirres *cd, __be32 *p, const char *name, int namlen)
{
	struct svc_fh	fh;
	struct svc_fh	*fh = &cd->scratch;
	__be32 err;

	fh_init(&fh, NFS3_FHSIZE);
	err = compose_entry_fh(cd, &fh, name, namlen);
	fh_init(fh, NFS3_FHSIZE);
	err = compose_entry_fh(cd, fh, name, namlen);
	if (err) {
		*p++ = 0;
		*p++ = 0;
		goto out;
	}
	p = encode_post_op_attr(cd->rqstp, p, &fh);
	p = encode_post_op_attr(cd->rqstp, p, fh);
	*p++ = xdr_one;			/* yes, a file handle follows */
	p = encode_fh(p, &fh);
	p = encode_fh(p, fh);
out:
	fh_put(&fh);
	fh_put(fh);
	return p;
}

+3 −0
Original line number Diff line number Diff line
@@ -174,6 +174,9 @@ struct nfsd3_linkres {
struct nfsd3_readdirres {
	__be32			status;
	struct svc_fh		fh;
	/* Just to save kmalloc on every readdirplus entry (svc_fh is a
	 * little large for the stack): */
	struct svc_fh		scratch;
	int			count;
	__be32			verf[2];