From patchwork Fri Nov 13 15:02:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903749 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3D348138B for ; Fri, 13 Nov 2020 15:02:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2232D22201 for ; Fri, 13 Nov 2020 15:02:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ckyoV4VN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726324AbgKMPCc (ORCPT ); Fri, 13 Nov 2020 10:02:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPCc (ORCPT ); Fri, 13 Nov 2020 10:02:32 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D63D5C0613D1 for ; Fri, 13 Nov 2020 07:02:31 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id d9so9003496qke.8 for ; Fri, 13 Nov 2020 07:02:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=lI50/gELjS2rXymyXdCFIVVfAWwxhe722H5bkJzcpsk=; b=ckyoV4VNkU62soH+O/IjwEyqnBMUDQZF0QYg/uoWQAfj/pxCPaZlkQ+zINfCPMwQRW 37QEj3vD8ZUguvArRkMwJTnRE7sTSIjSOtOlRBHe31XZLwBF8FDXEEq/pA8m9P2jyt3V e33ZU3I7/haPbu2lZ7K5VVJHCwBZUP5ATckJFo4q8as3Id+UCsFMu0Q+KFR23Wr7a/5H AIEWnCf/7uul5dn5fl1Wk8RFmUVF/61Cm6ao1JOIyO4BU49S2ZWUdn1WNP5LRg8sfh4w 4YtSnuivgb/P6vJzor3A8HXGU6jGAYb+cIDuYCp3D6hs9xPk9GQJfGwnuNbUPF0e3AA9 PTjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=lI50/gELjS2rXymyXdCFIVVfAWwxhe722H5bkJzcpsk=; b=YPT9naEwLyib962PHM0iHuRf3Zxz8toRZQYCZCTgdURqAHSyebb62eRoywOV1os3OH 1BOVglFL+LuqBZjgMgpRN7L60bWr6fdnnp77sO3ckyjKvVKBzGfWOnXxCSMj5OpJvsvc SvVBAzNicKrLXzwi+tpI3QBFmamGplnWohHFrGvidvWLRrekQqVpd7oREy2sD7eaBL06 77rox2OOjJsPbCmYIqkDNy1X9pBTmV28SJIrWeSSvbWAlxQIyKhBLlsXNjc3WvxYtD25 ONuIr560RGt43v+jNT6O39u41NpVQmNPcY4tR4xRn7OeaBnyXqPwyZ4HP2yYCuIaIDRo FRPQ== X-Gm-Message-State: AOAM530UxDr3tzdTvgKFxJW3O2KlPctsD0VtRV9xY0C9L5sYBS3fW1mv iwLJllBPEoXycODvnZLczpY5S+y/UcE= X-Google-Smtp-Source: ABdhPJzZt3JSanGtWo9UfKgFKFCELIHz2pOl1LF7pYZMR8QTZppQsh7VB2RrL52+mSm81+eVGDSzaA== X-Received: by 2002:a37:7903:: with SMTP id u3mr2298418qkc.226.1605279750765; Fri, 13 Nov 2020 07:02:30 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id 82sm6837386qke.76.2020.11.13.07.02.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:02:30 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF2SK3032640 for ; Fri, 13 Nov 2020 15:02:28 GMT Subject: [PATCH v1 01/61] NFSD: Fix returned READDIR offset cookie From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:02:28 -0500 Message-ID: <160527974881.6186.12322949032060570965.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Code inspection shows that the server's NFSv3 READDIR implementation returns the same offset cookie as the client sent, instead of the last cookie it returns in the reply's dirlist. This is unlike the NFSv2 READDIR, NFSv3 READDIRPLUS, and NFSv4 READDIR implementations, and it's been like this since the beginning of kernel git history. I copied the logic from nfsd3_proc_readdirplus(). Signed-off-by: Chuck Lever --- fs/nfsd/nfs3proc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index d9be589fed15..e0ad18d6b5a8 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c @@ -430,6 +430,7 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp) struct nfsd3_readdirargs *argp = rqstp->rq_argp; struct nfsd3_readdirres *resp = rqstp->rq_resp; int count = 0; + loff_t offset; struct page **p; caddr_t page_addr = NULL; @@ -448,7 +449,9 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp) resp->common.err = nfs_ok; resp->buffer = argp->buffer; resp->rqstp = rqstp; - resp->status = nfsd_readdir(rqstp, &resp->fh, (loff_t *)&argp->cookie, + offset = argp->cookie; + + resp->status = nfsd_readdir(rqstp, &resp->fh, &offset, &resp->common, nfs3svc_encode_entry); memcpy(resp->verf, argp->verf, 8); count = 0; @@ -464,8 +467,6 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp) } resp->count = count >> 2; if (resp->offset) { - loff_t offset = argp->cookie; - if (unlikely(resp->offset1)) { /* we ended up with offset on a page boundary */ *resp->offset = htonl(offset >> 32); From patchwork Fri Nov 13 15:02:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903751 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 260B0138B for ; Fri, 13 Nov 2020 15:02:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EC28522201 for ; Fri, 13 Nov 2020 15:02:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="t5JjrpyH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726336AbgKMPCi (ORCPT ); Fri, 13 Nov 2020 10:02:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPCi (ORCPT ); Fri, 13 Nov 2020 10:02:38 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF12EC0613D1 for ; Fri, 13 Nov 2020 07:02:37 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id 199so9000414qkg.9 for ; Fri, 13 Nov 2020 07:02:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=O8eJ0Y1KoyQq4Rk144FOc+X5PvshmZ/lfJzBBD19NIU=; b=t5JjrpyH7NrEGUpgH8DsEr2pqwUwIxo9FgyzgJB35F+/gHRGQ+Ra0++NLZSsPUfw2U 2u3tG3LCrTG7YB6pKVWK02gXocWYVoQPvdLfYKZ9jAAD+E87nXGBEhJFxDbrSCdHHfGj m/PmICTOeDX/IXZD175RU9oXKNMHng5vyfJbIaAXKBm8mEavT5Bkt3yufC9U4Fz1MyU4 f/2Tf5wdo14bvMNbttlp7qdL/8+FjbtX6SuGx6VNr4DbHREB6L9yQAHOXPMqduyaHvUK qk5ARdSnTR7pQsPh6v2oRX7Nyjr1o/3BAYIogG3X2jrp+ggu8144RuUbL9OTuI9LjB2f k7Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=O8eJ0Y1KoyQq4Rk144FOc+X5PvshmZ/lfJzBBD19NIU=; b=sGKyHpiWt1Yi/0KPiyaYQz4Ll0/Yfg4JE1JcRj32dOz1xyEKFIXsvTfOXgqRhYNPYY 4OBf4uQs3+O09S1YGzG5NnMDgyMH8OI4UhOHN+utRYy0bClWmw17axSZO4h7wDYdYMxI gznEyzOHRBf9bPIjk22mziMGrGlb2la57dUUTxJfiMnu67YEQzZ5G7nbD2AMEzHKWUVd FJzPthGR1G1+DmIuriloGFLtvMjdxxz37jLbI6oLdKVz82++ZtcyJrNFspSOa5tXn2Lu ag1FsLYhGgD0SE/TmhNzBWO79hGRx0e8G3axUJ0oh2dEVgocAhqq6a1IACkJkkiMHikg /o8A== X-Gm-Message-State: AOAM532MDJwBDJSmJ9belf+hWxpCOPYd642Y22J/J27dwTCeI5DnN1QM ZvNSvOpNYDDfo6kkUZgpDHvhLMVpmcM= X-Google-Smtp-Source: ABdhPJzD07fyhXF3cvn02SC4T5ugxs5eKxaXWFTvSTXNOaJzw7ha7AH/5kxsmUnrGv0ULyAaep2PZQ== X-Received: by 2002:a37:8005:: with SMTP id b5mr2328882qkd.419.1605279756002; Fri, 13 Nov 2020 07:02:36 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id d12sm6574015qtp.77.2020.11.13.07.02.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:02:35 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF2YaA032643 for ; Fri, 13 Nov 2020 15:02:34 GMT Subject: [PATCH v1 02/61] SUNRPC: Add xdr_set_scratch_page() and xdr_reset_scratch_buffer() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:02:34 -0500 Message-ID: <160527975415.6186.18157826846650479797.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Clean up: De-duplicate some frequently-used code. Signed-off-by: Chuck Lever --- fs/nfs/blocklayout/blocklayout.c | 2 + fs/nfs/blocklayout/dev.c | 2 + fs/nfs/dir.c | 2 + fs/nfs/filelayout/filelayout.c | 2 + fs/nfs/filelayout/filelayoutdev.c | 2 + fs/nfs/flexfilelayout/flexfilelayout.c | 2 + fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 + fs/nfs/nfs42xdr.c | 2 + fs/nfs/nfs4xdr.c | 6 +--- fs/nfsd/nfs4proc.c | 2 + include/linux/sunrpc/xdr.h | 43 ++++++++++++++++++++++++++++- net/sunrpc/auth_gss/gss_rpc_xdr.c | 2 + net/sunrpc/xdr.c | 28 +++---------------- 13 files changed, 58 insertions(+), 39 deletions(-) diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c index 08108b6d2fa1..3be6836074ae 100644 --- a/fs/nfs/blocklayout/blocklayout.c +++ b/fs/nfs/blocklayout/blocklayout.c @@ -697,7 +697,7 @@ bl_alloc_lseg(struct pnfs_layout_hdr *lo, struct nfs4_layoutget_res *lgr, xdr_init_decode_pages(&xdr, &buf, lgr->layoutp->pages, lgr->layoutp->len); - xdr_set_scratch_buffer(&xdr, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&xdr, scratch); status = -EIO; p = xdr_inline_decode(&xdr, 4); diff --git a/fs/nfs/blocklayout/dev.c b/fs/nfs/blocklayout/dev.c index dec5880ac6de..acb1d22907da 100644 --- a/fs/nfs/blocklayout/dev.c +++ b/fs/nfs/blocklayout/dev.c @@ -510,7 +510,7 @@ bl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, goto out; xdr_init_decode_pages(&xdr, &buf, pdev->pages, pdev->pglen); - xdr_set_scratch_buffer(&xdr, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&xdr, scratch); p = xdr_inline_decode(&xdr, sizeof(__be32)); if (!p) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index cb52db9a0cfb..2b1a680d7f3d 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -576,7 +576,7 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en goto out_nopages; xdr_init_decode_pages(&stream, &buf, xdr_pages, buflen); - xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&stream, scratch); do { if (entry->label) diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c index 7f5aa0403e16..d158a500c25c 100644 --- a/fs/nfs/filelayout/filelayout.c +++ b/fs/nfs/filelayout/filelayout.c @@ -666,7 +666,7 @@ filelayout_decode_layout(struct pnfs_layout_hdr *flo, return -ENOMEM; xdr_init_decode_pages(&stream, &buf, lgr->layoutp->pages, lgr->layoutp->len); - xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&stream, scratch); /* 20 = ufl_util (4), first_stripe_index (4), pattern_offset (8), * num_fh (4) */ diff --git a/fs/nfs/filelayout/filelayoutdev.c b/fs/nfs/filelayout/filelayoutdev.c index d913e818858f..86c3f7e69ec4 100644 --- a/fs/nfs/filelayout/filelayoutdev.c +++ b/fs/nfs/filelayout/filelayoutdev.c @@ -82,7 +82,7 @@ nfs4_fl_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, goto out_err; xdr_init_decode_pages(&stream, &buf, pdev->pages, pdev->pglen); - xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&stream, scratch); /* Get the stripe count (number of stripe index) */ p = xdr_inline_decode(&stream, 4); diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index a163533446fa..d7010686d39a 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -378,7 +378,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh, xdr_init_decode_pages(&stream, &buf, lgr->layoutp->pages, lgr->layoutp->len); - xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&stream, scratch); /* stripe unit and mirror_array_cnt */ rc = -EIO; diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 3eda40a320a5..c9b61b818ec1 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -69,7 +69,7 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, INIT_LIST_HEAD(&dsaddrs); xdr_init_decode_pages(&stream, &buf, pdev->pages, pdev->pglen); - xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(&stream, scratch); /* multipath count */ p = xdr_inline_decode(&stream, 4); diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c index 0dc31ad2362e..a7e513e2ec42 100644 --- a/fs/nfs/nfs42xdr.c +++ b/fs/nfs/nfs42xdr.c @@ -1540,7 +1540,7 @@ static int nfs4_xdr_dec_listxattrs(struct rpc_rqst *rqstp, struct compound_hdr hdr; int status; - xdr_set_scratch_buffer(xdr, page_address(res->scratch), PAGE_SIZE); + xdr_set_scratch_page(xdr, res->scratch); status = decode_compound_hdr(xdr, &hdr); if (status) diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index c6dbfcae7517..2eabe5add344 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -6403,10 +6403,8 @@ nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr, struct compound_hdr hdr; int status; - if (res->acl_scratch != NULL) { - void *p = page_address(res->acl_scratch); - xdr_set_scratch_buffer(xdr, p, PAGE_SIZE); - } + if (res->acl_scratch != NULL) + xdr_set_scratch_page(xdr, res->acl_scratch); status = decode_compound_hdr(xdr, &hdr); if (status) goto out; diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index ad2fa1a8e7ad..5fbda469fbfe 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -2275,7 +2275,7 @@ static void svcxdr_init_encode(struct svc_rqst *rqstp, xdr->end = head->iov_base + PAGE_SIZE - rqstp->rq_auth_slack; /* Tail and page_len should be zero at this point: */ buf->len = buf->head[0].iov_len; - xdr->scratch.iov_len = 0; + xdr_reset_scratch_buffer(xdr); xdr->page_ptr = buf->pages - 1; buf->buflen = PAGE_SIZE * (1 + rqstp->rq_page_end - buf->pages) - rqstp->rq_auth_slack; diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index ec2a22ccdc2a..6e9edb4dcc0f 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h @@ -248,7 +248,6 @@ extern void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst); extern void xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf, struct page **pages, unsigned int len); -extern void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen); extern __be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes); extern unsigned int xdr_read_pages(struct xdr_stream *xdr, unsigned int len); extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len); @@ -256,6 +255,48 @@ extern int xdr_process_buf(struct xdr_buf *buf, unsigned int offset, unsigned in extern uint64_t xdr_align_data(struct xdr_stream *, uint64_t, uint32_t); extern uint64_t xdr_expand_hole(struct xdr_stream *, uint64_t, uint64_t); +/** + * xdr_set_scratch_buffer - Attach a scratch buffer for decoding data. + * @xdr: pointer to xdr_stream struct + * @buf: pointer to an empty buffer + * @buflen: size of 'buf' + * + * The scratch buffer is used when decoding from an array of pages. + * If an xdr_inline_decode() call spans across page boundaries, then + * we copy the data into the scratch buffer in order to allow linear + * access. + */ +static inline void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, + size_t buflen) +{ + xdr->scratch.iov_base = buf; + xdr->scratch.iov_len = buflen; +} + +/** + * xdr_set_scratch_page - Attach a scratch buffer for decoding data + * @xdr: pointer to xdr_stream struct + * @page: an anonymous page + * + * See xdr_set_scratch_buffer(). + */ +static inline void xdr_set_scratch_page(struct xdr_stream *xdr, + struct page *page) +{ + xdr_set_scratch_buffer(xdr, page_address(page), PAGE_SIZE); +} + +/** + * xdr_reset_scratch_buffer - Clear scratch buffer information + * @xdr: pointer to xdr_stream struct + * + * See xdr_set_scratch_buffer(). + */ +static inline void xdr_reset_scratch_buffer(struct xdr_stream *xdr) +{ + xdr_set_scratch_buffer(xdr, NULL, 0); +} + /** * xdr_stream_remaining - Return the number of bytes remaining in the stream * @xdr: pointer to struct xdr_stream diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c index 2ff7b7083eba..c636c648849b 100644 --- a/net/sunrpc/auth_gss/gss_rpc_xdr.c +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c @@ -789,7 +789,7 @@ int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp, scratch = alloc_page(GFP_KERNEL); if (!scratch) return -ENOMEM; - xdr_set_scratch_buffer(xdr, page_address(scratch), PAGE_SIZE); + xdr_set_scratch_page(xdr, scratch); /* res->status */ err = gssx_dec_status(xdr, &res->status); diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c index 28f81769a27c..c607744b3ea8 100644 --- a/net/sunrpc/xdr.c +++ b/net/sunrpc/xdr.c @@ -669,7 +669,7 @@ void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct kvec *iov = buf->head; int scratch_len = buf->buflen - buf->page_len - buf->tail[0].iov_len; - xdr_set_scratch_buffer(xdr, NULL, 0); + xdr_reset_scratch_buffer(xdr); BUG_ON(scratch_len < 0); xdr->buf = buf; xdr->iov = iov; @@ -713,7 +713,7 @@ inline void xdr_commit_encode(struct xdr_stream *xdr) page = page_address(*xdr->page_ptr); memcpy(xdr->scratch.iov_base, page, shift); memmove(page, page + shift, (void *)xdr->p - page); - xdr->scratch.iov_len = 0; + xdr_reset_scratch_buffer(xdr); } EXPORT_SYMBOL_GPL(xdr_commit_encode); @@ -743,8 +743,7 @@ static __be32 *xdr_get_next_encode_buffer(struct xdr_stream *xdr, * the "scratch" iov to track any temporarily unused fragment of * space at the end of the previous buffer: */ - xdr->scratch.iov_base = xdr->p; - xdr->scratch.iov_len = frag1bytes; + xdr_set_scratch_buffer(xdr, xdr->p, frag1bytes); p = page_address(*xdr->page_ptr); /* * Note this is where the next encode will start after we've @@ -1052,8 +1051,7 @@ void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst) { xdr->buf = buf; - xdr->scratch.iov_base = NULL; - xdr->scratch.iov_len = 0; + xdr_reset_scratch_buffer(xdr); xdr->nwords = XDR_QUADLEN(buf->len); if (buf->head[0].iov_len != 0) xdr_set_iov(xdr, buf->head, buf->len); @@ -1101,24 +1099,6 @@ static __be32 * __xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes) return p; } -/** - * xdr_set_scratch_buffer - Attach a scratch buffer for decoding data. - * @xdr: pointer to xdr_stream struct - * @buf: pointer to an empty buffer - * @buflen: size of 'buf' - * - * The scratch buffer is used when decoding from an array of pages. - * If an xdr_inline_decode() call spans across page boundaries, then - * we copy the data into the scratch buffer in order to allow linear - * access. - */ -void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen) -{ - xdr->scratch.iov_base = buf; - xdr->scratch.iov_len = buflen; -} -EXPORT_SYMBOL_GPL(xdr_set_scratch_buffer); - static __be32 *xdr_copy_to_scratch(struct xdr_stream *xdr, size_t nbytes) { __be32 *p; From patchwork Fri Nov 13 15:02:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903755 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 59975138B for ; Fri, 13 Nov 2020 15:02:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3C53C21D79 for ; Fri, 13 Nov 2020 15:02:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QsL8b84v" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726439AbgKMPCn (ORCPT ); Fri, 13 Nov 2020 10:02:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPCn (ORCPT ); Fri, 13 Nov 2020 10:02:43 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 477C0C0613D1 for ; Fri, 13 Nov 2020 07:02:43 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id u4so8996345qkk.10 for ; Fri, 13 Nov 2020 07:02:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=h52B0d445gcmq5mJuPTAR+iDeh62oOOthfLOcK1a21s=; b=QsL8b84vhXarjYBDWyOZeAXNNPRGbsTo1d6CJddMMsGx4n88kxsEillnoi2oyaw194 NaWNgD4csmGkIksfB93D0+xA/gYHMeHnq4wHlw/3PTqFu8A7A6V6sCe7I8q7ntFpgByK 42djGiNCIcHbC574JaSSYeB4aNswIhm0v4DmSC6Jg0GO1gJ/Lj1/rU+YZ8zO99SN36Ze vt3SXaZ0VXBoSc42rqYUfOyK7AlRxg+fFXI7/uUjmCEeVISpPQGU1yj4+8pbps90dnnK 1k+WgDMfw/WT/CKAI0NWj245gnUqgrQCYfqspamdBEzaR34L6ZZciU0ahsqbdYNJmaKq ku9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=h52B0d445gcmq5mJuPTAR+iDeh62oOOthfLOcK1a21s=; b=VnvxkOMLKtNfBypNO/WoEnuRJOgfzaGiBgqJRPX320Yxrmdzdel5MiOlkBsCiyZcMz WNnMYNUn0E/xsXHMFNvJSMsrHv5dk89DfrjTosqbIGIp9dzgPD47ztdJMxUzhVAQ4eG8 WeqArbvrzO30AmUCY4akUCquwnF1BsPNmqjduIHUFHd8qsCSnMG5X1SwIRzWGNJz64Oz dG3xzkmp4SsFgzW9Ep0wVaF7LbLXgIgek7diWw03XXgr+mAfn7G3po/X5hsTQiq7zLn6 fpvbJFZMJywqEq+p6dBMQjQxqLdWWEZdnwHcMfRK904BD1mIXF6tnLVEo03uNcwMPY4g hXZg== X-Gm-Message-State: AOAM532EOimuj544AFJBs7bvlqN19OtjjlqjebGMkX3yW1t5ASwFqC0C g85ZjokgWCPENLO16bqLBo6T216jpmU= X-Google-Smtp-Source: ABdhPJxuParydcq4GZgGoCgDvG1p4HJXNLJfvXOQGJHNxEMJYxhBIhdlrcAu+GvBIr+vURILB7qR3g== X-Received: by 2002:a05:620a:98a:: with SMTP id x10mr2426320qkx.259.1605279761203; Fri, 13 Nov 2020 07:02:41 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id 199sm2308016qkj.61.2020.11.13.07.02.40 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:02:40 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF2dhn032646 for ; Fri, 13 Nov 2020 15:02:39 GMT Subject: [PATCH v1 03/61] SUNRPC: Prepare for xdr_stream-style decoding on the server-side From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:02:39 -0500 Message-ID: <160527975951.6186.924950848939300125.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org A "permanent" struct xdr_stream is allocated in struct svc_rqst so that it is usable by all server-side decoders. A per-rqst scratch buffer is also allocated to handle decoding XDR data items that cross page boundaries. To demonstrate how it will be used, add the first call site for the new svcxdr_init_decode() API. As an additional part of the overall conversion, add symbolic constants for successful and failed XDR operations. Returning "0" is overloaded. Sometimes it means something failed, but sometimes it means success. To make it more clear when XDR decoding functions succeed or fail, introduce symbolic constants. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 3 ++- fs/nfsd/nfssvc.c | 4 +++- include/linux/sunrpc/svc.h | 16 ++++++++++++++++ include/linux/sunrpc/xdr.h | 5 +++++ net/sunrpc/svc.c | 5 +++++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index e3c6bea83bd6..66274ad05a9c 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -5321,7 +5321,8 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p) args->ops = args->iops; args->rqstp = rqstp; - return !nfsd4_decode_compound(args); + return nfsd4_decode_compound(args) == nfs_ok ? XDR_DECODE_DONE : + XDR_DECODE_FAILED; } int diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 27b1ad136150..daeab72975a3 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c @@ -1020,7 +1020,9 @@ int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp) * (necessary in the NFSv4.0 compound case) */ rqstp->rq_cachetype = proc->pc_cachetype; - if (!proc->pc_decode(rqstp, argv->iov_base)) + + svcxdr_init_decode(rqstp, argv->iov_base); + if (proc->pc_decode(rqstp, argv->iov_base) == XDR_DECODE_FAILED) goto out_decode_err; switch (nfsd_cache_lookup(rqstp)) { diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index c220b734fa69..bb6c93283697 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -248,6 +248,8 @@ struct svc_rqst { size_t rq_xprt_hlen; /* xprt header len */ struct xdr_buf rq_arg; struct xdr_buf rq_res; + struct xdr_stream rq_xdr_stream; + struct page *rq_scratch_page; struct page *rq_pages[RPCSVC_MAXPAGES + 1]; struct page * *rq_respages; /* points into rq_pages */ struct page * *rq_next_page; /* next reply page to use */ @@ -557,4 +559,18 @@ static inline void svc_reserve_auth(struct svc_rqst *rqstp, int space) svc_reserve(rqstp, space + rqstp->rq_auth_slack); } +/** + * svcxdr_init_decode - Prepare an xdr_stream for svc Call decoding + * @rqstp: controlling server RPC transaction context + * @p: Starting position + * + */ +static inline void svcxdr_init_decode(struct svc_rqst *rqstp, __be32 *p) +{ + struct xdr_stream *xdr = &rqstp->rq_xdr_stream; + + xdr_init_decode(xdr, &rqstp->rq_arg, p, NULL); + xdr_set_scratch_page(xdr, rqstp->rq_scratch_page); +} + #endif /* SUNRPC_SVC_H */ diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 6e9edb4dcc0f..3fffd7f15c3a 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h @@ -19,6 +19,11 @@ struct bio_vec; struct rpc_rqst; +enum xdr_decode_result { + XDR_DECODE_FAILED = 0, + XDR_DECODE_DONE = 1, +}; + /* * Buffer adjustment */ diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index b41500645c3f..4187745887f0 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -614,6 +614,10 @@ svc_rqst_alloc(struct svc_serv *serv, struct svc_pool *pool, int node) rqstp->rq_server = serv; rqstp->rq_pool = pool; + rqstp->rq_scratch_page = alloc_pages_node(node, GFP_KERNEL, 0); + if (!rqstp->rq_scratch_page) + goto out_enomem; + rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); if (!rqstp->rq_argp) goto out_enomem; @@ -842,6 +846,7 @@ void svc_rqst_free(struct svc_rqst *rqstp) { svc_release_buffer(rqstp); + put_page(rqstp->rq_scratch_page); kfree(rqstp->rq_resp); kfree(rqstp->rq_argp); kfree(rqstp->rq_auth_data); From patchwork Fri Nov 13 15:02:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903757 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7D719138B for ; Fri, 13 Nov 2020 15:02:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5B99522201 for ; Fri, 13 Nov 2020 15:02:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D232lo+M" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726457AbgKMPCt (ORCPT ); Fri, 13 Nov 2020 10:02:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPCt (ORCPT ); Fri, 13 Nov 2020 10:02:49 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D475C0613D1 for ; Fri, 13 Nov 2020 07:02:49 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id g17so6841679qts.5 for ; Fri, 13 Nov 2020 07:02:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=ughBf5cj0fVlg9AT/pfePNEsb5YuYzOEecguLnhUCaU=; b=D232lo+MLNCBb/YPHyCLNv5SC1ZITTHEh3/+1Yx4EqFgrD6KCEUFK2cS79hZ/uFxLE a0lzhXG07F9xhOrHxPGSgBDkixuOc/mlLKqcfi/RDUNqwXnlxareg2y6eB8AAj88Lw6k pccRHd+A9j/CoBiCmEd5NHh4qvs46F2jRrjlmV+VtNNszZodcJ1hORtJKx0SoVYCBEVW lheptB3eYfV8rfzqWBhLOnxmY7N0Gw6PtmR0BQFaNV4R7+SEl5mGEWidj5Q798EVEY1G L1CUZaZsah43UCP+w2k9fkHLR1FQLUwI6wgzO4UVIlSmUbCmqnN2gg28jJHamUJ2J5qN B+gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=ughBf5cj0fVlg9AT/pfePNEsb5YuYzOEecguLnhUCaU=; b=GeI7NOx1VroXrpzXwm8armelxcrhdASOBWRixr09QiUlXWfy2yE7VhrWCxMjTGjbgH 5carOxMI9nRfKLhDLurmafWhnEL82mO4ff4mNkuFD0CJvwgKxk6PeFtPD7XbD+obpLjd 8ox0XTDy5ZUVYg5l0ZDOknv2x9UxsIA6OEd/vIo/xbGMsZT4mmONDD6bryUgMcBwRRlv JLbwZQvS1M8TDQ/oGW4oPeY7lcmDQ0HdSfkLnT9wKgXHMvSDTBJSYakimoCSkUhhU49x xqB0XWm8IaZRA8QB+qxUKkwE6Uv0KErGUricOuCpQ7QHRuaICq0HSV8dRF0KlDXKinqV ndOg== X-Gm-Message-State: AOAM530kFg27Q3WU909kSV78sRA02VwaagEKVKBzyYUonaKG9jDxG36t 1bGALvrC7n3vBq2k4abgOiife19cQ8o= X-Google-Smtp-Source: ABdhPJz7CeZfTtOFbnwVg2yQsubrpIr4L0LS9y0o98inj5NgcHGgSOIMed3574na50h3d1NT0fnn0w== X-Received: by 2002:ac8:5985:: with SMTP id e5mr2354821qte.88.1605279766673; Fri, 13 Nov 2020 07:02:46 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id 199sm6884214qkm.62.2020.11.13.07.02.45 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:02:46 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF2i1q032649 for ; Fri, 13 Nov 2020 15:02:44 GMT Subject: [PATCH v1 04/61] NFSD: Add common helpers to decode void args and encode void results From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:02:44 -0500 Message-ID: <160527976487.6186.6781888621062566433.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Start off the conversion to xdr_stream by de-duplicating the functions that decode void arguments and encode void results. Signed-off-by: Chuck Lever --- fs/nfsd/nfs2acl.c | 21 ++++----------------- fs/nfsd/nfs3acl.c | 8 ++++---- fs/nfsd/nfs3proc.c | 10 ++++------ fs/nfsd/nfs3xdr.c | 11 ----------- fs/nfsd/nfs4proc.c | 8 ++++---- fs/nfsd/nfs4xdr.c | 12 ------------ fs/nfsd/nfsd.h | 8 ++++++++ fs/nfsd/nfsproc.c | 25 ++++++++++++------------- fs/nfsd/nfssvc.c | 23 +++++++++++++++++++++++ fs/nfsd/nfsxdr.c | 10 ---------- fs/nfsd/xdr.h | 2 -- fs/nfsd/xdr3.h | 2 -- fs/nfsd/xdr4.h | 2 -- 13 files changed, 59 insertions(+), 83 deletions(-) diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c index 6a900f770dd2..b0f66604532a 100644 --- a/fs/nfsd/nfs2acl.c +++ b/fs/nfsd/nfs2acl.c @@ -185,10 +185,6 @@ static __be32 nfsacld_proc_access(struct svc_rqst *rqstp) /* * XDR decode functions */ -static int nfsaclsvc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p) -{ - return 1; -} static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p) { @@ -255,15 +251,6 @@ static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p) * XDR encode functions */ -/* - * There must be an encoding function for void results so svc_process - * will work properly. - */ -static int nfsaclsvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p) -{ - return xdr_ressize_check(rqstp, p); -} - /* GETACL */ static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p) { @@ -378,10 +365,10 @@ struct nfsd3_voidargs { int dummy; }; static const struct svc_procedure nfsd_acl_procedures2[5] = { [ACLPROC2_NULL] = { .pc_func = nfsacld_proc_null, - .pc_decode = nfsaclsvc_decode_voidarg, - .pc_encode = nfsaclsvc_encode_voidres, - .pc_argsize = sizeof(struct nfsd3_voidargs), - .pc_ressize = sizeof(struct nfsd3_voidargs), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c index 34a394e50e1d..7c30876a31a1 100644 --- a/fs/nfsd/nfs3acl.c +++ b/fs/nfsd/nfs3acl.c @@ -245,10 +245,10 @@ struct nfsd3_voidargs { int dummy; }; static const struct svc_procedure nfsd_acl_procedures3[3] = { [ACLPROC3_NULL] = { .pc_func = nfsd3_proc_null, - .pc_decode = nfs3svc_decode_voidarg, - .pc_encode = nfs3svc_encode_voidres, - .pc_argsize = sizeof(struct nfsd3_voidargs), - .pc_ressize = sizeof(struct nfsd3_voidargs), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index e0ad18d6b5a8..581a93b17bee 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c @@ -693,8 +693,6 @@ nfsd3_proc_commit(struct svc_rqst *rqstp) #define nfsd3_attrstatres nfsd3_attrstat #define nfsd3_wccstatres nfsd3_attrstat #define nfsd3_createres nfsd3_diropres -#define nfsd3_voidres nfsd3_voidargs -struct nfsd3_voidargs { int dummy; }; #define ST 1 /* status*/ #define FH 17 /* filehandle with length */ @@ -705,10 +703,10 @@ struct nfsd3_voidargs { int dummy; }; static const struct svc_procedure nfsd_procedures3[22] = { [NFS3PROC_NULL] = { .pc_func = nfsd3_proc_null, - .pc_decode = nfs3svc_decode_voidarg, - .pc_encode = nfs3svc_encode_voidres, - .pc_argsize = sizeof(struct nfsd3_voidargs), - .pc_ressize = sizeof(struct nfsd3_voidres), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c index 186b07a72373..a6718b952975 100644 --- a/fs/nfsd/nfs3xdr.c +++ b/fs/nfsd/nfs3xdr.c @@ -304,11 +304,6 @@ void fill_post_wcc(struct svc_fh *fhp) /* * XDR decode functions */ -int -nfs3svc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p) -{ - return 1; -} int nfs3svc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p) @@ -642,12 +637,6 @@ nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p) * XDR encode functions */ -int -nfs3svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p) -{ - return xdr_ressize_check(rqstp, p); -} - /* GETATTR */ int nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 5fbda469fbfe..7295b8eeb43f 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -3300,10 +3300,10 @@ struct nfsd4_voidargs { int dummy; }; static const struct svc_procedure nfsd_procedures4[2] = { [NFSPROC4_NULL] = { .pc_func = nfsd4_proc_null, - .pc_decode = nfs4svc_decode_voidarg, - .pc_encode = nfs4svc_encode_voidres, - .pc_argsize = sizeof(struct nfsd4_voidargs), - .pc_ressize = sizeof(struct nfsd4_voidres), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = 1, }, diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 66274ad05a9c..6c3d45f68b75 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -5271,12 +5271,6 @@ nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op) p = xdr_encode_opaque_fixed(p, rp->rp_buf, rp->rp_buflen); } -int -nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p) -{ - return xdr_ressize_check(rqstp, p); -} - void nfsd4_release_compoundargs(struct svc_rqst *rqstp) { struct nfsd4_compoundargs *args = rqstp->rq_argp; @@ -5294,12 +5288,6 @@ void nfsd4_release_compoundargs(struct svc_rqst *rqstp) } } -int -nfs4svc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p) -{ - return 1; -} - int nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p) { diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h index cb742e17e04a..7907de3f2ee6 100644 --- a/fs/nfsd/nfsd.h +++ b/fs/nfsd/nfsd.h @@ -73,6 +73,14 @@ extern unsigned long nfsd_drc_mem_used; extern const struct seq_operations nfs_exports_op; +/* + * Common void argument and result helpers + */ +struct nfsd_voidargs { }; +struct nfsd_voidres { }; +int nfssvc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p); +int nfssvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p); + /* * Function prototypes. */ diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index 0d71549f9d42..9473d048efec 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -609,7 +609,6 @@ nfsd_proc_statfs(struct svc_rqst *rqstp) * NFSv2 Server procedures. * Only the results of non-idempotent operations are cached. */ -struct nfsd_void { int dummy; }; #define ST 1 /* status */ #define FH 8 /* filehandle */ @@ -618,10 +617,10 @@ struct nfsd_void { int dummy; }; static const struct svc_procedure nfsd_procedures2[18] = { [NFSPROC_NULL] = { .pc_func = nfsd_proc_null, - .pc_decode = nfssvc_decode_void, - .pc_encode = nfssvc_encode_void, - .pc_argsize = sizeof(struct nfsd_void), - .pc_ressize = sizeof(struct nfsd_void), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = 0, }, @@ -647,10 +646,10 @@ static const struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_ROOT] = { .pc_func = nfsd_proc_root, - .pc_decode = nfssvc_decode_void, - .pc_encode = nfssvc_encode_void, - .pc_argsize = sizeof(struct nfsd_void), - .pc_ressize = sizeof(struct nfsd_void), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = 0, }, @@ -685,10 +684,10 @@ static const struct svc_procedure nfsd_procedures2[18] = { }, [NFSPROC_WRITECACHE] = { .pc_func = nfsd_proc_writecache, - .pc_decode = nfssvc_decode_void, - .pc_encode = nfssvc_encode_void, - .pc_argsize = sizeof(struct nfsd_void), - .pc_ressize = sizeof(struct nfsd_void), + .pc_decode = nfssvc_decode_voidarg, + .pc_encode = nfssvc_encode_voidres, + .pc_argsize = sizeof(struct nfsd_voidargs), + .pc_ressize = sizeof(struct nfsd_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = 0, }, diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index daeab72975a3..cae6fbf10514 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c @@ -28,6 +28,7 @@ #include "vfs.h" #include "netns.h" #include "filecache.h" +#include "xdr.h" #define NFSDDBG_FACILITY NFSDDBG_SVC @@ -1075,6 +1076,28 @@ int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp) return 1; } +/** + * nfssvc_decode_voidarg - Decode void arguments + * @rqstp: Server RPC transaction context + * @p: buffer containing arguments to decode + * + */ +int nfssvc_decode_voidarg(struct svc_rqst *rqstp, __be32 *p) +{ + return XDR_DECODE_DONE; +} + +/** + * nfssvc_encode_voidres - Encode void results + * @rqstp: Server RPC transaction context + * @p: buffer in which to encode results + * + */ +int nfssvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p) +{ + return xdr_ressize_check(rqstp, p); +} + int nfsd_pool_stats_open(struct inode *inode, struct file *file) { int ret; diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c index 9e00a902113e..7aa6e8aca2c1 100644 --- a/fs/nfsd/nfsxdr.c +++ b/fs/nfsd/nfsxdr.c @@ -192,11 +192,6 @@ __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *f /* * XDR decode functions */ -int -nfssvc_decode_void(struct svc_rqst *rqstp, __be32 *p) -{ - return xdr_argsize_check(rqstp, p); -} int nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p) @@ -423,11 +418,6 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p) /* * XDR encode functions */ -int -nfssvc_encode_void(struct svc_rqst *rqstp, __be32 *p) -{ - return xdr_ressize_check(rqstp, p); -} int nfssvc_encode_stat(struct svc_rqst *rqstp, __be32 *p) diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h index 0ff336b0b25f..ad77387734cc 100644 --- a/fs/nfsd/xdr.h +++ b/fs/nfsd/xdr.h @@ -144,7 +144,6 @@ union nfsd_xdrstore { #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) -int nfssvc_decode_void(struct svc_rqst *, __be32 *); int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *); int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *); int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *); @@ -156,7 +155,6 @@ int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *); int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *); int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *); int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *); -int nfssvc_encode_void(struct svc_rqst *, __be32 *); int nfssvc_encode_stat(struct svc_rqst *, __be32 *); int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *); int nfssvc_encode_diropres(struct svc_rqst *, __be32 *); diff --git a/fs/nfsd/xdr3.h b/fs/nfsd/xdr3.h index ae6fa6c9cb46..456fcd7a1038 100644 --- a/fs/nfsd/xdr3.h +++ b/fs/nfsd/xdr3.h @@ -273,7 +273,6 @@ union nfsd3_xdrstore { #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) -int nfs3svc_decode_voidarg(struct svc_rqst *, __be32 *); int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *); int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *); int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *); @@ -290,7 +289,6 @@ int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *); int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *); int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *); int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *); -int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *); int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *); int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *); int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *); diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 679d40af1bbb..37f89ad5e992 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -781,8 +781,6 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp) bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp); -int nfs4svc_decode_voidarg(struct svc_rqst *, __be32 *); -int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *); int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *); int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *); __be32 nfsd4_check_resp_size(struct nfsd4_compoundres *, u32); From patchwork Fri Nov 13 15:02:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903763 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4ED7716C1 for ; Fri, 13 Nov 2020 15:03:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2849F22201 for ; Fri, 13 Nov 2020 15:03:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="T5mQTsFl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726740AbgKMPDM (ORCPT ); Fri, 13 Nov 2020 10:03:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPDM (ORCPT ); Fri, 13 Nov 2020 10:03:12 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83D64C0613D1 for ; Fri, 13 Nov 2020 07:02:53 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id b11so4694364qvr.9 for ; Fri, 13 Nov 2020 07:02:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=ZfaPsoHARUKobWJYyh/xAxYHvicQZUoOseSFX3buHvA=; b=T5mQTsFlIJDnkuCiOzfMossud5J6nHJhM5EeqsKsNl7K68sZeSxFGI/vpkhYh0gdlq Pk1rPRIboaTTDLgAP5H/IiajmB3cPo0/Bwp0/ElGwbR6upL6RNOdOl5qTigJA3Br6fhn Aq+rb514SeAtACtMLoSXE8Sz2EGYNv+N9BYKVv4kwfo4xvAFl45Qk5iU2S3CNqIWaFnO yVWMm+pF+v+8JJZJEaPIVrpRTsfzRU5CfGd63dbi/QRtKnXyj7YlxpA7FPmP5X9axzKB c6DWTjvLqsSyPewhdpCuuIQIOr2aPafwWeAtjg2jsA26HBTSieNuqW08y5IcXyNnheZa 8UQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=ZfaPsoHARUKobWJYyh/xAxYHvicQZUoOseSFX3buHvA=; b=FG1zHxzcoG+MJCVq5+wZfORZzNeMI1qF85tJ8s/zwCIZ5Ud6Hn3n2X6cRie11jF9Bq r7+dR1KUlFYh+fCI3QC8nR8cYqFYLMxxrHsZSx6BaxoegGvrcq1WM43WEddNBghCnPSU ZgvM+bxfgCaqGfNYv34thcT65plgsKFn265SzcWCP1b3SqwvECoyjrX/MRXnxJ0fWtkC EtWTwlh7yDFRpBDW112aR3T4Y743FiNOq30+jmrxYJBHRLO+G/Io0dIphe6YXeuLumid UF4mA+UAiQnfG81fsNePYbtJimhICa3MTG67J2KfjQKN52fldwEB5C79oU+++Qc6X+x+ J8GQ== X-Gm-Message-State: AOAM53290KJ70sVsmPq0XF7pL/MOW5xB5/SM96hQxWS55sez0bHMPACH w/3+9FsM8X8twmS/L+yiqSIvIAko+qI= X-Google-Smtp-Source: ABdhPJwlXIOE/zEeresK5tuV+z5ETX3KN85VMF3AIa56MeqbHgSC2g8IPvce642qUPPOsGsiKRrebQ== X-Received: by 2002:a0c:ff23:: with SMTP id x3mr2744890qvt.23.1605279771737; Fri, 13 Nov 2020 07:02:51 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id z6sm6317006qti.88.2020.11.13.07.02.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:02:51 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF2o8t032652 for ; Fri, 13 Nov 2020 15:02:50 GMT Subject: [PATCH v1 05/61] NFSD: Replace the internals of the READ_BUF() macro From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:02:50 -0500 Message-ID: <160527977023.6186.8362456431432350401.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Convert the READ_BUF macro in nfs4xdr.c from open code to instead use the new xdr_stream-style decoders already in use by the encode side (and by the in-kernel NFS client implementation). Once this conversion is done, each individual NFSv4 argument decoder can be independently cleaned up to replace these macros with C code. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4proc.c | 4 - fs/nfsd/nfs4xdr.c | 181 ++++++-------------------------------------- fs/nfsd/xdr4.h | 10 -- include/linux/sunrpc/xdr.h | 2 net/sunrpc/xdr.c | 44 +++++++++++ 5 files changed, 76 insertions(+), 165 deletions(-) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 7295b8eeb43f..91197626d0d2 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -1023,8 +1023,8 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, write->wr_how_written = write->wr_stable_how; - nvecs = svc_fill_write_vector(rqstp, write->wr_pagelist, - &write->wr_head, write->wr_buflen); + nvecs = svc_fill_write_vector(rqstp, write->wr_payload.pages, + write->wr_payload.head, write->wr_buflen); WARN_ON_ONCE(nvecs > ARRAY_SIZE(rqstp->rq_vec)); status = nfsd_vfs_write(rqstp, &cstate->current_fh, nf, diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 6c3d45f68b75..26265d649c39 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -129,90 +129,13 @@ xdr_error: \ memcpy((x), p, nbytes); \ p += XDR_QUADLEN(nbytes); \ } while (0) - -/* READ_BUF, read_buf(): nbytes must be <= PAGE_SIZE */ -#define READ_BUF(nbytes) do { \ - if (nbytes <= (u32)((char *)argp->end - (char *)argp->p)) { \ - p = argp->p; \ - argp->p += XDR_QUADLEN(nbytes); \ - } else if (!(p = read_buf(argp, nbytes))) { \ - dprintk("NFSD: xdr error (%s:%d)\n", \ - __FILE__, __LINE__); \ - goto xdr_error; \ - } \ -} while (0) - -static void next_decode_page(struct nfsd4_compoundargs *argp) -{ - argp->p = page_address(argp->pagelist[0]); - argp->pagelist++; - if (argp->pagelen < PAGE_SIZE) { - argp->end = argp->p + XDR_QUADLEN(argp->pagelen); - argp->pagelen = 0; - } else { - argp->end = argp->p + (PAGE_SIZE>>2); - argp->pagelen -= PAGE_SIZE; - } -} - -static __be32 *read_buf(struct nfsd4_compoundargs *argp, u32 nbytes) -{ - /* We want more bytes than seem to be available. - * Maybe we need a new page, maybe we have just run out - */ - unsigned int avail = (char *)argp->end - (char *)argp->p; - __be32 *p; - - if (argp->pagelen == 0) { - struct kvec *vec = &argp->rqstp->rq_arg.tail[0]; - - if (!argp->tail) { - argp->tail = true; - avail = vec->iov_len; - argp->p = vec->iov_base; - argp->end = vec->iov_base + avail; - } - - if (avail < nbytes) - return NULL; - - p = argp->p; - argp->p += XDR_QUADLEN(nbytes); - return p; - } - - if (avail + argp->pagelen < nbytes) - return NULL; - if (avail + PAGE_SIZE < nbytes) /* need more than a page !! */ - return NULL; - /* ok, we can do it with the current plus the next page */ - if (nbytes <= sizeof(argp->tmp)) - p = argp->tmp; - else { - kfree(argp->tmpp); - p = argp->tmpp = kmalloc(nbytes, GFP_KERNEL); - if (!p) - return NULL; - - } - /* - * The following memcpy is safe because read_buf is always - * called with nbytes > avail, and the two cases above both - * guarantee p points to at least nbytes bytes. - */ - memcpy(p, argp->p, avail); - next_decode_page(argp); - memcpy(((char*)p)+avail, argp->p, (nbytes - avail)); - argp->p += XDR_QUADLEN(nbytes - avail); - return p; -} - -static unsigned int compoundargs_bytes_left(struct nfsd4_compoundargs *argp) -{ - unsigned int this = (char *)argp->end - (char *)argp->p; - - return this + argp->pagelen; -} +#define READ_BUF(nbytes) \ + do { \ + p = xdr_inline_decode(argp->xdr,\ + nbytes); \ + if (!p) \ + goto xdr_error; \ + } while (0) static int zero_clientid(clientid_t *clid) { @@ -259,44 +182,6 @@ svcxdr_dupstr(struct nfsd4_compoundargs *argp, void *buf, u32 len) return p; } -static __be32 -svcxdr_construct_vector(struct nfsd4_compoundargs *argp, struct kvec *head, - struct page ***pagelist, u32 buflen) -{ - int avail; - int len; - int pages; - - /* Sorry .. no magic macros for this.. * - * READ_BUF(write->wr_buflen); - * SAVEMEM(write->wr_buf, write->wr_buflen); - */ - avail = (char *)argp->end - (char *)argp->p; - if (avail + argp->pagelen < buflen) { - dprintk("NFSD: xdr error (%s:%d)\n", - __FILE__, __LINE__); - return nfserr_bad_xdr; - } - head->iov_base = argp->p; - head->iov_len = avail; - *pagelist = argp->pagelist; - - len = XDR_QUADLEN(buflen) << 2; - if (len >= avail) { - len -= avail; - - pages = len >> PAGE_SHIFT; - argp->pagelist += pages; - argp->pagelen -= pages * PAGE_SIZE; - len -= pages * PAGE_SIZE; - - next_decode_page(argp); - } - argp->p += XDR_QUADLEN(len); - - return 0; -} - /** * savemem - duplicate a chunk of memory for later processing * @argp: NFSv4 compound argument structure to be freed with @@ -396,7 +281,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, READ_BUF(4); len += 4; nace = be32_to_cpup(p++); - if (nace > compoundargs_bytes_left(argp)/20) + if (nace > xdr_stream_remaining(argp->xdr) / sizeof(struct nfs4_ace)) /* * Even with 4-byte names there wouldn't be * space for that many aces; something fishy is @@ -927,7 +812,7 @@ static __be32 nfsd4_decode_share_deny(struct nfsd4_compoundargs *argp, u32 *x) static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o) { - __be32 *p; + DECODE_HEAD; READ_BUF(4); o->len = be32_to_cpup(p++); @@ -937,9 +822,8 @@ static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_ne READ_BUF(o->len); SAVEMEM(o->data, o->len); - return nfs_ok; -xdr_error: - return nfserr_bad_xdr; + + DECODE_TAIL; } static __be32 @@ -1317,10 +1201,8 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) goto xdr_error; write->wr_buflen = be32_to_cpup(p++); - status = svcxdr_construct_vector(argp, &write->wr_head, - &write->wr_pagelist, write->wr_buflen); - if (status) - return status; + if (!xdr_stream_subsegment(argp->xdr, &write->wr_payload, write->wr_buflen)) + goto xdr_error; DECODE_TAIL; } @@ -1889,13 +1771,14 @@ nfsd4_decode_seek(struct nfsd4_compoundargs *argp, struct nfsd4_seek *seek) */ /* - * Decode data into buffer. Uses head and pages constructed by - * svcxdr_construct_vector. + * Decode data into buffer. */ static __be32 -nfsd4_vbuf_from_vector(struct nfsd4_compoundargs *argp, struct kvec *head, - struct page **pages, char **bufp, u32 buflen) +nfsd4_vbuf_from_vector(struct nfsd4_compoundargs *argp, struct xdr_buf *xdr, + char **bufp, u32 buflen) { + struct page **pages = xdr->pages; + struct kvec *head = xdr->head; char *tmp, *dp; u32 len; @@ -2010,8 +1893,6 @@ nfsd4_decode_setxattr(struct nfsd4_compoundargs *argp, { DECODE_HEAD; u32 flags, maxcount, size; - struct kvec head; - struct page **pagelist; READ_BUF(4); flags = be32_to_cpup(p++); @@ -2034,12 +1915,12 @@ nfsd4_decode_setxattr(struct nfsd4_compoundargs *argp, setxattr->setxa_len = size; if (size > 0) { - status = svcxdr_construct_vector(argp, &head, &pagelist, size); - if (status) - return status; + struct xdr_buf payload; - status = nfsd4_vbuf_from_vector(argp, &head, pagelist, - &setxattr->setxa_buf, size); + if (!xdr_stream_subsegment(argp->xdr, &payload, size)) + goto xdr_error; + status = nfsd4_vbuf_from_vector(argp, &payload, + &setxattr->setxa_buf, size); } DECODE_TAIL; @@ -5279,8 +5160,6 @@ void nfsd4_release_compoundargs(struct svc_rqst *rqstp) kfree(args->ops); args->ops = args->iops; } - kfree(args->tmpp); - args->tmpp = NULL; while (args->to_free) { struct svcxdr_tmpbuf *tb = args->to_free; args->to_free = tb->next; @@ -5293,19 +5172,11 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p) { struct nfsd4_compoundargs *args = rqstp->rq_argp; - if (rqstp->rq_arg.head[0].iov_len % 4) { - /* client is nuts */ - dprintk("%s: compound not properly padded! (peeraddr=%pISc xid=0x%x)", - __func__, svc_addr(rqstp), be32_to_cpu(rqstp->rq_xid)); - return 0; - } - args->p = p; - args->end = rqstp->rq_arg.head[0].iov_base + rqstp->rq_arg.head[0].iov_len; - args->pagelist = rqstp->rq_arg.pages; - args->pagelen = rqstp->rq_arg.page_len; - args->tail = false; + /* svcxdr_tmp_alloc */ args->tmpp = NULL; args->to_free = NULL; + + args->xdr = &rqstp->rq_xdr_stream; args->ops = args->iops; args->rqstp = rqstp; diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 37f89ad5e992..0eb13bd603ea 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -419,8 +419,7 @@ struct nfsd4_write { u64 wr_offset; /* request */ u32 wr_stable_how; /* request */ u32 wr_buflen; /* request */ - struct kvec wr_head; - struct page ** wr_pagelist; /* request */ + struct xdr_buf wr_payload; /* request */ u32 wr_bytes_written; /* response */ u32 wr_how_written; /* response */ @@ -696,15 +695,10 @@ struct svcxdr_tmpbuf { struct nfsd4_compoundargs { /* scratch variables for XDR decode */ - __be32 * p; - __be32 * end; - struct page ** pagelist; - int pagelen; - bool tail; __be32 tmp[8]; __be32 * tmpp; + struct xdr_stream *xdr; struct svcxdr_tmpbuf *to_free; - struct svc_rqst *rqstp; u32 taglen; diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 3fffd7f15c3a..579beeb0dac2 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h @@ -259,6 +259,8 @@ extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len); extern int xdr_process_buf(struct xdr_buf *buf, unsigned int offset, unsigned int len, int (*actor)(struct scatterlist *, void *), void *data); extern uint64_t xdr_align_data(struct xdr_stream *, uint64_t, uint32_t); extern uint64_t xdr_expand_hole(struct xdr_stream *, uint64_t, uint64_t); +extern bool xdr_stream_subsegment(struct xdr_stream *xdr, struct xdr_buf *subbuf, + unsigned int len); /** * xdr_set_scratch_buffer - Attach a scratch buffer for decoding data. diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c index c607744b3ea8..272c9d566e6a 100644 --- a/net/sunrpc/xdr.c +++ b/net/sunrpc/xdr.c @@ -1407,6 +1407,50 @@ int xdr_buf_subsegment(const struct xdr_buf *buf, struct xdr_buf *subbuf, } EXPORT_SYMBOL_GPL(xdr_buf_subsegment); +/** + * xdr_stream_subsegment - set @subbuf to a portion of @xdr + * @xdr: an xdr_stream set up for decoding + * @subbuf: the result buffer + * @nbytes: length of @xdr to extract, in bytes + * + * Sets up @subbuf to represent a portion of @xdr. The portion + * starts at the current offset in @xdr, and extends for a length + * of @nbytes. If this is successful, @xdr is advanced to the next + * position following that portion. + * + * Return values: + * %true: @subbuf has been initialized, and @xdr has been advanced. + * %false: a bounds error occurred; @xdr is unchanged. + */ +bool xdr_stream_subsegment(struct xdr_stream *xdr, struct xdr_buf *subbuf, + unsigned int nbytes) +{ + unsigned int len, remaining, offset; + + if (xdr_buf_subsegment(xdr->buf, subbuf, xdr_stream_pos(xdr), nbytes)) + return false; + + if (subbuf->head[0].iov_len) + __xdr_inline_decode(xdr, subbuf->head[0].iov_len); + + remaining = subbuf->page_len; + offset = subbuf->page_base; + while (remaining) { + len = min_t(unsigned int, remaining, PAGE_SIZE); + len -= offset; + + if (xdr->p == xdr->end) + xdr_set_next_buffer(xdr); + __xdr_inline_decode(xdr, len); + + remaining -= len; + offset = 0; + } + + return true; +} +EXPORT_SYMBOL_GPL(xdr_stream_subsegment); + /** * xdr_buf_trim - lop at most "len" bytes off the end of "buf" * @buf: buf to be trimmed From patchwork Fri Nov 13 15:02:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903759 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1207E138B for ; Fri, 13 Nov 2020 15:02:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EABAE22201 for ; Fri, 13 Nov 2020 15:02:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FctAwva3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726503AbgKMPC6 (ORCPT ); Fri, 13 Nov 2020 10:02:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPC6 (ORCPT ); Fri, 13 Nov 2020 10:02:58 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F02F9C0617A6 for ; Fri, 13 Nov 2020 07:02:57 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id q5so8984096qkc.12 for ; Fri, 13 Nov 2020 07:02:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=aWfsBE2P05+RW08yXSxRmQhF4B81eM8UDdWWWIeNOM0=; b=FctAwva34ej87HPpwLYK6g9hH3z0tVQVYiWsgyZiyulYwuDH18YF+NbVqff7lvq8QQ kp4uV5S9cXMwoEnqS3DbBMQvbEiyarkakxSJAu5KRqdwaMtVtSoUa2xoufxFad7TrJuY DUjzzmcoWQrGB5HVm6sv31GBxVnAUDl2YWGTesmhCQYgItibaPo05QZtK570+8uQ5QEe LKIgEs5vJCyJ5ZROeAPF9rKoybpt9FE66xpPMbW3J9vFBmrBhVM7ESbKgEv999X1rHrU Uqwf35zLiDprDKowVOcionXwwMh9fLAUKjVcIMJ0wl9ZSCVrbxcuU/0yXWNAEN8RHVUt Xitw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=aWfsBE2P05+RW08yXSxRmQhF4B81eM8UDdWWWIeNOM0=; b=cw9V7Dv3+RcVbQ3yLoIsIkh1w829EaOmU8pUHIt7DFvNEV7PwKYGb7j2+PrwTycd2k Mqeai+AvX5upk3cVa3v328SjU/locDUmucr5cQl5cBnl1+3jxqF0rgzMDCSu0je8tgAT kHAASD79RAyd17dLgn1Hrp0uxLjWB2WISmq0T33do/5jN/flzjX5uNObSvoHV3x0ERjZ CfXzK42Jech56wUdjRS0gvAZySlwlP2GULYF6oQARhukwuTYWLKQmA630c0Ks2qfk7PW FXK8msePCeNohXQxtWPMyJYjnk742jLg8kJ6RC1AQY7Kehr0b82+ND8KX4K0j2K2X2mV Ae5g== X-Gm-Message-State: AOAM531IdQBa/tJnbnJxJJSnY7watyNFElvnPJDpjAls4ehe8TlWcd6J ucBgvMTZaX/+z4lbzY8n/q+A9TqHmoo= X-Google-Smtp-Source: ABdhPJxWcpKsMR46Y1sW1mxWFgHUU9dx4snZP4BESQfs8dwwbwpKfGu8SXi5jcgChUP/0FNbJenAwg== X-Received: by 2002:a05:620a:228f:: with SMTP id o15mr2470980qkh.206.1605279776726; Fri, 13 Nov 2020 07:02:56 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id a200sm6914699qkb.66.2020.11.13.07.02.55 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:02:56 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF2tbW032655 for ; Fri, 13 Nov 2020 15:02:55 GMT Subject: [PATCH v1 06/61] NFSD: Replace READ* macros in nfsd4_decode_access() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:02:55 -0500 Message-ID: <160527977531.6186.18215866313473241680.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 26265d649c39..ee9ba5f0faff 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -437,17 +437,6 @@ nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, stateid_t *sid) DECODE_TAIL; } -static __be32 -nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access) -{ - DECODE_HEAD; - - READ_BUF(4); - access->ac_req_access = be32_to_cpup(p++); - - DECODE_TAIL; -} - static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs) { DECODE_HEAD; @@ -529,6 +518,18 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_ DECODE_TAIL; } +/* + * NFSv4 operation argument decoders + */ + +static __be32 +nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access) +{ + if (xdr_stream_decode_u32(argp->xdr, &access->ac_req_access) < 0) + return nfserr_bad_xdr; + return nfs_ok; +} + static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, struct nfsd4_backchannel_ctl *bc) { DECODE_HEAD; From patchwork Fri Nov 13 15:03:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903767 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CFDAA138B for ; Fri, 13 Nov 2020 15:03:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AF5EF22201 for ; Fri, 13 Nov 2020 15:03:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G6Oek43V" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726768AbgKMPDR (ORCPT ); Fri, 13 Nov 2020 10:03:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726746AbgKMPDQ (ORCPT ); Fri, 13 Nov 2020 10:03:16 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3507FC0617A6 for ; Fri, 13 Nov 2020 07:03:04 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id j31so6822097qtb.8 for ; Fri, 13 Nov 2020 07:03:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=eLLQwoKcC18iMIoMv1izVgViwhMFF/Voc8Id1GLEMDY=; b=G6Oek43VIOwzVGC/V4u/xR9/KPyS5xptfEmvT31osVmPWIaH3BV7hKE2/TFacxmzwy JtREpO8qo0jgJJ1SfLWHI/gwx1SJR93u3xrlTAPtZ9+iEMQIwqHv9fMy1IR6gAEUstHv c1pdSfprIEKXrZy6CdRAHX58oeaRKlxv55Ggcb/Z/KpNugIYBqQcjk0xPr+xukDClnhB l8rMIzveBBxKa0Zxr2AZ40qBS3xLNvlPREXF7cLk6swg3derdHst/H34jts/JCpLCDeu YeFjt+npsJseswZSTIZQffl7qkX62LzPxjL2XuDHIBYI216FLy/EVScfqtzmZhZ2B8kd Lomw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=eLLQwoKcC18iMIoMv1izVgViwhMFF/Voc8Id1GLEMDY=; b=onDEA+kORHXCcsGLzcCuapL3FB06TunOlINPcVXlbW3TyeVhzErOW0cUizoveJ5mGa EqvPgDBvsfB/45Om7b28kTu86+7kqAZxPa7l//1uLAgw8LaY+xSeehJw2hXhKxmv6s3S 7bPQUo/7EwaTiP50cWj9HstcJJAm4dJeLSwD3dXWGATFx1w/0U12QbLd5KzdZGPhWv+4 R2cJS5PXZC4LQrbYUdxWtVM9ErntABrYGvrSb0KiwtPcwdCq2P1ddh7Ds3nT/yVosHW8 zfAL6Mc0dJPfCbS6bPBD3Mbad1g/kP6ObohckxJ/ari4SD/cMn/A3bavke8KauqYQiLx nEjg== X-Gm-Message-State: AOAM533SnR6AbweKI4vnKi4rS7IRd8JMnudsg4iLILv51TbT5ShpmjHO 3zbvluwMmKMBIzfbObFkVe1V37O6I1E= X-Google-Smtp-Source: ABdhPJz0+AJunKRtor2oZoNx31BqhH9f/WdoExYkvzyDKlvP+VL+X+rvnobrsmiphM29yZD+mgAMMA== X-Received: by 2002:a05:622a:294:: with SMTP id z20mr2167382qtw.321.1605279782104; Fri, 13 Nov 2020 07:03:02 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id a1sm6549144qtw.11.2020.11.13.07.03.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:01 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF30M4032658 for ; Fri, 13 Nov 2020 15:03:00 GMT Subject: [PATCH v1 07/61] NFSD: Replace READ* macros in nfsd4_decode_close() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:00 -0500 Message-ID: <160527978038.6186.4530707404283867683.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 72 +++++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index ee9ba5f0faff..b04407d492bb 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -426,15 +426,18 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, } static __be32 -nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, stateid_t *sid) +nfsd4_decode_stateid4(struct nfsd4_compoundargs *argp, stateid_t *sid) { - DECODE_HEAD; + __be32 *p; - READ_BUF(sizeof(stateid_t)); + p = xdr_inline_decode(argp->xdr, NFS4_STATEID_SIZE); + if (!p) + goto xdr_error; sid->si_generation = be32_to_cpup(p++); - COPYMEM(&sid->si_opaque, sizeof(stateid_opaque_t)); - - DECODE_TAIL; + memcpy(&sid->si_opaque, p, sizeof(sid->si_opaque)); + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; } static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs) @@ -556,13 +559,12 @@ static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) { - DECODE_HEAD; - - READ_BUF(4); - close->cl_seqid = be32_to_cpup(p++); - return nfsd4_decode_stateid(argp, &close->cl_stateid); + if (xdr_stream_decode_u32(argp->xdr, &close->cl_seqid) < 0) + goto xdr_error; + return nfsd4_decode_stateid4(argp, &close->cl_stateid); - DECODE_TAIL; +xdr_error: + return nfserr_bad_xdr; } @@ -626,7 +628,7 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create static inline __be32 nfsd4_decode_delegreturn(struct nfsd4_compoundargs *argp, struct nfsd4_delegreturn *dr) { - return nfsd4_decode_stateid(argp, &dr->dr_stateid); + return nfsd4_decode_stateid4(argp, &dr->dr_stateid); } static inline __be32 @@ -670,7 +672,7 @@ nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) if (lock->lk_is_new) { READ_BUF(4); lock->lk_new_open_seqid = be32_to_cpup(p++); - status = nfsd4_decode_stateid(argp, &lock->lk_new_open_stateid); + status = nfsd4_decode_stateid4(argp, &lock->lk_new_open_stateid); if (status) return status; READ_BUF(8 + sizeof(clientid_t)); @@ -680,7 +682,7 @@ nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) READ_BUF(lock->lk_new_owner.len); READMEM(lock->lk_new_owner.data, lock->lk_new_owner.len); } else { - status = nfsd4_decode_stateid(argp, &lock->lk_old_lock_stateid); + status = nfsd4_decode_stateid4(argp, &lock->lk_old_lock_stateid); if (status) return status; READ_BUF(4); @@ -719,7 +721,7 @@ nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku) if ((locku->lu_type < NFS4_READ_LT) || (locku->lu_type > NFS4_WRITEW_LT)) goto xdr_error; locku->lu_seqid = be32_to_cpup(p++); - status = nfsd4_decode_stateid(argp, &locku->lu_stateid); + status = nfsd4_decode_stateid4(argp, &locku->lu_stateid); if (status) return status; READ_BUF(16); @@ -912,7 +914,7 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) open->op_delegate_type = be32_to_cpup(p++); break; case NFS4_OPEN_CLAIM_DELEGATE_CUR: - status = nfsd4_decode_stateid(argp, &open->op_delegate_stateid); + status = nfsd4_decode_stateid4(argp, &open->op_delegate_stateid); if (status) return status; READ_BUF(4); @@ -931,7 +933,7 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) case NFS4_OPEN_CLAIM_DELEG_CUR_FH: if (argp->minorversion < 1) goto xdr_error; - status = nfsd4_decode_stateid(argp, &open->op_delegate_stateid); + status = nfsd4_decode_stateid4(argp, &open->op_delegate_stateid); if (status) return status; break; @@ -950,7 +952,7 @@ nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_con if (argp->minorversion >= 1) return nfserr_notsupp; - status = nfsd4_decode_stateid(argp, &open_conf->oc_req_stateid); + status = nfsd4_decode_stateid4(argp, &open_conf->oc_req_stateid); if (status) return status; READ_BUF(4); @@ -964,7 +966,7 @@ nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_d { DECODE_HEAD; - status = nfsd4_decode_stateid(argp, &open_down->od_stateid); + status = nfsd4_decode_stateid4(argp, &open_down->od_stateid); if (status) return status; READ_BUF(4); @@ -1007,7 +1009,7 @@ nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read) { DECODE_HEAD; - status = nfsd4_decode_stateid(argp, &read->rd_stateid); + status = nfsd4_decode_stateid4(argp, &read->rd_stateid); if (status) return status; READ_BUF(12); @@ -1115,7 +1117,7 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta { __be32 status; - status = nfsd4_decode_stateid(argp, &setattr->sa_stateid); + status = nfsd4_decode_stateid4(argp, &setattr->sa_stateid); if (status) return status; return nfsd4_decode_fattr(argp, setattr->sa_bmval, &setattr->sa_iattr, @@ -1192,7 +1194,7 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) { DECODE_HEAD; - status = nfsd4_decode_stateid(argp, &write->wr_stateid); + status = nfsd4_decode_stateid4(argp, &write->wr_stateid); if (status) return status; READ_BUF(16); @@ -1437,7 +1439,7 @@ nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_sta INIT_LIST_HEAD(&stateid->ts_id_list); list_add_tail(&stateid->ts_id_list, &test_stateid->ts_stateid_list); - status = nfsd4_decode_stateid(argp, &stateid->ts_id_stateid); + status = nfsd4_decode_stateid4(argp, &stateid->ts_id_stateid); if (status) goto out; } @@ -1513,7 +1515,7 @@ nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, p = xdr_decode_hyper(p, &lgp->lg_seg.length); p = xdr_decode_hyper(p, &lgp->lg_minlength); - status = nfsd4_decode_stateid(argp, &lgp->lg_sid); + status = nfsd4_decode_stateid4(argp, &lgp->lg_sid); if (status) return status; @@ -1535,7 +1537,7 @@ nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp, p = xdr_decode_hyper(p, &lcp->lc_seg.length); lcp->lc_reclaim = be32_to_cpup(p++); - status = nfsd4_decode_stateid(argp, &lcp->lc_sid); + status = nfsd4_decode_stateid4(argp, &lcp->lc_sid); if (status) return status; @@ -1587,7 +1589,7 @@ nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, p = xdr_decode_hyper(p, &lrp->lr_seg.offset); p = xdr_decode_hyper(p, &lrp->lr_seg.length); - status = nfsd4_decode_stateid(argp, &lrp->lr_sid); + status = nfsd4_decode_stateid4(argp, &lrp->lr_sid); if (status) return status; @@ -1612,7 +1614,7 @@ nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, { DECODE_HEAD; - status = nfsd4_decode_stateid(argp, &fallocate->falloc_stateid); + status = nfsd4_decode_stateid4(argp, &fallocate->falloc_stateid); if (status) return status; @@ -1628,10 +1630,10 @@ nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone) { DECODE_HEAD; - status = nfsd4_decode_stateid(argp, &clone->cl_src_stateid); + status = nfsd4_decode_stateid4(argp, &clone->cl_src_stateid); if (status) return status; - status = nfsd4_decode_stateid(argp, &clone->cl_dst_stateid); + status = nfsd4_decode_stateid4(argp, &clone->cl_dst_stateid); if (status) return status; @@ -1684,10 +1686,10 @@ nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) struct nl4_server *ns_dummy; int i, count; - status = nfsd4_decode_stateid(argp, ©->cp_src_stateid); + status = nfsd4_decode_stateid4(argp, ©->cp_src_stateid); if (status) return status; - status = nfsd4_decode_stateid(argp, ©->cp_dst_stateid); + status = nfsd4_decode_stateid4(argp, ©->cp_dst_stateid); if (status) return status; @@ -1731,7 +1733,7 @@ static __be32 nfsd4_decode_offload_status(struct nfsd4_compoundargs *argp, struct nfsd4_offload_status *os) { - return nfsd4_decode_stateid(argp, &os->stateid); + return nfsd4_decode_stateid4(argp, &os->stateid); } static __be32 @@ -1740,7 +1742,7 @@ nfsd4_decode_copy_notify(struct nfsd4_compoundargs *argp, { __be32 status; - status = nfsd4_decode_stateid(argp, &cn->cpn_src_stateid); + status = nfsd4_decode_stateid4(argp, &cn->cpn_src_stateid); if (status) return status; return nfsd4_decode_nl4_server(argp, &cn->cpn_dst); @@ -1751,7 +1753,7 @@ nfsd4_decode_seek(struct nfsd4_compoundargs *argp, struct nfsd4_seek *seek) { DECODE_HEAD; - status = nfsd4_decode_stateid(argp, &seek->seek_stateid); + status = nfsd4_decode_stateid4(argp, &seek->seek_stateid); if (status) return status; From patchwork Fri Nov 13 15:03:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903761 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 875C5139F for ; Fri, 13 Nov 2020 15:03:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6BBED22201 for ; Fri, 13 Nov 2020 15:03:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="imYIgrmT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726734AbgKMPDJ (ORCPT ); Fri, 13 Nov 2020 10:03:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPDJ (ORCPT ); Fri, 13 Nov 2020 10:03:09 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71106C0617A7 for ; Fri, 13 Nov 2020 07:03:09 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id 3so6863686qtx.3 for ; Fri, 13 Nov 2020 07:03:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=5qrQIaG2kw45GfYKwMRbhtb9V77nVaAXqbpvG9DjnfU=; b=imYIgrmTU+6GRPEr/s1C/+8+pLn3lWRbj/2SwBcdOelL5VzQBw72vtkNffOivxjdfM iPgie572q05pdtc7Vhjf9qN4sEuz1tPwBPk78ZR3FABAXklPkWjK0ccFpG+MbuFqnNRL GuBuWun/DPxwgXF1snCl1eQ/kElqYjGHAm3XK2XExWIKMZnfw8rOpDP86euN6wruk2q8 ulZ7VB9Txjrd2VnIK3k2mkbZA2M7iAtnPf7WH9W4+0AMqq1PuQnry4KMIPSWMKIBuDHj RiEYuqVuxUlu3yejH5covUAJYPVZ4/Qdoxhf55NQHENpuGVqPTWTfJJvJ9/lZhOxqLes 2dBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=5qrQIaG2kw45GfYKwMRbhtb9V77nVaAXqbpvG9DjnfU=; b=n5A7CuTyG1UjfAGEQCoSaBmRh1+grxdTHtiD7n60ym8ulwWZkmhJNuceIx2vtqbUCA N+d03ORa0ABv3lynNHQHZz+keO9K16/cYhW+kHr5IhWTz6vNOZ1WqkUaUO+JVdSoMC5Z yx5r9TIGqIKJU0bm/3qajRCh7oXqjbSCoMbzyFoveyUPSIyW9Fk8pC8/FErs1KvjqjrQ geAg48UwSP3KgTKKHO3xKtkiKxj7MSvCDazgFB876Ow3nIjNwGJUe08vEmjxnfsFj3LL lshkc9TK4JI2fPnrWFSnsTxELHQsG7xBObWzhYcxGxMPmKcfYfbZXLVEEwPQ4tT/FQEz UlIw== X-Gm-Message-State: AOAM530rcyWcBi6IZRk9+8VPcV8NU3k/KJ8CxoP3mrlTWGMBkokGWmRC 6XZBbIe2zLDG6TxTGkarla1esyvyLyE= X-Google-Smtp-Source: ABdhPJyrRWgK5xt9qM32tiRchNqi+/ZaxSYlpMnS+M+A0WZNFScAV4t8pGzs6qptk6sMtihUPmO16g== X-Received: by 2002:ac8:594f:: with SMTP id 15mr2319839qtz.347.1605279787520; Fri, 13 Nov 2020 07:03:07 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id i4sm6625933qtw.22.2020.11.13.07.03.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:06 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF35hW032661 for ; Fri, 13 Nov 2020 15:03:05 GMT Subject: [PATCH v1 08/61] NFSD: Replace READ* macros in nfsd4_decode_commit() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:05 -0500 Message-ID: <160527978567.6186.7268734548095467052.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 14 +++++++------- include/linux/sunrpc/xdr.h | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index b04407d492bb..2c69bf10d556 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -571,13 +571,13 @@ nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) static __be32 nfsd4_decode_commit(struct nfsd4_compoundargs *argp, struct nfsd4_commit *commit) { - DECODE_HEAD; - - READ_BUF(12); - p = xdr_decode_hyper(p, &commit->co_offset); - commit->co_count = be32_to_cpup(p++); - - DECODE_TAIL; + if (xdr_stream_decode_u64(argp->xdr, &commit->co_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &commit->co_count) < 0) + goto xdr_error; + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; } static __be32 diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 579beeb0dac2..0bee0a6dfc07 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h @@ -575,6 +575,27 @@ xdr_stream_decode_u32(struct xdr_stream *xdr, __u32 *ptr) return 0; } +/** + * xdr_stream_decode_u64 - Decode a 64-bit integer + * @xdr: pointer to xdr_stream + * @ptr: location to store 64-bit integer + * + * Return values: + * %0 on success + * %-EBADMSG on XDR buffer overflow + */ +static inline ssize_t +xdr_stream_decode_u64(struct xdr_stream *xdr, __u64 *ptr) +{ + const size_t count = sizeof(*ptr); + __be32 *p = xdr_inline_decode(xdr, count); + + if (unlikely(!p)) + return -EBADMSG; + xdr_decode_hyper(p, ptr); + return 0; +} + /** * xdr_stream_decode_opaque_fixed - Decode fixed length opaque xdr data * @xdr: pointer to xdr_stream From patchwork Fri Nov 13 15:03:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903765 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B4F05138B for ; Fri, 13 Nov 2020 15:03:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9905621D79 for ; Fri, 13 Nov 2020 15:03:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qGteZ/jA" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726751AbgKMPDP (ORCPT ); Fri, 13 Nov 2020 10:03:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726746AbgKMPDO (ORCPT ); Fri, 13 Nov 2020 10:03:14 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 914C9C0613D1 for ; Fri, 13 Nov 2020 07:03:14 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id q22so9018030qkq.6 for ; Fri, 13 Nov 2020 07:03:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=qRk/sfW4bwcD+Ts7SzXfR9EqT4+NA8QCdXiccKkiWFk=; b=qGteZ/jAuYmjBw8lUihoGUpMAf5K3jYCyU0//pVM6K+NQhFd6GzuZENeVuRqsSplHr ilx0xD/kMwPVhVVjk5j03omQ6hVU2Hea59tyE6jLhhi8yckf44g3Bi+NKdgzUxlnWEO1 ukqDbdvd8PdUUg6h/f2Rj4+t/tH00FuZZYVh+NvrkBdwHLEFLk57ySRIQKpgzCeOw284 MeN4vOzo1ZQIohvOpx/u1S573/21Tx4FRdYCpaT7RdGI2Q6dKHQwV1bLjkVgmTi0irHm phq6CpbFgV07uEaC//E56DQAfMVwNLTzhHpZsccKzr8Rc53DonZGSXa+2M2GBJLW3kbR MXAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=qRk/sfW4bwcD+Ts7SzXfR9EqT4+NA8QCdXiccKkiWFk=; b=STuZNYt/QuPuVty1/wp9ZZ5c8aGa/ObdHCU//YpR31uyWwM1wmiQOh6WxparhhRujB /cOgiT7Tcy/Domi5N3PaK9xnfZpfOsNK+yfrLn1Sdw9YiN9YAGGqu1GWQRFZEV6BEaWZ KZHCZfpzVi/BqWmNA1hloKztb6ODjI6BxKmExMqvUF+tqKNthEv+w/ggGQ5Hf5eMi5ac 7dMV6n7JKuCVqdya6viouyxbW01IkLZaBOdOroCw9AIpZmNnKLcySvi//Lh3oLSzr3Y7 eYO93EDixlxx+LRm7cFZEocsh8qU6u37ivd5z40jHwLn57TpvQKmVt4X+ti/8uFJ9hPR 9DJQ== X-Gm-Message-State: AOAM5301GuoNsKT16aKOPt/sY5CGyrauX0is39+67jmZvZNe/FBMbeFK xqZhfDu0LH5CSRR0qm/mNJG+nmeFTms= X-Google-Smtp-Source: ABdhPJwCDs6LMEm4g4OlwfNEyM5UG6aXlYJm5LPwBobuEQbQ4dL/ku8Os/mmFGn/+uQuHrSYDXsq8g== X-Received: by 2002:a37:7641:: with SMTP id r62mr2274348qkc.465.1605279792610; Fri, 13 Nov 2020 07:03:12 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id x5sm7254964qtx.61.2020.11.13.07.03.11 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:11 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3AP4032664 for ; Fri, 13 Nov 2020 15:03:10 GMT Subject: [PATCH v1 09/61] NFSD: Replace READ* macros in nfsd4_decode_create() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:10 -0500 Message-ID: <160527979096.6186.164949251806384511.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 65 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 2c69bf10d556..3cd5b2c843d8 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -90,6 +90,8 @@ check_filename(char *str, int len) if (len == 0) return nfserr_inval; + if (len > NFS4_MAXNAMLEN) + return nfserr_nametoolong; if (isdotent(str, len)) return nfserr_badname; for (i = 0; i < len; i++) @@ -203,6 +205,32 @@ static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes) return ret; } +static __be32 nfsd4_decode_component4(struct nfsd4_compoundargs *argp, + char **namp, u32 *lenp) +{ + __be32 *p, status; + + if (xdr_stream_decode_u32(argp->xdr, lenp) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, *lenp); + if (!p) + goto xdr_error; + status = check_filename((char *)p, *lenp); + if (status) + goto out; + *namp = svcxdr_tmpalloc(argp, *lenp); + if (!*namp) + goto nomem; + memcpy(*namp, p, *lenp); + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; +} + static __be32 nfsd4_decode_time(struct nfsd4_compoundargs *argp, struct timespec64 *tv) { @@ -583,24 +611,27 @@ nfsd4_decode_commit(struct nfsd4_compoundargs *argp, struct nfsd4_commit *commit static __be32 nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create) { - DECODE_HEAD; + __be32 *p, status; - READ_BUF(4); - create->cr_type = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &create->cr_type) < 0) + goto xdr_error; switch (create->cr_type) { case NF4LNK: - READ_BUF(4); - create->cr_datalen = be32_to_cpup(p++); - READ_BUF(create->cr_datalen); + if (xdr_stream_decode_u32(argp->xdr, &create->cr_datalen) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, create->cr_datalen); + if (!p) + goto xdr_error; create->cr_data = svcxdr_dupstr(argp, p, create->cr_datalen); if (!create->cr_data) return nfserr_jukebox; break; case NF4BLK: case NF4CHR: - READ_BUF(8); - create->cr_specdata1 = be32_to_cpup(p++); - create->cr_specdata2 = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &create->cr_specdata1) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &create->cr_specdata2) < 0) + goto xdr_error; break; case NF4SOCK: case NF4FIFO: @@ -609,20 +640,20 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create break; } - READ_BUF(4); - create->cr_namelen = be32_to_cpup(p++); - READ_BUF(create->cr_namelen); - SAVEMEM(create->cr_name, create->cr_namelen); - if ((status = check_filename(create->cr_name, create->cr_namelen))) - return status; - + status = nfsd4_decode_component4(argp, &create->cr_name, + &create->cr_namelen); + if (status) + goto out; status = nfsd4_decode_fattr(argp, create->cr_bmval, &create->cr_iattr, &create->cr_acl, &create->cr_label, &create->cr_umask); if (status) goto out; - DECODE_TAIL; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static inline __be32 From patchwork Fri Nov 13 15:03:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903769 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B88B2139F for ; Fri, 13 Nov 2020 15:03:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9CD0122201 for ; Fri, 13 Nov 2020 15:03:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kp+WM69S" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726746AbgKMPDV (ORCPT ); Fri, 13 Nov 2020 10:03:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726770AbgKMPDT (ORCPT ); Fri, 13 Nov 2020 10:03:19 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2A1CC0613D1 for ; Fri, 13 Nov 2020 07:03:18 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id ek7so4697424qvb.6 for ; Fri, 13 Nov 2020 07:03:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=pM0PO+aDwWs+bvXXts7opUXIQ+5lV4ayeYZ6oNz/u5E=; b=kp+WM69SiVrGpCWBLZNyiRjjtlpbjDhb9X2nKKUrDEot/xLXqfKilS98omr/7V/jmA OqEs5Cy+h7oXG4aQMUZuXKI7sID3gYvjF7qJ/E+PqeLj4HRwW46mlLch5HwMca1vA72A /pmWwLAh75axELAZdCHiLa4GijsxkSo9v6/fhP/xk4wO02T8A8aGr3JlKdyp2FSUev6v Z/s8uSWH9y0+GjlyDSOzR+JAsBLoTJANM+XIxEJzmhnDTlC8A1bfNuSyKSAM2OD56c9r qpG5pLfUG3zNtZP/FFnoTaTLeEqv2vi4rJEvRUYQuEWZhfeck1s1tyDOgYGusU/Jv++M Vg7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=pM0PO+aDwWs+bvXXts7opUXIQ+5lV4ayeYZ6oNz/u5E=; b=GErr2EZm75aU4jV892Rg0MCdxLjaIxmJAIWyyiRmoTCOuX9pgR3x/mKLed3XCrYbF4 3nw32x/d+1HmsCae5BNXkQ0R0ZVd/uvQGcFtQbWV+JuWBlNsek2miRwiNjQ4ueF/z3oe KXjWif5qm1fRj9EUc0fje8Zsg9mPMjMYd1Q0Jf0FK65nFI+3mh+o77P4+SrDRyllF3IF 2aQOQC3/E+ZWlMD8Bvk/W6Wq/Ufr65vzCqaZQYU1FSyNssHwc4GxPnrH+JzyWZKgXg3/ NnQYwNenDPgqpbwkM30nD98d3otIMjJ8wFnP3ytTNltG6uFy5SqyNme4NX7DZ2LCGYH+ CCig== X-Gm-Message-State: AOAM5306Lrgxhvq1Kgo4pRfzQeYZC88+aCRRBkErbtnpfppStaaXreoC YXf31fAv+UfUongqPCz3XSXwjGYJV2s= X-Google-Smtp-Source: ABdhPJwgGY0XasAQhuSToIIo8mYjqxFvyMxNzS6J5qTTSnMKvuKkAhldMtIdsc8P9oKTdQme3GB5Ag== X-Received: by 2002:a0c:d414:: with SMTP id t20mr2859804qvh.34.1605279797669; Fri, 13 Nov 2020 07:03:17 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id e22sm6483316qtq.38.2020.11.13.07.03.16 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:17 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3GGf032667 for ; Fri, 13 Nov 2020 15:03:16 GMT Subject: [PATCH v1 10/61] NFSD: Replace READ* macros in nfsd4_decode_bitmap() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:16 -0500 Message-ID: <160527979624.6186.5009509470610259534.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 57 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 3cd5b2c843d8..bc36c746b293 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -246,29 +246,29 @@ nfsd4_decode_time(struct nfsd4_compoundargs *argp, struct timespec64 *tv) } static __be32 -nfsd4_decode_bitmap(struct nfsd4_compoundargs *argp, u32 *bmval) +nfsd4_decode_bitmap4(struct nfsd4_compoundargs *argp, u32 *bmval, + u32 bmlen) { - u32 bmlen; - DECODE_HEAD; + __be32 *p; + u32 len, i; - bmval[0] = 0; - bmval[1] = 0; - bmval[2] = 0; + for (i = 0; i < bmlen; i++) + bmval[i] = 0; - READ_BUF(4); - bmlen = be32_to_cpup(p++); - if (bmlen > 1000) + if (xdr_stream_decode_u32(argp->xdr, &len) < 0) + goto xdr_error; + if (len > 1000) goto xdr_error; - READ_BUF(bmlen << 2); - if (bmlen > 0) - bmval[0] = be32_to_cpup(p++); - if (bmlen > 1) - bmval[1] = be32_to_cpup(p++); - if (bmlen > 2) - bmval[2] = be32_to_cpup(p++); + p = xdr_inline_decode(argp->xdr, len << 2); + if (!p) + goto xdr_error; + for (i = 0; i < len && i < bmlen; i++) + bmval[i] = be32_to_cpup(p++); - DECODE_TAIL; + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; } static __be32 @@ -282,8 +282,9 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, DECODE_HEAD; iattr->ia_valid = 0; - if ((status = nfsd4_decode_bitmap(argp, bmval))) - return status; + status = nfsd4_decode_bitmap4(argp, bmval, 3); + if (status) + goto out; if (bmval[0] & ~NFSD_WRITEABLE_ATTRS_WORD0 || bmval[1] & ~NFSD_WRITEABLE_ATTRS_WORD1 @@ -665,7 +666,8 @@ nfsd4_decode_delegreturn(struct nfsd4_compoundargs *argp, struct nfsd4_delegretu static inline __be32 nfsd4_decode_getattr(struct nfsd4_compoundargs *argp, struct nfsd4_getattr *getattr) { - return nfsd4_decode_bitmap(argp, getattr->ga_bmval); + return nfsd4_decode_bitmap4(argp, getattr->ga_bmval, + ARRAY_SIZE(getattr->ga_bmval)); } static __be32 @@ -1060,7 +1062,9 @@ nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *read COPYMEM(readdir->rd_verf.data, sizeof(readdir->rd_verf.data)); readdir->rd_dircount = be32_to_cpup(p++); readdir->rd_maxcount = be32_to_cpup(p++); - if ((status = nfsd4_decode_bitmap(argp, readdir->rd_bmval))) + status = nfsd4_decode_bitmap4(argp, readdir->rd_bmval, + ARRAY_SIZE(readdir->rd_bmval)); + if (status) goto out; DECODE_TAIL; @@ -1206,7 +1210,9 @@ nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify { DECODE_HEAD; - if ((status = nfsd4_decode_bitmap(argp, verify->ve_bmval))) + status = nfsd4_decode_bitmap4(argp, verify->ve_bmval, + ARRAY_SIZE(verify->ve_bmval)); + if (status) goto out; /* For convenience's sake, we compare raw xdr'd attributes in @@ -1285,12 +1291,13 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, break; case SP4_MACH_CRED: /* spo_must_enforce */ - status = nfsd4_decode_bitmap(argp, - exid->spo_must_enforce); + status = nfsd4_decode_bitmap4(argp, exid->spo_must_enforce, + ARRAY_SIZE(exid->spo_must_enforce)); if (status) goto out; /* spo_must_allow */ - status = nfsd4_decode_bitmap(argp, exid->spo_must_allow); + status = nfsd4_decode_bitmap4(argp, exid->spo_must_allow, + ARRAY_SIZE(exid->spo_must_allow)); if (status) goto out; break; From patchwork Fri Nov 13 15:03:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903771 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 19F3C138B for ; Fri, 13 Nov 2020 15:03:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F2FA921D79 for ; Fri, 13 Nov 2020 15:03:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="alOntFCW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726770AbgKMPDZ (ORCPT ); Fri, 13 Nov 2020 10:03:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbgKMPDY (ORCPT ); Fri, 13 Nov 2020 10:03:24 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A676EC0613D1 for ; Fri, 13 Nov 2020 07:03:24 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id l2so9045788qkf.0 for ; Fri, 13 Nov 2020 07:03:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=M/KJauthuoIsBEhe95KGgmBfOzjpu3BiuGyio/qKBcg=; b=alOntFCW45mHTuLAYoR1fW3TpzEkSpLitMJbBovzx8SvXWCjqAUZg8DAPb5Tq3nm9m obtKltbE/BmXXmBeYdmnsSrR/POxYq8lEOU1WDWvBrQSCE213++j1vkHjNYPRh4vwmJS A52kr2tbzj5d3Y2kokgSo7J5sDF9XM8MuXeoymG0X3O3yKoXA+GkamyckQvvF2H+GNSP /Pvzv52WPt+EpmWzFh74ExvSOv6IGVrYHxqqLoNfEqCtdxZam2Kd2ZCkdNZrthfyWEQX ZC5/TymrPBoBujw6A8fLJEgdBcnZ8tyoAGVwHSYQ26W9z+QztVvYqEG0/SY0syq5BRUO ct7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=M/KJauthuoIsBEhe95KGgmBfOzjpu3BiuGyio/qKBcg=; b=QoOAeVFphr81t7GbNjt4xTd05uu94SZ8gBi28WATJuXjmNFzR0ibdbCZsCE7HfMFNA x4o5Vd+l4QAw9FCR0byvdz91vTzAT8MGqsAh15g1tl1eNqxG3LqKT390UcLXgcIKlWas StVUptsGGpAOrZknMynjfcrBy3NJx2kjA4OEzfa3KN88zr7U83Jfyimo+4oH/azIxjFW M0UKEbC3qdXHfVMyYTxqt0/Ky8bvHAe5DIs+F5ZkZMGJhhME/dViyxYvQ6hNWQO0ezqd umDbysImngbSHI+ss2x9mlAUrdEAH9h+NIen+CeirnfK2Rg6wo4FRtL9kqZsdBcjs2Dz vbTw== X-Gm-Message-State: AOAM530rcVpt6WDszpMJGgI+xXKqPoUPxtxXFEDqYkasQUfy6Jt7OXld BFVQ2+TMUtaIWzfQRChlC33AkXNg0No= X-Google-Smtp-Source: ABdhPJyL3w/Qf0Hx9Re9Wdv6XRFk/QeZikm+HDiXMinio2LFjEFRIgNwkLv5e/03q/JqBtG8vYYnDQ== X-Received: by 2002:a37:58c6:: with SMTP id m189mr2435911qkb.129.1605279803552; Fri, 13 Nov 2020 07:03:23 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id w184sm2493342qkd.47.2020.11.13.07.03.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:22 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3L8c032670 for ; Fri, 13 Nov 2020 15:03:21 GMT Subject: [PATCH v1 11/61] NFSD: Replace READ* macros in nfsd4_decode_link() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:21 -0500 Message-ID: <160527980131.6186.7010248173254076345.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index bc36c746b293..970c647f8df6 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -673,16 +673,7 @@ nfsd4_decode_getattr(struct nfsd4_compoundargs *argp, struct nfsd4_getattr *geta static __be32 nfsd4_decode_link(struct nfsd4_compoundargs *argp, struct nfsd4_link *link) { - DECODE_HEAD; - - READ_BUF(4); - link->li_namelen = be32_to_cpup(p++); - READ_BUF(link->li_namelen); - SAVEMEM(link->li_name, link->li_namelen); - if ((status = check_filename(link->li_name, link->li_namelen))) - return status; - - DECODE_TAIL; + return nfsd4_decode_component4(argp, &link->li_name, &link->li_namelen); } static __be32 From patchwork Fri Nov 13 15:03:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903773 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BB4F8138B for ; Fri, 13 Nov 2020 15:03:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9FB2821D79 for ; Fri, 13 Nov 2020 15:03:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sH3VF6xn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726160AbgKMPDa (ORCPT ); Fri, 13 Nov 2020 10:03:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726741AbgKMPD3 (ORCPT ); Fri, 13 Nov 2020 10:03:29 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9DD02C0613D1 for ; Fri, 13 Nov 2020 07:03:29 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id r7so9038177qkf.3 for ; Fri, 13 Nov 2020 07:03:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=htbRPpqNGWgLCgocdrmBD/ExvwxMXPfld3y9lISCIGU=; b=sH3VF6xnsI4YWuDXVanfS4sm781njH17DwHMI7VaTjLXmR3PFxiY6RIiJhYrF+s5Jx v2KgWZkDnDM+DJu+2dYNci7ZIUlMEgNPshg/h7rSDWqE7R6jjnmykGghxm1wqr2LNAk1 ZAN407IIKwi51V7Gf3dBOCa4NpaxdAjGAw6ydc9N996RFBprp7uu9md+l8yfG1CjtE1r a3ieWGrbczx7Tk6V6cmiE7tgIiSWKxzlVWByK3JXqBDjePdpUyI1Ut9OgKXITi9m7bmA RzfLQthnkRNnH2HPvjg64x9ZA4iE50a1Zf3TYoHiQW+awt65IZ9WGioFd1IT9pBu5CUb LaEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=htbRPpqNGWgLCgocdrmBD/ExvwxMXPfld3y9lISCIGU=; b=qzFUl0N4dWw4DLh7643U6z48TsX6cmUGUgIN2V4pCj9XSqePg8Vjea4LXabIlB7yPs pQlyI+r1Kou0IazKM5kKn1TBfG+/i+I1+9vGfAwicQ67lYYzgG358QGhy3RnSqt+F/yR mMjygM6L6wFCRCqSVnjQW0Rt9fO62Wl8CgkHd4jtMXU+VNUJFsXq3Ouw7Cld46bBk90e 4c5UT9h+pvAPseV57DmXvfpehh/4oOxosWq1LLoLLxprqizkKIgEYEdss9taP+NLZf+A GlEbjvDIrJ7s9JOede3b+Ft+WLxpuzThknvcKZ12/2VkxS7A6moRvCwVRftkq1V4r4fo 8/OA== X-Gm-Message-State: AOAM532KxoGQ4iou3S/i9GyxXYXA0ZkOCr5zhisKdkcBs/7yn6t6z8Vf qsNVLSS55ZrtIO7QLtREgjHRTcIarwE= X-Google-Smtp-Source: ABdhPJzabFdJgr9nxPnF1fitnHUHSI/5RkQF+op+FJpSH5dIMZY8emvd2jVrYxjybmokyuVVpCek2w== X-Received: by 2002:a37:96c6:: with SMTP id y189mr2358591qkd.87.1605279808255; Fri, 13 Nov 2020 07:03:28 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id d66sm5973715qke.132.2020.11.13.07.03.27 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:27 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3QPp032673 for ; Fri, 13 Nov 2020 15:03:26 GMT Subject: [PATCH v1 12/61] NFSD: Relocate nfsd4_decode_opaque() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:26 -0500 Message-ID: <160527980659.6186.2801085824570006023.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Enable nfsd4_decode_opaque() to be used in more decoders, and replace the READ* macros in nfsd4_decode_opaque(). Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 970c647f8df6..c621a38e7874 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -205,6 +205,36 @@ static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes) return ret; } + +/* + * NFSv4 basic data type decoders + */ + +static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o) +{ + __be32 *p; + u32 len; + + if (xdr_stream_decode_u32(argp->xdr, &len) < 0) + goto xdr_error; + if (len == 0 || len > NFS4_OPAQUE_LIMIT) + return nfserr_bad_xdr; + p = xdr_inline_decode(argp->xdr, len); + if (!p) + goto xdr_error; + o->data = svcxdr_tmpalloc(argp, len); + if (!o->data) + goto nomem; + o->len = len; + memcpy(o->data, p, len); + + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; +} + static __be32 nfsd4_decode_component4(struct nfsd4_compoundargs *argp, char **namp, u32 *lenp) { @@ -837,22 +867,6 @@ static __be32 nfsd4_decode_share_deny(struct nfsd4_compoundargs *argp, u32 *x) return nfserr_bad_xdr; } -static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_netobj *o) -{ - DECODE_HEAD; - - READ_BUF(4); - o->len = be32_to_cpup(p++); - - if (o->len == 0 || o->len > NFS4_OPAQUE_LIMIT) - return nfserr_bad_xdr; - - READ_BUF(o->len); - SAVEMEM(o->data, o->len); - - DECODE_TAIL; -} - static __be32 nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) { From patchwork Fri Nov 13 15:03:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903775 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 05006138B for ; Fri, 13 Nov 2020 15:03:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D99C522201 for ; Fri, 13 Nov 2020 15:03:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oxpXnTuy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726781AbgKMPDf (ORCPT ); Fri, 13 Nov 2020 10:03:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35980 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726741AbgKMPDf (ORCPT ); Fri, 13 Nov 2020 10:03:35 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D041DC0613D1 for ; Fri, 13 Nov 2020 07:03:34 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id t191so9028815qka.4 for ; Fri, 13 Nov 2020 07:03:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=yKV9gezX41PryAOPaPnMSnhKk29MXDTt/s1weKRSU1Y=; b=oxpXnTuyGi6i2XA7UmmOkLNsfqbg0GcLmHreHCbRTUqylKUuRTRRZGA4kJ57h37pWv ttb7w+VFFJ8m/461XEJVGQ6FK1y9igHok8onio1IFbakI95lWLtzSkGGA6XSrJN8/7rv 0L9u9sEKsWk7s6Zt3tZHEGdBMbVO19vfdTl1r4IPdrQ8w3Sc5z2oTLgC9oLKmUPBtxyo fWu+3lxrkIpFxoZ6c/oGRdLvXFgDFG2fencmP4hy9tTPOVwzKDVJgwMGlZ67lp6ZcBpX WhlVMywjaVQNrOYSzcpSUCc/LWHOYGuMd7L2uMhxr/mrbn3vlTdj11edk4zeiJTcwxJ0 pcaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=yKV9gezX41PryAOPaPnMSnhKk29MXDTt/s1weKRSU1Y=; b=XgGrsEFOMGl3+w4cP45CyYwWMaDC8PamH5oKoTqpuWTJCsqV8LdrD/MJ07shhjBzfV bcRmM7J6nNVmpBJC636FTBiTxR/aOc3nWy+B1NKqX6fvS/LpspxfAnwGEi6YO6dgUpfj u5tQfe5rwzS7hAYP3s78PC09DzuSL6KMT0+P5ROpvovjXiPAhOQsgDY2dYSybPQIGyNm 68NvkmNw7p3nTZAf/4iyhy+IktijmSzrbwgF/rQDJI8Pcgx9lYIZ481Pwrxkg051NL1o wmGXR7PUGMIkj8pGznFOlDa+FB/cfUOH+rchhdtltwH98bOcf0drqevfoHxBAyjTGtHw VpqA== X-Gm-Message-State: AOAM532KpnCmMRC9p5AI3fcT9ftImM0hDw80G6kmzJgxEVahRFzHRfAa cabJbWQqCEEdycoZHzhlJWBGRIi6Y4M= X-Google-Smtp-Source: ABdhPJxoBR2Fmo/5amlJR2iDz0plFUsN7ALCBwi7ZG7qNuTPgcluvwjpX8MvFwkrW4EV1o2YhlGYjg== X-Received: by 2002:a37:4741:: with SMTP id u62mr2310816qka.155.1605279813303; Fri, 13 Nov 2020 07:03:33 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id b12sm6643685qtj.12.2020.11.13.07.03.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:32 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3VGZ032676 for ; Fri, 13 Nov 2020 15:03:31 GMT Subject: [PATCH v1 13/61] NFSD: Replace READ* macros in nfsd4_decode_lock() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:31 -0500 Message-ID: <160527981188.6186.5472938610268206294.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 121 +++++++++++++++++++++++++++++++++------------ include/uapi/linux/nfs4.h | 1 2 files changed, 91 insertions(+), 31 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c621a38e7874..35329e3d1339 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -484,6 +484,32 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, DECODE_TAIL; } +static __be32 nfsd4_decode_clientid4(struct nfsd4_compoundargs *argp, + clientid_t *clientid) +{ + __be32 *p; + + p = xdr_inline_decode(argp->xdr, NFS4_CLIENTID_SIZE); + if (!p) + goto xdr_error; + memcpy(clientid, p, sizeof(*clientid)); + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +} + +static __be32 nfsd4_decode_state_owner4(struct nfsd4_compoundargs *argp, + clientid_t *clientid, + struct xdr_netobj *owner) +{ + __be32 status; + + status = nfsd4_decode_clientid4(argp, clientid); + if (status) + return status; + return nfsd4_decode_opaque(argp, owner); +} + static __be32 nfsd4_decode_stateid4(struct nfsd4_compoundargs *argp, stateid_t *sid) { @@ -706,44 +732,77 @@ nfsd4_decode_link(struct nfsd4_compoundargs *argp, struct nfsd4_link *link) return nfsd4_decode_component4(argp, &link->li_name, &link->li_namelen); } +static __be32 +nfsd4_decode_open_to_lock_owner4(struct nfsd4_compoundargs *argp, + struct nfsd4_lock *lock) +{ + __be32 status; + + lock->lk_is_new = 1; + + if (xdr_stream_decode_u32(argp->xdr, &lock->lk_new_open_seqid) < 0) + goto xdr_error; + status = nfsd4_decode_stateid4(argp, &lock->lk_new_open_stateid); + if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &lock->lk_new_lock_seqid) < 0) + goto xdr_error; + status = nfsd4_decode_state_owner4(argp, &lock->lk_new_clientid, + &lock->lk_new_owner); + +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + +static __be32 +nfsd4_decode_exist_lock_owner4(struct nfsd4_compoundargs *argp, + struct nfsd4_lock *lock) +{ + __be32 status; + + lock->lk_is_new = 0; + + status = nfsd4_decode_stateid4(argp, &lock->lk_old_lock_stateid); + if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &lock->lk_old_lock_seqid) < 0) + goto xdr_error; + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) { - DECODE_HEAD; + __be32 *p; - /* - * type, reclaim(boolean), offset, length, new_lock_owner(boolean) - */ - READ_BUF(28); - lock->lk_type = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &lock->lk_type) < 0) + goto xdr_error; if ((lock->lk_type < NFS4_READ_LT) || (lock->lk_type > NFS4_WRITEW_LT)) goto xdr_error; - lock->lk_reclaim = be32_to_cpup(p++); - p = xdr_decode_hyper(p, &lock->lk_offset); - p = xdr_decode_hyper(p, &lock->lk_length); - lock->lk_is_new = be32_to_cpup(p++); - - if (lock->lk_is_new) { - READ_BUF(4); - lock->lk_new_open_seqid = be32_to_cpup(p++); - status = nfsd4_decode_stateid4(argp, &lock->lk_new_open_stateid); - if (status) - return status; - READ_BUF(8 + sizeof(clientid_t)); - lock->lk_new_lock_seqid = be32_to_cpup(p++); - COPYMEM(&lock->lk_new_clientid, sizeof(clientid_t)); - lock->lk_new_owner.len = be32_to_cpup(p++); - READ_BUF(lock->lk_new_owner.len); - READMEM(lock->lk_new_owner.data, lock->lk_new_owner.len); - } else { - status = nfsd4_decode_stateid4(argp, &lock->lk_old_lock_stateid); - if (status) - return status; - READ_BUF(4); - lock->lk_old_lock_seqid = be32_to_cpup(p++); - } + p = xdr_inline_decode(argp->xdr, sizeof(__be32)); + if (!p) + goto xdr_error; + lock->lk_reclaim = (*p == xdr_zero) ? 0 : 1; + if (xdr_stream_decode_u64(argp->xdr, &lock->lk_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lock->lk_length) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, sizeof(__be32)); + if (!p) + goto xdr_error; + if (*p != xdr_zero) + return nfsd4_decode_open_to_lock_owner4(argp, lock); + return nfsd4_decode_exist_lock_owner4(argp, lock); - DECODE_TAIL; +xdr_error: + return nfserr_bad_xdr; } static __be32 diff --git a/include/uapi/linux/nfs4.h b/include/uapi/linux/nfs4.h index ed5415e0f1c1..31072a653436 100644 --- a/include/uapi/linux/nfs4.h +++ b/include/uapi/linux/nfs4.h @@ -21,6 +21,7 @@ #define NFS4_STATEID_SEQID_SIZE 4 #define NFS4_STATEID_OTHER_SIZE 12 #define NFS4_STATEID_SIZE (NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE) +#define NFS4_CLIENTID_SIZE 8 #define NFS4_FHSIZE 128 #define NFS4_MAXPATHLEN PATH_MAX #define NFS4_MAXNAMLEN NAME_MAX From patchwork Fri Nov 13 15:03:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903777 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E8138139F for ; Fri, 13 Nov 2020 15:03:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CBC6522201 for ; Fri, 13 Nov 2020 15:03:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ddgkbcRD" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726725AbgKMPDk (ORCPT ); Fri, 13 Nov 2020 10:03:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35996 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726731AbgKMPDk (ORCPT ); Fri, 13 Nov 2020 10:03:40 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DEAD4C0613D1 for ; Fri, 13 Nov 2020 07:03:39 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id d9so9007426qke.8 for ; Fri, 13 Nov 2020 07:03:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=7F7toeXXpj1cwJokQan7OnHmRjpiJzeXTetH7DOMuLc=; b=ddgkbcRDsLXPLysqDknMaYN69+Wb+yFpSLhFAEKZ7cqf7bY7IUtIk/S9z3QwVC91zT ClDz6FXi+AaHZwz+g8HSDnAxg1Cu3dXlCjqxLPd3htX7yEKf/LUoqlaxa4rp6RW8Afu8 Mio2R56gcFnVMSxBYZXprtG4JEm1z68xVPhuufC/FFCBwuZrhwAqVxFDBa+fTCjyXmbd UP1SE9edV4S6fDp6DK4nLk0APwg77yQdQbDMfKFIYaQTsOrWfzLOGVMysSf3kzlR07e1 xQ4TDCiFck7kY4oriDM07ATXNzJJj/NB+j4HmD+T1U9wwaW2xYV09nord3JU2IBTRLFf N8CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=7F7toeXXpj1cwJokQan7OnHmRjpiJzeXTetH7DOMuLc=; b=BU96oKPpAq2C/gn3O1JOFBrLwCoh2gzXz1uYe0hSUA5UfNysoBshdRXr2XdaMa1tGt pPxN2XIIu+aETwA9zA8ojXOlGecftYJPeEdrNH+fEk6fVmKsVL+PMCZjeeDByq3r8Q1f 8MD9Qq5M2TrGFiHAVKlpysoJqG9eia/PRYozb/waXkMe2HuYI8KShLVeOEkGqFB+DPT5 iN8ys1IXrlWjUVJ56nUBIM/EoNkf8tqzvH76jv7lTMSuYEdvW+3Eb3MmgaEyRScCoNiW RfrdgPmACaQ7UqUXmHQCW4gY46sHQXs9yi9EGKtaS8yMbGyMfbyAiS3Tvj+MwiIiqYU3 3BfQ== X-Gm-Message-State: AOAM533PtCJAgEoDAg8g5ugfcaMErJOBcAF0UFPF8cmaM6DunLuejkTF P4Q/mGLksiH7LtIvUwSDe6xBqXSTJyA= X-Google-Smtp-Source: ABdhPJwKarONXvy/krxil4HAm79cI/5QeiL87LJLd4CXDwfStCqVBahgWPzgHgMujyO+l5GOcqnt6w== X-Received: by 2002:a05:620a:140d:: with SMTP id d13mr2449156qkj.470.1605279818719; Fri, 13 Nov 2020 07:03:38 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id h6sm6399460qtm.68.2020.11.13.07.03.37 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:38 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3aeQ032679 for ; Fri, 13 Nov 2020 15:03:36 GMT Subject: [PATCH v1 14/61] NFSD: Replace READ* macros in nfsd4_decode_lockt() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:36 -0500 Message-ID: <160527981695.6186.15360339795390564596.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 35329e3d1339..3c4777cb4d38 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -808,20 +808,19 @@ nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) static __be32 nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt) { - DECODE_HEAD; - - READ_BUF(32); - lockt->lt_type = be32_to_cpup(p++); - if((lockt->lt_type < NFS4_READ_LT) || (lockt->lt_type > NFS4_WRITEW_LT)) + if (xdr_stream_decode_u32(argp->xdr, &lockt->lt_type) < 0) + goto xdr_error; + if ((lockt->lt_type < NFS4_READ_LT) || (lockt->lt_type > NFS4_WRITEW_LT)) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lockt->lt_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lockt->lt_length) < 0) goto xdr_error; - p = xdr_decode_hyper(p, &lockt->lt_offset); - p = xdr_decode_hyper(p, &lockt->lt_length); - COPYMEM(&lockt->lt_clientid, 8); - lockt->lt_owner.len = be32_to_cpup(p++); - READ_BUF(lockt->lt_owner.len); - READMEM(lockt->lt_owner.data, lockt->lt_owner.len); + return nfsd4_decode_state_owner4(argp, &lockt->lt_clientid, + &lockt->lt_owner); - DECODE_TAIL; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:03:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903781 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DAC98138B for ; Fri, 13 Nov 2020 15:03:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BC62522201 for ; Fri, 13 Nov 2020 15:03:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ErXviicw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726731AbgKMPDz (ORCPT ); Fri, 13 Nov 2020 10:03:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726723AbgKMPDz (ORCPT ); Fri, 13 Nov 2020 10:03:55 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 330BAC0613D1 for ; Fri, 13 Nov 2020 07:03:45 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id 11so9021055qkd.5 for ; Fri, 13 Nov 2020 07:03:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=J7AqVh71RZj2ejlzrSQPwoCvFZG1dyKB9yUnpjupjtU=; b=ErXviicww9zgjRf49Q54h4P0hC8t1KwBXqr96rDQmjhq7iK+EUEWt0eQZerXZbBbKb 1MjlNq1BfMHXft3B1PmTUDjcPqcKzaQX8RdcMceolz4NNUPsEHkXgDtXu9uPuEwK8tSV P0QFRoS7PFzN3JxDjeO6UDMRptl81NuPFZtclXKB2LuRSKPwNwx7uuGul5hmQRbKfiFc /1JfM0YJCAiLTkfn+HoRqgd2QQeFquEgZq1kzzMVKBgD04mnR2bT4csvcib7szXuIq5J eW5pHITwTSfhdx7E7bpiywGqBR1MFproBvXWTE2g0uC7CyUlx+5gg7crJn6G7LQbshY1 Y+Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=J7AqVh71RZj2ejlzrSQPwoCvFZG1dyKB9yUnpjupjtU=; b=Lj8CRGQJuy8aRSZlnadrYgawUTx/dDkUTi5e85ewQ7yDb1F6ZnQ3+1diJAkzbvXc5c icMIzZDtlTUtvosT0pbbQRbVFq+r8dUTzKa9NOgjzezviyhFwmvuHgU+SQiU1CQxeCC9 hJSkChMOYEN5gMUXj+F0YI5OXKR/BRYRh9uZfK30i5MNjFvEVRbxsiE0U32xWDXByoDa VvELJxPwKrNzUDlCfBrmTEroW1w7jORbd5uE/UX57fVie2SQdFajsUogZFWyrIXVK5lF X27lGMRx6EGTIMZY6svGQlXtnAs5Ny1z+tBrQyWQht0HMeimuMAvDLFmbNYDvdI22GqG jyjA== X-Gm-Message-State: AOAM5304iD3HHkkNMlQQ/fN2xvurKN5NgGWUS64fFFFwweYJnjSrmzdt rCdspcFTxaoP2qZenfXbLleile6M34M= X-Google-Smtp-Source: ABdhPJzqRCxUehE0W0ToJc3lOJTTmJW9fN4vWSxsxTHTHj5a+kV6inTDnmBHQvD1BZnjLyaaoddrOA== X-Received: by 2002:a37:bfc4:: with SMTP id p187mr2305175qkf.417.1605279823921; Fri, 13 Nov 2020 07:03:43 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id c53sm7530704qta.36.2020.11.13.07.03.43 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:43 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3g3v032682 for ; Fri, 13 Nov 2020 15:03:42 GMT Subject: [PATCH v1 15/61] NFSD: Replace READ* macros in nfsd4_decode_locku() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:42 -0500 Message-ID: <160527982223.6186.1602052473605619044.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 3c4777cb4d38..88a8d002303c 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -826,21 +826,27 @@ nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt) static __be32 nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku) { - DECODE_HEAD; + __be32 status; - READ_BUF(8); - locku->lu_type = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &locku->lu_type) < 0) + goto xdr_error; if ((locku->lu_type < NFS4_READ_LT) || (locku->lu_type > NFS4_WRITEW_LT)) goto xdr_error; - locku->lu_seqid = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &locku->lu_seqid) < 0) + goto xdr_error; status = nfsd4_decode_stateid4(argp, &locku->lu_stateid); if (status) - return status; - READ_BUF(16); - p = xdr_decode_hyper(p, &locku->lu_offset); - p = xdr_decode_hyper(p, &locku->lu_length); + goto out; + if (xdr_stream_decode_u64(argp->xdr, &locku->lu_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &locku->lu_length) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:03:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903779 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 79F03139F for ; Fri, 13 Nov 2020 15:03:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5BDE022201 for ; Fri, 13 Nov 2020 15:03:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FpMXDMpb" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726741AbgKMPDu (ORCPT ); Fri, 13 Nov 2020 10:03:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726731AbgKMPDu (ORCPT ); Fri, 13 Nov 2020 10:03:50 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E908C0617A6 for ; Fri, 13 Nov 2020 07:03:50 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id 199so9004787qkg.9 for ; Fri, 13 Nov 2020 07:03:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=w/WxUfgtJ7b+Xw9H9X3rk+hwovNFukJ15YvbIyHDjLU=; b=FpMXDMpb82r57E7VgpZ3lTp8rAQRO4Rz09nAtTUo6Pj22WMhdKAtimWtUEnaysU8v0 gV1YNqaBikJ+fxYzouox090T8I3nE8P7tmoLFD3m6Zfgge9JscmawAXqJv0+Yi4ViSHV UoSYnrbdjwWS50H4qi7bJxwS/lFE5V6lugSDIRaYW8fFgkKaTLsdn+aCl69Sznshu82T IbXPRbyYXRDkReyHPLU5kpAB0mGOKqME0FmueQnB5uA6gx2vsQbwOpc+lU82O736sqxD KJRNAKH0RAe51U3kQjek8oADdD7R1ZbBdZiVhBaH+MTKVlm4pZ7i5KfDL7cvvRE9jzGu W63g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=w/WxUfgtJ7b+Xw9H9X3rk+hwovNFukJ15YvbIyHDjLU=; b=i9cWXXgAt8lKXIL64muY1MQIQEKKwePhExU6Zd8nCoUfPfJsX4XcsfA0MQ3iY7kgGX FlzfaUvZau4ubkdgASAc88b8gbCc2mrsZSHIOG0pNcdaEDIP+ib92OpZUz+PLaqAlMVY a6w+fPDogolipZLV2z4cIUfGwBbgWpycRifk9xgZALUJedGYWwYZN2x+CTegkdag5yxV 9d24CNBQLACvR4JhcSZYVtS9rDfSxFXjsLtXKHMqzeP4ZktJYFZYIecUJjY03Nstd+Nr 4RZ7Va3GKHU/djV8ai2cwPIOJdYE4S392kxoew5H9EQEwXic12otda/OaJlrgr2sNeHV i6Nw== X-Gm-Message-State: AOAM533CFDYilMUkOyLWbRW2soq6vmEMuH2npcsWNhw5+6oh2h0xJktx WPVj91a2B8hRlccqiELkrZa9vL/JQJs= X-Google-Smtp-Source: ABdhPJx5oqUKRuf48PaUjR1mF6nilRpxdvtLIpVZryzzX4R7SGrr9pInCsgwQiN60U1tv2rX5BsZZQ== X-Received: by 2002:a37:58c6:: with SMTP id m189mr2438086qkb.129.1605279829100; Fri, 13 Nov 2020 07:03:49 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id n187sm7136887qkc.133.2020.11.13.07.03.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:48 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3lXo032685 for ; Fri, 13 Nov 2020 15:03:47 GMT Subject: [PATCH v1 16/61] NFSD: Replace READ* macros in nfsd4_decode_lookup() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:47 -0500 Message-ID: <160527982752.6186.11841203632390056940.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 88a8d002303c..6bb6ffa676b7 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -852,16 +852,7 @@ nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku) static __be32 nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, struct nfsd4_lookup *lookup) { - DECODE_HEAD; - - READ_BUF(4); - lookup->lo_len = be32_to_cpup(p++); - READ_BUF(lookup->lo_len); - SAVEMEM(lookup->lo_name, lookup->lo_len); - if ((status = check_filename(lookup->lo_name, lookup->lo_len))) - return status; - - DECODE_TAIL; + return nfsd4_decode_component4(argp, &lookup->lo_name, &lookup->lo_len); } static __be32 nfsd4_decode_share_access(struct nfsd4_compoundargs *argp, u32 *share_access, u32 *deleg_want, u32 *deleg_when) From patchwork Fri Nov 13 15:03:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903783 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7841016C1 for ; Fri, 13 Nov 2020 15:03:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5CED22222F for ; Fri, 13 Nov 2020 15:03:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IY3RVMHS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726754AbgKMPDz (ORCPT ); Fri, 13 Nov 2020 10:03:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726723AbgKMPDz (ORCPT ); Fri, 13 Nov 2020 10:03:55 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4520DC0613D1 for ; Fri, 13 Nov 2020 07:03:55 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id j31so6824310qtb.8 for ; Fri, 13 Nov 2020 07:03:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=ucamVjvC0tfxLJKzNovDuj/v5WLm6p+0P1wiZNeN7Ec=; b=IY3RVMHSUgzZnIWf4jXuFETeDVV+PR8IvasL7cyXW+ZUjK3iFbzOg5DC/jXMoR6cea WmHB2OdNQqj1z7CPP4Rc+rK5tFyHHsQX61d7wdF4yvD1FPgrzVmiAc/LfQYL0InU4RD/ BPBs6fKGybGM3wqXEgMsnFkLcWmJhnIyKH09/BrZ9BhsBdnh+dKlpbADkvYpppPgVaF5 3IfeG8lyiTc+z+El5ah4hVW9wzPDjcXxQR11so4ylrvwZSNpEHTIiKTh/CuAjeTZoKlt 1wZtTaBV3p7zA9gFUQDf4Vux5LkT11WQAd/+vZ3OwKVPoN2eYpR+zfUtea1GxUYLxCu4 9PqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=ucamVjvC0tfxLJKzNovDuj/v5WLm6p+0P1wiZNeN7Ec=; b=WjA1j36WO2tkXJRJx1HSLHfqdb03m2MTPll0ZvJ7pZcHZR5TkYzcPGOxlamZJOkEkM o7xrkCLGvXPIg1dG0GNGbbyHJ2mgztzNxBRJxziT+fI1N+IxUnimYSrLfGU6sKj/Itkf E/fPFq5hHhGAcdNCcTjl8hPSliEqOIyx9a++stShfmcLH2SobajDnQgwCooerhAuYM66 OAHVD+Vv0axppzSXC8AgCSU0t2bls3EMMdvsot9CO92KyTD70x5gQLgxHHK498TDtcQf UzqimAndJmZ0q/d3u6PjVHzsJ3ovB/yAKqADt3Qk5+E7+jadvw/dNbhNiGeakrKNlr5/ 2s7Q== X-Gm-Message-State: AOAM531WvL2a32gSPeBHznC1EY+x6SIjGvVwsEvOf6beu3ItEB8mRAjl grnxRm/qCImINZDl2fw6+Orie/DPNu8= X-Google-Smtp-Source: ABdhPJyyvxR7oLnj6/QQzHhdgRpHy4wGqdDM+GNp3ogaYSubdRxBXIiAsb1gOR8Jysyxc8g8N4/U5w== X-Received: by 2002:ac8:8c7:: with SMTP id y7mr2314906qth.278.1605279834096; Fri, 13 Nov 2020 07:03:54 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id q15sm6776646qki.13.2020.11.13.07.03.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:53 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3q5O032688 for ; Fri, 13 Nov 2020 15:03:52 GMT Subject: [PATCH v1 17/61] NFSD: Replace READ* macros in nfsd4_decode_time() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:52 -0500 Message-ID: <160527983260.6186.16461032871828686896.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 6bb6ffa676b7..69ff666a5695 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -262,17 +262,22 @@ static __be32 nfsd4_decode_component4(struct nfsd4_compoundargs *argp, } static __be32 -nfsd4_decode_time(struct nfsd4_compoundargs *argp, struct timespec64 *tv) +nfsd4_decode_nfstime4(struct nfsd4_compoundargs *argp, struct timespec64 *tv) { - DECODE_HEAD; + __be32 *p; - READ_BUF(12); + p = xdr_inline_decode(argp->xdr, sizeof(__be64) + sizeof(__be32)); + if (!p) + goto xdr_error; p = xdr_decode_hyper(p, &tv->tv_sec); tv->tv_nsec = be32_to_cpup(p++); if (tv->tv_nsec >= (u32)1000000000) - return nfserr_inval; - - DECODE_TAIL; + goto inval_arg; + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +inval_arg: + return nfserr_inval; } static __be32 @@ -413,7 +418,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, switch (dummy32) { case NFS4_SET_TO_CLIENT_TIME: len += 12; - status = nfsd4_decode_time(argp, &iattr->ia_atime); + status = nfsd4_decode_nfstime4(argp, &iattr->ia_atime); if (status) return status; iattr->ia_valid |= (ATTR_ATIME | ATTR_ATIME_SET); @@ -432,7 +437,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, switch (dummy32) { case NFS4_SET_TO_CLIENT_TIME: len += 12; - status = nfsd4_decode_time(argp, &iattr->ia_mtime); + status = nfsd4_decode_nfstime4(argp, &iattr->ia_mtime); if (status) return status; iattr->ia_valid |= (ATTR_MTIME | ATTR_MTIME_SET); @@ -1417,7 +1422,7 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, goto xdr_error; /* nii_date */ - status = nfsd4_decode_time(argp, &exid->nii_time); + status = nfsd4_decode_nfstime4(argp, &exid->nii_time); if (status) goto xdr_error; } @@ -1649,7 +1654,7 @@ nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp, READ_BUF(4); timechange = be32_to_cpup(p++); if (timechange) { - status = nfsd4_decode_time(argp, &lcp->lc_mtime); + status = nfsd4_decode_nfstime4(argp, &lcp->lc_mtime); if (status) return status; } else { From patchwork Fri Nov 13 15:03:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903785 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2441C139F for ; Fri, 13 Nov 2020 15:04:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 01F6A2222F for ; Fri, 13 Nov 2020 15:04:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WuIaXYa1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726439AbgKMPEI (ORCPT ); Fri, 13 Nov 2020 10:04:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726324AbgKMPEI (ORCPT ); Fri, 13 Nov 2020 10:04:08 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DAD00C0613D1 for ; Fri, 13 Nov 2020 07:04:02 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id v143so9047433qkb.2 for ; Fri, 13 Nov 2020 07:04:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=mga2qOkdVNPuU9dbeDx1AezGJDWlQxIZQZM6LJ2fy5Q=; b=WuIaXYa1AOc1bvIqwaS7T4uOnJh6QwJ/TL1dp2mM4cIgHK+t4h/ZrtL4ItmGHcvIGF RfPt3ayHY16QOSA6kdZRVBt4xn0pA/q8crtdQxc5qEt6fVkCYmTNJkKnID//4XPvaxkf VUHaQKhq/+3vHSRMJCAfkCV4EhdJEPLA9JYzMGRKdzLwCSHrw0jAV2OjG8xiMKkBC18x Rc6ucUKE0B2Z16p8HE4CXJTZkd4gFYnQgHcZFsPPProSkpnvBCqBdnwoleiV9PKRTpZ/ mtu5h16B+Nb+2IN/2GSKIPfy69MYpD27dZxBxefzxFPP2UobSimdDvBgb85b4c8oyJZB kqGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=mga2qOkdVNPuU9dbeDx1AezGJDWlQxIZQZM6LJ2fy5Q=; b=S+l88k25Mj2ccungY8JOAC7o0si/Q+3UEj9NVZakueuHuF7DvNOElVzaQmkceHHmFH c6qoG6CmHWeetZzY8eYX95dqAb9l/cplPFCZ/2Hj6/6QRav06w7qoL6PjUI1KqZEaphV Lg68VsXBCrz0ujUYFoACUe6kq2Z4NYB/DEYyGzmUYQUj6itOkOq3fCrtRwMc6DTq4EpX cCuo5eEXZirXzaW30+YxhjVREJGy1aseTbS2XgwhqwvkCzTFouck1n9fsKfgpSm47Xmk q46xtZwhEDL7dKUSjngqxodbDruu6VjK0z/J+qK2B9+38ZU+uLgtwNoJwClQXL8Jw6XR RZLA== X-Gm-Message-State: AOAM531jmB1y+9RBZ4v5wbx9iQJRw1yzXniXmeIhHw7bMcFo27vNObWj 9iYZJBJgNDz52m56ZpuOl0itQ28jXTk= X-Google-Smtp-Source: ABdhPJyl9h9qBknsxI7X4wyzsx3oLxGW+e/WF1DE9Kpu/MWm54H84l6TqK/UZuoEbiUvcmC87XZtxA== X-Received: by 2002:a37:4c15:: with SMTP id z21mr2428863qka.349.1605279839881; Fri, 13 Nov 2020 07:03:59 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id k4sm2865438qki.2.2020.11.13.07.03.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:03:58 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF3v5N032691 for ; Fri, 13 Nov 2020 15:03:57 GMT Subject: [PATCH v1 18/61] NFSD: Replace READ* macros in nfsd4_decode_fattr() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:03:57 -0500 Message-ID: <160527983767.6186.11558132351326954796.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 187 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 108 insertions(+), 79 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 69ff666a5695..9a6116cee94b 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -307,17 +307,15 @@ nfsd4_decode_bitmap4(struct nfsd4_compoundargs *argp, u32 *bmval, } static __be32 -nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, - struct iattr *iattr, struct nfs4_acl **acl, - struct xdr_netobj *label, int *umask) +nfsd4_decode_fattr4(struct nfsd4_compoundargs *argp, u32 *bmval, u32 bmlen, + struct iattr *iattr, struct nfs4_acl **acl, + struct xdr_netobj *label, int *umask) { - int expected_len, len = 0; - u32 dummy32; - char *buf; + u32 dummy32, expected_len, len; + __be32 *p, status; - DECODE_HEAD; iattr->ia_valid = 0; - status = nfsd4_decode_bitmap4(argp, bmval, 3); + status = nfsd4_decode_bitmap4(argp, bmval, bmlen); if (status) goto out; @@ -329,21 +327,25 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, return nfserr_attrnotsupp; } - READ_BUF(4); - expected_len = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &expected_len) < 0) + goto xdr_error; + len = 0; if (bmval[0] & FATTR4_WORD0_SIZE) { - READ_BUF(8); - len += 8; - p = xdr_decode_hyper(p, &iattr->ia_size); + p = xdr_inline_decode(argp->xdr, sizeof(__be64)); + if (!p) + goto xdr_error; + len += sizeof(__be64); + xdr_decode_hyper(p, &iattr->ia_size); iattr->ia_valid |= ATTR_SIZE; } if (bmval[0] & FATTR4_WORD0_ACL) { u32 nace; struct nfs4_ace *ace; - READ_BUF(4); len += 4; - nace = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &nace) < 0) + goto xdr_error; + len += sizeof(__be32); if (nace > xdr_stream_remaining(argp->xdr) / sizeof(struct nfs4_ace)) /* @@ -355,72 +357,83 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, *acl = svcxdr_tmpalloc(argp, nfs4_acl_bytes(nace)); if (*acl == NULL) - return nfserr_jukebox; + goto nomem; (*acl)->naces = nace; for (ace = (*acl)->aces; ace < (*acl)->aces + nace; ace++) { - READ_BUF(16); len += 16; + p = xdr_inline_decode(argp->xdr, sizeof(__be32) * 4); + if (!p) + goto xdr_error; + len += sizeof(__be32) * 4; ace->type = be32_to_cpup(p++); ace->flag = be32_to_cpup(p++); ace->access_mask = be32_to_cpup(p++); - dummy32 = be32_to_cpup(p++); - READ_BUF(dummy32); - len += XDR_QUADLEN(dummy32) << 2; - READMEM(buf, dummy32); - ace->whotype = nfs4_acl_get_whotype(buf, dummy32); + dummy32 = be32_to_cpup(p); + p = xdr_inline_decode(argp->xdr, dummy32); + if (!p) + goto xdr_error; + len += xdr_align_size(dummy32); + ace->whotype = nfs4_acl_get_whotype((char *)p, dummy32); status = nfs_ok; if (ace->whotype != NFS4_ACL_WHO_NAMED) ; else if (ace->flag & NFS4_ACE_IDENTIFIER_GROUP) status = nfsd_map_name_to_gid(argp->rqstp, - buf, dummy32, &ace->who_gid); + (char *)p, dummy32, &ace->who_gid); else status = nfsd_map_name_to_uid(argp->rqstp, - buf, dummy32, &ace->who_uid); + (char *)p, dummy32, &ace->who_uid); if (status) return status; } } else *acl = NULL; if (bmval[1] & FATTR4_WORD1_MODE) { - READ_BUF(4); - len += 4; - iattr->ia_mode = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); + iattr->ia_mode = dummy32; iattr->ia_mode &= (S_IFMT | S_IALLUGO); iattr->ia_valid |= ATTR_MODE; } if (bmval[1] & FATTR4_WORD1_OWNER) { - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); - READ_BUF(dummy32); - len += (XDR_QUADLEN(dummy32) << 2); - READMEM(buf, dummy32); - if ((status = nfsd_map_name_to_uid(argp->rqstp, buf, dummy32, &iattr->ia_uid))) + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); + p = xdr_inline_decode(argp->xdr, dummy32); + if (!p) + goto xdr_error; + len += xdr_align_size(dummy32); + status = nfsd_map_name_to_uid(argp->rqstp, (char *)p, dummy32, + &iattr->ia_uid); + if (status) return status; iattr->ia_valid |= ATTR_UID; } if (bmval[1] & FATTR4_WORD1_OWNER_GROUP) { - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); - READ_BUF(dummy32); - len += (XDR_QUADLEN(dummy32) << 2); - READMEM(buf, dummy32); - if ((status = nfsd_map_name_to_gid(argp->rqstp, buf, dummy32, &iattr->ia_gid))) + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); + p = xdr_inline_decode(argp->xdr, dummy32); + if (!p) + goto xdr_error; + len += xdr_align_size(dummy32); + status = nfsd_map_name_to_gid(argp->rqstp, (char *)p, dummy32, + &iattr->ia_gid); + if (status) return status; iattr->ia_valid |= ATTR_GID; } if (bmval[1] & FATTR4_WORD1_TIME_ACCESS_SET) { - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); switch (dummy32) { case NFS4_SET_TO_CLIENT_TIME: - len += 12; status = nfsd4_decode_nfstime4(argp, &iattr->ia_atime); if (status) return status; + len += sizeof(__be64) + sizeof(__be32); iattr->ia_valid |= (ATTR_ATIME | ATTR_ATIME_SET); break; case NFS4_SET_TO_SERVER_TIME: @@ -431,15 +444,15 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, } } if (bmval[1] & FATTR4_WORD1_TIME_MODIFY_SET) { - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); switch (dummy32) { case NFS4_SET_TO_CLIENT_TIME: - len += 12; status = nfsd4_decode_nfstime4(argp, &iattr->ia_mtime); if (status) return status; + len += sizeof(__be64) + sizeof(__be32); iattr->ia_valid |= (ATTR_MTIME | ATTR_MTIME_SET); break; case NFS4_SET_TO_SERVER_TIME: @@ -453,40 +466,51 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, label->len = 0; if (IS_ENABLED(CONFIG_NFSD_V4_SECURITY_LABEL) && bmval[2] & FATTR4_WORD2_SECURITY_LABEL) { - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); /* lfs: we don't use it */ - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); /* pi: we don't use it either */ - READ_BUF(4); - len += 4; - dummy32 = be32_to_cpup(p++); - READ_BUF(dummy32); + /* lfs is ignored */ + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); + /* pi is ignored */ + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; if (dummy32 > NFS4_MAXLABELLEN) return nfserr_badlabel; - len += (XDR_QUADLEN(dummy32) << 2); - READMEM(buf, dummy32); + len += sizeof(__be32); + p = xdr_inline_decode(argp->xdr, dummy32); + if (!p) + goto xdr_error; + len += xdr_align_size(dummy32); label->len = dummy32; - label->data = svcxdr_dupstr(argp, buf, dummy32); + label->data = svcxdr_dupstr(argp, p, dummy32); if (!label->data) - return nfserr_jukebox; + goto nomem; } if (bmval[2] & FATTR4_WORD2_MODE_UMASK) { if (!umask) goto xdr_error; - READ_BUF(8); - len += 8; - dummy32 = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); iattr->ia_mode = dummy32 & (S_IFMT | S_IALLUGO); - dummy32 = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy32) < 0) + goto xdr_error; + len += sizeof(__be32); *umask = dummy32 & S_IRWXUGO; iattr->ia_valid |= ATTR_MODE; } if (len != expected_len) goto xdr_error; + status = nfs_ok; - DECODE_TAIL; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } static __be32 nfsd4_decode_clientid4(struct nfsd4_compoundargs *argp, @@ -706,9 +730,10 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create &create->cr_namelen); if (status) goto out; - status = nfsd4_decode_fattr(argp, create->cr_bmval, &create->cr_iattr, - &create->cr_acl, &create->cr_label, - &create->cr_umask); + status = nfsd4_decode_fattr4(argp, create->cr_bmval, + ARRAY_SIZE(create->cr_bmval), + &create->cr_iattr, &create->cr_acl, + &create->cr_label, &create->cr_umask); if (status) goto out; @@ -965,9 +990,10 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) switch (open->op_createmode) { case NFS4_CREATE_UNCHECKED: case NFS4_CREATE_GUARDED: - status = nfsd4_decode_fattr(argp, open->op_bmval, - &open->op_iattr, &open->op_acl, &open->op_label, - &open->op_umask); + status = nfsd4_decode_fattr4(argp, open->op_bmval, + ARRAY_SIZE(open->op_bmval), + &open->op_iattr, &open->op_acl, + &open->op_label, &open->op_umask); if (status) goto out; break; @@ -980,9 +1006,10 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) goto xdr_error; READ_BUF(NFS4_VERIFIER_SIZE); COPYMEM(open->op_verf.data, NFS4_VERIFIER_SIZE); - status = nfsd4_decode_fattr(argp, open->op_bmval, - &open->op_iattr, &open->op_acl, &open->op_label, - &open->op_umask); + status = nfsd4_decode_fattr4(argp, open->op_bmval, + ARRAY_SIZE(open->op_bmval), + &open->op_iattr, &open->op_acl, + &open->op_label, &open->op_umask); if (status) goto out; break; @@ -1220,8 +1247,10 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta status = nfsd4_decode_stateid4(argp, &setattr->sa_stateid); if (status) return status; - return nfsd4_decode_fattr(argp, setattr->sa_bmval, &setattr->sa_iattr, - &setattr->sa_acl, &setattr->sa_label, NULL); + return nfsd4_decode_fattr4(argp, setattr->sa_bmval, + ARRAY_SIZE(setattr->sa_bmval), + &setattr->sa_iattr, &setattr->sa_acl, + &setattr->sa_label, NULL); } static __be32 From patchwork Fri Nov 13 15:04:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903789 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC17A139F for ; Fri, 13 Nov 2020 15:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 898DA22249 for ; Fri, 13 Nov 2020 15:04:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KnNZ02yR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726520AbgKMPEP (ORCPT ); Fri, 13 Nov 2020 10:04:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36076 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbgKMPEO (ORCPT ); Fri, 13 Nov 2020 10:04:14 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7A02C0617A6 for ; Fri, 13 Nov 2020 07:04:06 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id a15so2543156qvk.5 for ; Fri, 13 Nov 2020 07:04:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=CJpLObXKDWplMczr0mRkE0WSGVo20lbrroX6Hmsm/nM=; b=KnNZ02yRvfwswT0obceKjhYasTWBU2rOyvySU+GKvm+yKHr6rsKIbNTxD5t4f3fMVS Y4pIgNhXCRiu1ihhGBxKjPw9R52e9tSgTnFPoEs7Y7qyjeYwugBXV/f7dmfNM4umu39C 2uKvyOdDEgYgtLduVdrMWmCwekeiz5iWc/U5Tukv51l6M3AzJ2wwgW8TEoNaRHQhFyz1 8zK8HEbigqguWfGRK/lMhFAAbTkjHsxofITICh2zpxXkC7LDLKlxO5YBDI8k1fXnzG9b yD8Tz9R2pqHascsrX0dWSTtS7L4vGfZx3TW8QgaPvra3zF3aOmMKT8k2GUs7vJDBdSkA 9PMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=CJpLObXKDWplMczr0mRkE0WSGVo20lbrroX6Hmsm/nM=; b=q7ymYl9ZnLe625Nh8QUQycMzcZJNcn/SNfyiPK3ODe2LlPzjUEyLgU6dCtLNQlR+tF GMJDPlFtN12PnRDzI30wqCIL4z5lA62HEN6HPxvkbIcJGH3E4qGXG/iE9kNSPqsU4q4T Go1TCoUugqqoWGUbo5Zk+aXW5gvNH9tiyLPjWJGxTmkTbESljCYEjP1BXo+0QlxMPcGG zjRR6Ej80vRhwwMS+EJdaLrkrpWKxm/syHx+veIr8+oZmL83AV8jcuEklGRHa8kGwY9k W4woXIlR/eQVQXmf0mJ8EMC7JcqlLJai4qCKqP5usFDE8gxMjZqdhpEb913ZI7NLPQ0e OSOA== X-Gm-Message-State: AOAM531IBhekvQFkPUQS0xzsk+dlNLOwBNIRHxcJpyRRbEloY+MalQ5y Dg9raNX1LYj8JcXy3RfHrrSeQX+kg6Q= X-Google-Smtp-Source: ABdhPJzhaVL0uUKNSQOtvDhQ/RK2RZIZWdCm/Vc4/Oja8uXjjdpofjF5SxjAvNQG9Hp5RK/7DS/Wyw== X-Received: by 2002:a0c:8d8b:: with SMTP id t11mr2586737qvb.13.1605279844650; Fri, 13 Nov 2020 07:04:04 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id h129sm6808670qkd.35.2020.11.13.07.04.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:04 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF42Jp032694 for ; Fri, 13 Nov 2020 15:04:02 GMT Subject: [PATCH v1 19/61] NFSD: Replace READ* macros in nfsd4_decode_open() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:02 -0500 Message-ID: <160527984295.6186.2380316984697857571.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Note that op_fname is the only instance of an NFSv4 filename stored in a struct xdr_netobj. Convert it to a u32/char * pair so that the new nfsd4_decode_filename() helper can be used. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4proc.c | 8 +-- fs/nfsd/nfs4xdr.c | 160 +++++++++++++++++++++++++++++++--------------------- fs/nfsd/xdr4.h | 3 + 3 files changed, 100 insertions(+), 71 deletions(-) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 91197626d0d2..b810d048c5f8 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -257,8 +257,8 @@ do_open_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stru * in NFSv4 as in v3 except EXCLUSIVE4_1. */ current->fs->umask = open->op_umask; - status = do_nfsd_create(rqstp, current_fh, open->op_fname.data, - open->op_fname.len, &open->op_iattr, + status = do_nfsd_create(rqstp, current_fh, open->op_fname, + open->op_fnamelen, &open->op_iattr, *resfh, open->op_createmode, (u32 *)open->op_verf.data, &open->op_truncate, &open->op_created); @@ -283,7 +283,7 @@ do_open_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stru * a chance to an acquire a delegation if appropriate. */ status = nfsd_lookup(rqstp, current_fh, - open->op_fname.data, open->op_fname.len, *resfh); + open->op_fname, open->op_fnamelen, *resfh); if (status) goto out; status = nfsd_check_obj_isreg(*resfh); @@ -360,7 +360,7 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, bool reclaim = false; dprintk("NFSD: nfsd4_open filename %.*s op_openowner %p\n", - (int)open->op_fname.len, open->op_fname.data, + (int)open->op_fnamelen, open->op_fname, open->op_openowner); /* This check required by spec. */ diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 9a6116cee94b..2ff3dfaca4a1 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -261,6 +261,20 @@ static __be32 nfsd4_decode_component4(struct nfsd4_compoundargs *argp, return nfserr_jukebox; } +static __be32 nfsd4_decode_verifier4(struct nfsd4_compoundargs *argp, + nfs4_verifier *verf) +{ + __be32 *p; + + p = xdr_inline_decode(argp->xdr, NFS4_VERIFIER_SIZE); + if (!p) + goto xdr_error; + memcpy(verf->data, p, sizeof(verf->data)); + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_nfstime4(struct nfsd4_compoundargs *argp, struct timespec64 *tv) { @@ -887,11 +901,10 @@ nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, struct nfsd4_lookup *lookup static __be32 nfsd4_decode_share_access(struct nfsd4_compoundargs *argp, u32 *share_access, u32 *deleg_want, u32 *deleg_when) { - __be32 *p; u32 w; - READ_BUF(4); - w = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &w) < 0) + goto xdr_error; *share_access = w & NFS4_SHARE_ACCESS_MASK; *deleg_want = w & NFS4_SHARE_WANT_MASK; if (deleg_when) @@ -940,22 +953,66 @@ static __be32 nfsd4_decode_share_access(struct nfsd4_compoundargs *argp, u32 *sh static __be32 nfsd4_decode_share_deny(struct nfsd4_compoundargs *argp, u32 *x) { - __be32 *p; - - READ_BUF(4); - *x = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, x) < 0) + goto xdr_error; /* Note: unlinke access bits, deny bits may be zero. */ if (*x & ~NFS4_SHARE_DENY_BOTH) - return nfserr_bad_xdr; + goto xdr_error; return nfs_ok; xdr_error: return nfserr_bad_xdr; } +static __be32 +nfsd4_decode_createhow4(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) +{ + __be32 status; + + if (xdr_stream_decode_u32(argp->xdr, &open->op_createmode) < 0) + goto xdr_error; + switch (open->op_createmode) { + case NFS4_CREATE_UNCHECKED: + case NFS4_CREATE_GUARDED: + status = nfsd4_decode_fattr4(argp, open->op_bmval, + ARRAY_SIZE(open->op_bmval), + &open->op_iattr, &open->op_acl, + &open->op_label, &open->op_umask); + if (status) + goto out; + break; + case NFS4_CREATE_EXCLUSIVE: + status = nfsd4_decode_verifier4(argp, &open->op_verf); + if (status) + goto out; + break; + case NFS4_CREATE_EXCLUSIVE4_1: + if (argp->minorversion < 1) + goto xdr_error; + status = nfsd4_decode_verifier4(argp, &open->op_verf); + if (status) + goto out; + status = nfsd4_decode_fattr4(argp, open->op_bmval, + ARRAY_SIZE(open->op_bmval), + &open->op_iattr, &open->op_acl, + &open->op_label, &open->op_umask); + if (status) + goto out; + break; + default: + goto xdr_error; + } + status = nfs_ok; + +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) { - DECODE_HEAD; + __be32 status; u32 dummy; memset(open->op_bmval, 0, sizeof(open->op_bmval)); @@ -964,8 +1021,8 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) open->op_xdr_error = 0; /* seqid, share_access, share_deny, clientid, ownerlen */ - READ_BUF(4); - open->op_seqid = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &open->op_seqid) < 0) + goto xdr_error; /* decode, yet ignore deleg_when until supported */ status = nfsd4_decode_share_access(argp, &open->op_share_access, &open->op_deleg_want, &dummy); @@ -974,80 +1031,47 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) status = nfsd4_decode_share_deny(argp, &open->op_share_deny); if (status) goto xdr_error; - READ_BUF(sizeof(clientid_t)); - COPYMEM(&open->op_clientid, sizeof(clientid_t)); - status = nfsd4_decode_opaque(argp, &open->op_owner); + status = nfsd4_decode_state_owner4(argp, &open->op_clientid, + &open->op_owner); if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &open->op_create) < 0) goto xdr_error; - READ_BUF(4); - open->op_create = be32_to_cpup(p++); switch (open->op_create) { case NFS4_OPEN_NOCREATE: break; case NFS4_OPEN_CREATE: - READ_BUF(4); - open->op_createmode = be32_to_cpup(p++); - switch (open->op_createmode) { - case NFS4_CREATE_UNCHECKED: - case NFS4_CREATE_GUARDED: - status = nfsd4_decode_fattr4(argp, open->op_bmval, - ARRAY_SIZE(open->op_bmval), - &open->op_iattr, &open->op_acl, - &open->op_label, &open->op_umask); - if (status) - goto out; - break; - case NFS4_CREATE_EXCLUSIVE: - READ_BUF(NFS4_VERIFIER_SIZE); - COPYMEM(open->op_verf.data, NFS4_VERIFIER_SIZE); - break; - case NFS4_CREATE_EXCLUSIVE4_1: - if (argp->minorversion < 1) - goto xdr_error; - READ_BUF(NFS4_VERIFIER_SIZE); - COPYMEM(open->op_verf.data, NFS4_VERIFIER_SIZE); - status = nfsd4_decode_fattr4(argp, open->op_bmval, - ARRAY_SIZE(open->op_bmval), - &open->op_iattr, &open->op_acl, - &open->op_label, &open->op_umask); - if (status) - goto out; - break; - default: - goto xdr_error; - } + status = nfsd4_decode_createhow4(argp, open); + if (status) + goto out; break; default: goto xdr_error; } /* open_claim */ - READ_BUF(4); - open->op_claim_type = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &open->op_claim_type) < 0) + goto xdr_error; switch (open->op_claim_type) { case NFS4_OPEN_CLAIM_NULL: case NFS4_OPEN_CLAIM_DELEGATE_PREV: - READ_BUF(4); - open->op_fname.len = be32_to_cpup(p++); - READ_BUF(open->op_fname.len); - SAVEMEM(open->op_fname.data, open->op_fname.len); - if ((status = check_filename(open->op_fname.data, open->op_fname.len))) - return status; + status = nfsd4_decode_component4(argp, &open->op_fname, + &open->op_fnamelen); + if (status) + goto out; break; case NFS4_OPEN_CLAIM_PREVIOUS: - READ_BUF(4); - open->op_delegate_type = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &open->op_delegate_type) < 0) + goto xdr_error; break; case NFS4_OPEN_CLAIM_DELEGATE_CUR: status = nfsd4_decode_stateid4(argp, &open->op_delegate_stateid); if (status) - return status; - READ_BUF(4); - open->op_fname.len = be32_to_cpup(p++); - READ_BUF(open->op_fname.len); - SAVEMEM(open->op_fname.data, open->op_fname.len); - if ((status = check_filename(open->op_fname.data, open->op_fname.len))) - return status; + goto out; + status = nfsd4_decode_component4(argp, &open->op_fname, + &open->op_fnamelen); + if (status) + goto out; break; case NFS4_OPEN_CLAIM_FH: case NFS4_OPEN_CLAIM_DELEG_PREV_FH: @@ -1060,13 +1084,17 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) goto xdr_error; status = nfsd4_decode_stateid4(argp, &open->op_delegate_stateid); if (status) - return status; + goto out; break; default: goto xdr_error; } - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 0eb13bd603ea..6245004a9993 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -252,7 +252,8 @@ struct nfsd4_listxattrs { struct nfsd4_open { u32 op_claim_type; /* request */ - struct xdr_netobj op_fname; /* request - everything but CLAIM_PREV */ + u32 op_fnamelen; + char * op_fname; /* request - everything but CLAIM_PREV */ u32 op_delegate_type; /* request - CLAIM_PREV only */ stateid_t op_delegate_stateid; /* request - response */ u32 op_why_no_deleg; /* response - DELEG_NONE_EXT only */ From patchwork Fri Nov 13 15:04:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903787 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 23F4E138B for ; Fri, 13 Nov 2020 15:04:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F2DB222242 for ; Fri, 13 Nov 2020 15:04:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AI7cGEXu" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726587AbgKMPEM (ORCPT ); Fri, 13 Nov 2020 10:04:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36088 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726324AbgKMPEL (ORCPT ); Fri, 13 Nov 2020 10:04:11 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 07231C0613D1 for ; Fri, 13 Nov 2020 07:04:11 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id t191so9031015qka.4 for ; Fri, 13 Nov 2020 07:04:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=UjrhjxcUN9c0UXHlv7afSsmV4W02b6jenOnKHdReaBY=; b=AI7cGEXuXtRXDOHSANTnkxAPQ6Ikfbt6Q6RpQCOeV16l0psCEuUwvRzog6f+K5s3dY 4zg2PKuc4mBviZT2qeJjtAUuk/1FT1rkaUU/Fc5f8vhpPSE5zMkHsHZGVkAb69bay5Zq L8NlTDCMzb5WE/1D404ziU20DSVGEuOZMOF3iWtzzLs947PKH+Oy6CzXaQXRJ4NOOh6j R5bzoDBTYxM07m0mbDmn1NEADoRH/CppKcd95QDe8mflThhhQkL9u4Yv/hyWz/VXRSTc 1zNl7blBE/OddX1LJNfv+69TexpMMaFqr7Aknlq3F0wEI/c9fBX49Pr0PjpM5Mwm2JHm Xidw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=UjrhjxcUN9c0UXHlv7afSsmV4W02b6jenOnKHdReaBY=; b=TsETHU3IfzaFuyzC508tmGgdbnGaILLCln75U4g6xbYy7G0ITq8ngiJ053BouRgZqK 8trX5ISacDbQwno2Ac8MAVLZecMizhZpP7eMP3IhDu46AtCSj1Je4XU3dNNqFuWIDvws Q7OeTG+W0a4c12MzPXz3+nY2F/ZOVejhVNluCHV7Ne82heOvZ7wWpMLUhY84tuEiTxuh HFjR1QHbDgv7YJR1El981eCB9MICbyYbHGAmZIDH1XS+0H/G4ctQrRVEMnCn5m6f1XU2 ZuQEnzgwsu9ZRcb24nwH/gl0cQPhrQF73fPuzKQwhwOOgHaRBaA+WI3GVh3xvWwDRh5Z 97OA== X-Gm-Message-State: AOAM532SXKUoYBkwNoOlmGxRXTAKACy7L6PX71zTDnISfeAzlsa1IPVz 3vItIoCIwD+ya9WOCNlbDTpUpMFtaTA= X-Google-Smtp-Source: ABdhPJw+UGVL3M5n9nRvM6DroLS0Ce5zXLLT2Ero57HsKNB0MLwLZFP+x6kW3pBuprgYO7S26kiWNA== X-Received: by 2002:a37:946:: with SMTP id 67mr2181199qkj.304.1605279849893; Fri, 13 Nov 2020 07:04:09 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id 199sm2310642qkj.61.2020.11.13.07.04.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:09 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF48rN032697 for ; Fri, 13 Nov 2020 15:04:08 GMT Subject: [PATCH v1 20/61] NFSD: Replace READ* macros in nfsd4_decode_open_confirm() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:08 -0500 Message-ID: <160527984824.6186.3658550944136540072.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 2ff3dfaca4a1..b4f23d1fd85e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1100,18 +1100,22 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) static __be32 nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_confirm *open_conf) { - DECODE_HEAD; + __be32 status; if (argp->minorversion >= 1) return nfserr_notsupp; status = nfsd4_decode_stateid4(argp, &open_conf->oc_req_stateid); if (status) - return status; - READ_BUF(4); - open_conf->oc_seqid = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u32(argp->xdr, &open_conf->oc_seqid) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:04:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903791 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B2DF2139F for ; Fri, 13 Nov 2020 15:04:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 97FBF2222F for ; Fri, 13 Nov 2020 15:04:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rW2Hpzio" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726788AbgKMPER (ORCPT ); Fri, 13 Nov 2020 10:04:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36112 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726787AbgKMPER (ORCPT ); Fri, 13 Nov 2020 10:04:17 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D3FDC0613D1 for ; Fri, 13 Nov 2020 07:04:17 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id z3so3247871qtw.9 for ; Fri, 13 Nov 2020 07:04:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=tN0VXUzvfOn1IsGyxe61OZ/fZfxUb40B1aG2GEluqwE=; b=rW2HpzioVktLGtQkLz3xd+fzdBccZeEpv2r05YR7Loejt9PM5TiFhQpG89lQKvfV7p gi430TIl9e8DwkZg1Bd79xsRIM080kLt2KupeXwbYyAdQLLoONyWejoyURlMuMMVsNI9 41422fQJjLnVEiVoSh9p0R+CBAKQZf816Kj7XFplvfsmPBRVub+Qiic41s6cK3Irg3DB 64qKC4ZvFrIL+crcU54h342brNui3GrSoia5BFZ+gaz1TA4f6Gf9tCOuQTPCs2spSe4v dVwRJCZY3y959Qe/UBslB9FKZT1zfdxVNbZR6t+kK22ciAsxyDIWXD6cRAFR950yqecA eKdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=tN0VXUzvfOn1IsGyxe61OZ/fZfxUb40B1aG2GEluqwE=; b=jE6aSeKNslkXpNiFCUCJH4m/eL0CeoPsMtdfvOZP2Y1WqGFuD/STWJJRruxhVNTcXL 4GDwbj8KnqNwGc59Y0i09zDIuHmysVscHPi1My2U1RdAwyfkk6lJ+i5v+8nUkt5r9LgL XRWVsjsRyiZmvQRX4JaaXLYAtRnvSh/p9LXTUOXj+Zb8dG32/kkrFNDuvoG4rY3nEjWH WuFTzNxNMWx95Tj9o85uskTN8rsf2DMsgWf65Saliw9ZLU2YcAbS/lpiJo1QhCNZuTh0 QQ0BeQ6YcmiQzp2BASdbreOakOMPiU/IPGpuUZQNbjFH3wPcXIKq730gMm1ShlIQ4Mf/ MuTw== X-Gm-Message-State: AOAM531aM2tQ0X9T7JjekNtTluld7NEvyiN6nqRFJkA/8GOjF3ZZJfnO +GF8FOUqZhotyklEULLYUPZeZuaT7z4= X-Google-Smtp-Source: ABdhPJwxNxlx4fAjxNYpDqeArNVoPlleMaVCyFZ3sXaZbFCiGqpgxkJ2t/3ubZYbL76PXozneL1tPw== X-Received: by 2002:ac8:3499:: with SMTP id w25mr2418738qtb.44.1605279855188; Fri, 13 Nov 2020 07:04:15 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id p6sm6671118qkh.105.2020.11.13.07.04.14 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:14 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4DJ5032700 for ; Fri, 13 Nov 2020 15:04:13 GMT Subject: [PATCH v1 21/61] NFSD: Replace READ* macros in nfsd4_decode_open_downgrade() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:13 -0500 Message-ID: <160527985353.6186.18423382803060328673.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index b4f23d1fd85e..c7e7854b5e19 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1121,21 +1121,26 @@ nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_con static __be32 nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_downgrade *open_down) { - DECODE_HEAD; - + __be32 status; + status = nfsd4_decode_stateid4(argp, &open_down->od_stateid); if (status) - return status; - READ_BUF(4); - open_down->od_seqid = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u32(argp->xdr, &open_down->od_seqid) < 0) + goto xdr_error; status = nfsd4_decode_share_access(argp, &open_down->od_share_access, &open_down->od_deleg_want, NULL); if (status) - return status; + goto out; status = nfsd4_decode_share_deny(argp, &open_down->od_share_deny); if (status) - return status; - DECODE_TAIL; + goto out; + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:04:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903793 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A8845138B for ; Fri, 13 Nov 2020 15:04:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8DF592223C for ; Fri, 13 Nov 2020 15:04:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IF+rIIjV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726771AbgKMPEW (ORCPT ); Fri, 13 Nov 2020 10:04:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726503AbgKMPEV (ORCPT ); Fri, 13 Nov 2020 10:04:21 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BD9DC0613D1 for ; Fri, 13 Nov 2020 07:04:21 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id 7so6868318qtp.1 for ; Fri, 13 Nov 2020 07:04:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=2z9peJ4779RtajGw6k2j0GHq4OPnvZpJp3+/Ydr2gDk=; b=IF+rIIjV/xX3g3SJp80VvSePEY9jZgyI/zU5ZBzQY2Lu0SBiVWpzALfdZz5vWt7DSi s3BAWERGS+iC+5hSrJXmQIvzpwxOwLIMPtMF0aImdsq2zWUR/mIHH2TkCmnITd1IsTRT xTYZ5NDklzLTY4xu0hdzpP9Kz+vUgiwQpmTg+bIc1SLC5XH00hsjXqRN3KccI+AA9yRf 5g1igNhYcvb0OWmhRbqiNluzhBEdocmF/sGMr/I9DFtAuUpxiqq710wuivdmKn482yzY qttNAVrJoqRobIGlESmPKl2ol8ZHGgKftI2TgXdAyF6imedDCXqPAfOh/1YkDR7u4IKv Yvpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=2z9peJ4779RtajGw6k2j0GHq4OPnvZpJp3+/Ydr2gDk=; b=OjQFr+V6fdbZurQB5YG/ieUU+61fkeJ0B1c/wiRaUBuib/qMgVB54xzSsOl+5o1okn dSyqe8hFfbfOsqVL14RgRJlAxBqAdIarh2BTim02GwbUmQVK/fqNwneWECFm0ayYHUPt nzziW3BMJTs/fvD49Qxbrw4waH2zc8afXq80dkRCgrJL7wKoL66PgDI58D5BgCxzdHw6 wWXM6Q0z9+uNfUy8dxCeKnIANQBqpCKtLGCKH5rcpGt6ggHGIgzHFZ1qGxRO1qHaQ44Z NXhSK5Y0QF8TIJKnMZ5wWjG7oynv8bbVwuXLlYUQoDoWACW8LjFtdOasoEcMQ4Q+c9lO EPeA== X-Gm-Message-State: AOAM533ZhHMDZ3Lf6MyCGD++HCnwClo/vJg/bdicJpaQHdfRxCPxFHTZ CIPQ50Z9CLr7v2J+j5qmwQhkOAEUiz8= X-Google-Smtp-Source: ABdhPJzwzJ9iFLz3OopXZVKhHbbi0aFLVJwfD0csAojmPqRmjYEbNAUcnDVkJpOC5NK3OhPc2Z7cxA== X-Received: by 2002:ac8:4f02:: with SMTP id b2mr2362542qte.284.1605279860425; Fri, 13 Nov 2020 07:04:20 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id q20sm6928910qke.0.2020.11.13.07.04.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:19 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4IRS032703 for ; Fri, 13 Nov 2020 15:04:18 GMT Subject: [PATCH v1 22/61] NFSD: Replace READ* macros in nfsd4_decode_putfh() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:18 -0500 Message-ID: <160527985881.6186.1569684664420097129.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c7e7854b5e19..c7f4040efd40 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1146,16 +1146,24 @@ nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_d static __be32 nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, struct nfsd4_putfh *putfh) { - DECODE_HEAD; + __be32 *p; - READ_BUF(4); - putfh->pf_fhlen = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &putfh->pf_fhlen) < 0) + goto xdr_error; if (putfh->pf_fhlen > NFS4_FHSIZE) goto xdr_error; - READ_BUF(putfh->pf_fhlen); - SAVEMEM(putfh->pf_fhval, putfh->pf_fhlen); - - DECODE_TAIL; + p = xdr_inline_decode(argp->xdr, putfh->pf_fhlen); + if (!p) + goto xdr_error; + putfh->pf_fhval = svcxdr_tmpalloc(argp, putfh->pf_fhlen); + if (!putfh->pf_fhval) + goto nomem; + memcpy(putfh->pf_fhval, p, putfh->pf_fhlen); + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } static __be32 From patchwork Fri Nov 13 15:04:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903795 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D4477139F for ; Fri, 13 Nov 2020 15:04:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B51012223C for ; Fri, 13 Nov 2020 15:04:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bONI3v7b" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726503AbgKMPE1 (ORCPT ); Fri, 13 Nov 2020 10:04:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36138 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726457AbgKMPE0 (ORCPT ); Fri, 13 Nov 2020 10:04:26 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8812C0613D1 for ; Fri, 13 Nov 2020 07:04:26 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id 63so4710856qva.7 for ; Fri, 13 Nov 2020 07:04:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=2jm3lyNLNNzdxiWcwWPLElpEZNMysKxdpGBRD2WvOPU=; b=bONI3v7bR7jApb5MRLZX2veCe8Lnb/c1Lz5gH/i7bGSTwJChdR1l/+wj/DLuj+c1v2 dtvxA+cmyWOv6LOrtvPORN4VqBZ6Dj94DI6NKMNDU6DVHJJhycPZD4daFmf0XhW0MINm UpR2ylmSAMxy++3xNbGtMbApNiMYRRByEnoHN1xn5aySdCBWUFuuAciMpDCorWZx5woq e1pHx5WndhmnWx4Ft1Z8P2kFaLqB8Hv6vQp2wHwuSlGfFsDSJ+SbQVe/COlxHZMbsEA0 U0d7FtioGQEz4osz8BaDRh3b946V1RPN94SqzPR/AHJ6f85FVcbJNEpBnxVpjWwswolp d4og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=2jm3lyNLNNzdxiWcwWPLElpEZNMysKxdpGBRD2WvOPU=; b=FGKIZ3UsZXk0q1eMQPS/BPvA0Ny+KGuQW1PaW/4wOJrRH+wjZ76z/RpSDDDJ+0E/58 7cvvneUYETKyhexwH5MUa7vWXa/HTw5+JJfhTb/QN06/taDU3mweB7TpIBSdQ4fkXNpt NNrwBIiwxf9VJ/vbdHGJoli7GsFfrz37fHZ8TWdIkWfQcZHFKdgqluQ56IjwhU8rg4kr hHEGRiuUsTchxd2Qge5lYjDcFwnjC3pnTe0JIfX/rKlWDBSDwrPdHurlO6WjI8Srz8/a nGoWrXVX7In7RaL4hE5soJtpChWSEfiEkx5oSOZPucc9mUBTWT0BPWSmhSn1Pg6035qL 9ByQ== X-Gm-Message-State: AOAM532rD4Pys5r/aNCVBBStcCxQewKTkRweHREDzDKYTDML0+EAjvL8 LmoiKKFLrNXCwy0lr4IoQvTcWOgDnXw= X-Google-Smtp-Source: ABdhPJxOOHZ22CMZEC4JQjlgcd9g4YOQzcq4EQwHKacOHisRflt7TzUInNXeDCYbMBj35cQ5JcptXw== X-Received: by 2002:a0c:e0c9:: with SMTP id x9mr2832613qvk.56.1605279865588; Fri, 13 Nov 2020 07:04:25 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id t60sm6429360qtd.65.2020.11.13.07.04.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:24 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4OYr032706 for ; Fri, 13 Nov 2020 15:04:24 GMT Subject: [PATCH v1 23/61] NFSD: Replace READ* macros in nfsd4_decode_read() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:24 -0500 Message-ID: <160527986410.6186.10864335028888611330.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c7f4040efd40..1f00fe6febf9 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1177,16 +1177,21 @@ nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, void *p) static __be32 nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read) { - DECODE_HEAD; + __be32 status; status = nfsd4_decode_stateid4(argp, &read->rd_stateid); if (status) - return status; - READ_BUF(12); - p = xdr_decode_hyper(p, &read->rd_offset); - read->rd_length = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u64(argp->xdr, &read->rd_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &read->rd_length) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:04:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903797 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 30441138B for ; Fri, 13 Nov 2020 15:04:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 175B12223C for ; Fri, 13 Nov 2020 15:04:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="quFTLXru" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726787AbgKMPEc (ORCPT ); Fri, 13 Nov 2020 10:04:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726457AbgKMPEc (ORCPT ); Fri, 13 Nov 2020 10:04:32 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14894C0613D1 for ; Fri, 13 Nov 2020 07:04:32 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id g19so4716564qvy.2 for ; Fri, 13 Nov 2020 07:04:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=4gZyntLgWDxeFWnDd5ziknLFI4GKdViSRVKyyg6Lv9w=; b=quFTLXruCHkTInC6ZdYyuLOiHfh52sBGNSSyKgyF6XD8rMHBlJrnabDDoFRbVRKfR2 vlHrL5Y5ubMC3WOg0wgwckvpLyblSsnYUIhxq55bN4KwdIZwgpnkCspUMCMkOOyXP/wi 8nH01/sSgzRuN/TK++K0kzlC59A1+P9wJnu/9mXcgDq0gNq4iqwXfOZ8oOVWhZTzO/QD h1skpfU6AQUVY4+z8ewduL2DUQTFOScDlvm/H8Aiq1yFNRI56CJ77dy7RcfcwE7ZrHu6 27GxFLboTaIszmqhfCirWoLsBkVsFPzIrbmxJ4mrlnaIrtQOctnlaWeffG++vysIjxdG Q5gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=4gZyntLgWDxeFWnDd5ziknLFI4GKdViSRVKyyg6Lv9w=; b=gkmHVfLNaYJy23vE9g6QIXN65ZEIUNZlB0yXuUpBJWVle1Fv2MrCK6hirfMHfKW1bc H+NDl1I/7k0hXgEtnidJUot1wM8U1sSRH4lg14bANi6epEiuthKSKsx6Zs3Zc7j7INEi Eq4H86kHTdD/dL2dSySBX1Js8ULSbLJiF4skEbPNT25wyUIdCtThAjskFze3aeAu8U2t V/NRvFpM0U4C4hpLEar/6+IcfHgU/rkvXCmkvDWFRvu6OBkw7Mwma/OVBzmnj9BMVRg/ XnpCO7N3gP8Vcl8Ae6/eYbRm3QYcSZhmy3ZQ+gFCU47pf1zybA8W5l5tRkPK7RITvIJQ IeIg== X-Gm-Message-State: AOAM533neVBn0fsaGaGh851UXhk00gmTOxiUr46ottY7i/MhN1dhyLmy 8J2rW1J/7ntvtUIt+0YJnE2VrJW+Ug4= X-Google-Smtp-Source: ABdhPJzMa4yQTxHU1JHVx8YDThavTmz2ihRfZFXDklYftv5W76WI6DYtwIHF/Qgl+XphhsEkgC+zug== X-Received: by 2002:a05:6214:612:: with SMTP id z18mr2752752qvw.41.1605279870920; Fri, 13 Nov 2020 07:04:30 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id c12sm6454048qtx.54.2020.11.13.07.04.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:30 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4TeF032709 for ; Fri, 13 Nov 2020 15:04:29 GMT Subject: [PATCH v1 24/61] NFSD: Replace READ* macros in nfsd4_decode_readdir() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:29 -0500 Message-ID: <160527986916.6186.10421850230732928464.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 1f00fe6febf9..2e163c23d013 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1197,19 +1197,27 @@ nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read) static __be32 nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *readdir) { - DECODE_HEAD; + __be32 status; - READ_BUF(24); - p = xdr_decode_hyper(p, &readdir->rd_cookie); - COPYMEM(readdir->rd_verf.data, sizeof(readdir->rd_verf.data)); - readdir->rd_dircount = be32_to_cpup(p++); - readdir->rd_maxcount = be32_to_cpup(p++); + if (xdr_stream_decode_u64(argp->xdr, &readdir->rd_cookie) < 0) + goto xdr_error; + status = nfsd4_decode_verifier4(argp, &readdir->rd_verf); + if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &readdir->rd_dircount) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &readdir->rd_maxcount) < 0) + goto xdr_error; status = nfsd4_decode_bitmap4(argp, readdir->rd_bmval, ARRAY_SIZE(readdir->rd_bmval)); if (status) goto out; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:04:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903801 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CDBA116C1 for ; Fri, 13 Nov 2020 15:04:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B051322201 for ; Fri, 13 Nov 2020 15:04:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Gxgp+IR7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726457AbgKMPEs (ORCPT ); Fri, 13 Nov 2020 10:04:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726777AbgKMPEs (ORCPT ); Fri, 13 Nov 2020 10:04:48 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7C4B4C0613D1 for ; Fri, 13 Nov 2020 07:04:38 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id v143so9049355qkb.2 for ; Fri, 13 Nov 2020 07:04:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=BOA3/gpC8KoOI5zEgZWXsL21bRgeDHSYxxkjC7xgdtI=; b=Gxgp+IR7YDPf9q7xmU0PeWVJ1fby+mghyKRCyvAI5+q/WKbuLae8KGKuX34Rz6G3w3 2kAfXuJgrPc8PRp2niRJqgWSwurk9MflJxl+WkRw82nYuDOUOYjfBznM3Amy4cLdNpks 2tQHRS+7F/xVIZ7OiGVvs97y1AuSYKse796G9uMfKWVFLUsyr/HUqctaA9MkxyhIeE92 YrGpzadpRUQf1w45MxeD/xa+0mScmLGzoLbCw9SfRgB8/vKVOupatwSfLRtYehuRPpEl FKmqjT7kyQI8M+qKEaDqbhubaQmrWY+0QNsu4LPAPcrkaOs6HFI32GqBWA70nnaMjDSu bsUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=BOA3/gpC8KoOI5zEgZWXsL21bRgeDHSYxxkjC7xgdtI=; b=lIIA2yWBKVA/bLSRNtnejFIkjKuE0rP3D4WQdzbjA1KIX4jbNnG3oa/FcFYWqd99rv vuxdR7d1+wJHsKZAVDEgBptrjwjizNp24RoCvMoOLm4STlJ8m9WP0NF0HK3vdr2oRVDu YVao+MwJ8/7u+0uaNt1DRxRnRNdDxcoLLp2XxpFx4NVi0tRL0z73gg48OKsuHy/k/S07 n5tMlvtc3isMhjZVnpLKsgaxlu7a3Tx3aIbY0ETWOggCemL6HfEf7ccknAGivtIeavyM 4qse38KdVAFI5OHYPd2rtVWGpTCjN3VwKmonV2UHysyKJwZbTRb6sp2Hs7DxyYRsFhcg bCqQ== X-Gm-Message-State: AOAM532cVFTDVXXMkgrZHQQd3tso6bLx/5GAQQd1QRf1N3s3v4HmZbgS yRN52N5EPuwF+xPEt94aJObf8WF91f0= X-Google-Smtp-Source: ABdhPJwpXcpV2ha7z4sLaCrdpZfdoGMbw/6Fb4js+FNMjNwxwIXIb0mZ7EQG87Zy+mwZdkDYmp/fHg== X-Received: by 2002:a05:620a:41c:: with SMTP id 28mr2423837qkp.270.1605279876079; Fri, 13 Nov 2020 07:04:36 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id l22sm7323317qke.118.2020.11.13.07.04.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:35 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4Yve032712 for ; Fri, 13 Nov 2020 15:04:34 GMT Subject: [PATCH v1 25/61] NFSD: Replace READ* macros in nfsd4_decode_remove() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:34 -0500 Message-ID: <160527987445.6186.4502201022745601534.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 2e163c23d013..58342971fd6b 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1223,16 +1223,7 @@ nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *read static __be32 nfsd4_decode_remove(struct nfsd4_compoundargs *argp, struct nfsd4_remove *remove) { - DECODE_HEAD; - - READ_BUF(4); - remove->rm_namelen = be32_to_cpup(p++); - READ_BUF(remove->rm_namelen); - SAVEMEM(remove->rm_name, remove->rm_namelen); - if ((status = check_filename(remove->rm_name, remove->rm_namelen))) - return status; - - DECODE_TAIL; + return nfsd4_decode_component4(argp, &remove->rm_name, &remove->rm_namelen); } static __be32 From patchwork Fri Nov 13 15:04:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903805 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4EFD6139F for ; Fri, 13 Nov 2020 15:04:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 334552222F for ; Fri, 13 Nov 2020 15:04:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V2g7zN87" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726743AbgKMPE6 (ORCPT ); Fri, 13 Nov 2020 10:04:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPE6 (ORCPT ); Fri, 13 Nov 2020 10:04:58 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADAECC0617A6 for ; Fri, 13 Nov 2020 07:04:42 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id z3so3248944qtw.9 for ; Fri, 13 Nov 2020 07:04:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Rez87ol9zstK3tdV5FRQ1lKZUrtn5RDRvFnEn9c16A0=; b=V2g7zN87jZ06oABhXM2p8n/9N9n4OAZZtdA/l+Ji13hPtzBnshd5cxX2By8Z3c6dQ6 yTztoFKreigtILqEn7+77Sq0TP9+GcmHp/4Hl/oXI8nYAFQksedyFo8SuCC4AWQ1anvf UEfAqQ16jxcP0V9FmjWUsXlS2Co0B6tWNZFmzGqI+3zPPVp8P4UnO6cBGlipj4AFYp2N V2Rqsv7LO4Gm3KN7d/ObfiA0iMIdhX842s30TKegek+Hb1KIAE1KPUSEk5m57DcF+0yO gcWCTwcsJBWcAAn8mQjgBJu4/vs1wQzojXn+PACbfVvq5UgsoWCmysstIJswZULYkZuT 5mbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=Rez87ol9zstK3tdV5FRQ1lKZUrtn5RDRvFnEn9c16A0=; b=bDaFVygzi5rbktDa5VjtL4YtqBg147ckeHCc7c1cvw3FxvZNGVVN3SRqjiE0PTEMlw 6MbO4oHO0au0trV3Z1yuYc/U/oRGAjFxjD+euo4q73yC2tBqQ+iEo5lXixgRBNr0cV6v acFEiNyvM7vYNPudT/u4Vwcvq3KeaAKvEzZEXKn6t52u4D2IdSuuJAo8hqLwKAs3u5yM TfKHKnigTyrGvVucqy0SNR8i03C+EiY5/zSmFesqkfEedKVg+xdXIFdVs6sZmpt94hrg ttcp0sM33w3OvfmcwrKwbyyuba4ESRw2Zj0Nunb06f4g7jyT463zMydS3n1IYEMVR4Ui 6Hhw== X-Gm-Message-State: AOAM533xCjDqOA+2ZQEoaD30BoQdysmoPErQ2XMjAXbIW2Auh+gp+eSO xrGe/XnBxkA2i+NKpLUk8IIovsriP14= X-Google-Smtp-Source: ABdhPJy8Wkfx9+mjraKBcbcNzVLD83p6v22JBw50yC2IZ7FX6dbnLpplbDcWzKfIxKE3h6j9eJbtdA== X-Received: by 2002:aed:26a7:: with SMTP id q36mr2375913qtd.134.1605279881554; Fri, 13 Nov 2020 07:04:41 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id u16sm7417098qth.42.2020.11.13.07.04.40 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:40 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4dLZ032715 for ; Fri, 13 Nov 2020 15:04:39 GMT Subject: [PATCH v1 26/61] NFSD: Replace READ* macros in nfsd4_decode_rename() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:39 -0500 Message-ID: <160527987975.6186.4294661038410917726.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 58342971fd6b..aa71baacabba 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1229,22 +1229,18 @@ nfsd4_decode_remove(struct nfsd4_compoundargs *argp, struct nfsd4_remove *remove static __be32 nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename) { - DECODE_HEAD; + __be32 status; - READ_BUF(4); - rename->rn_snamelen = be32_to_cpup(p++); - READ_BUF(rename->rn_snamelen); - SAVEMEM(rename->rn_sname, rename->rn_snamelen); - READ_BUF(4); - rename->rn_tnamelen = be32_to_cpup(p++); - READ_BUF(rename->rn_tnamelen); - SAVEMEM(rename->rn_tname, rename->rn_tnamelen); - if ((status = check_filename(rename->rn_sname, rename->rn_snamelen))) - return status; - if ((status = check_filename(rename->rn_tname, rename->rn_tnamelen))) - return status; + status = nfsd4_decode_component4(argp, &rename->rn_sname, &rename->rn_snamelen); + if (status) + goto out; + status = nfsd4_decode_component4(argp, &rename->rn_tname, &rename->rn_tnamelen); + if (status) + goto out; - DECODE_TAIL; + status = nfs_ok; +out: + return status; } static __be32 From patchwork Fri Nov 13 15:04:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903799 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A687E138B for ; Fri, 13 Nov 2020 15:04:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8D5F92223C for ; Fri, 13 Nov 2020 15:04:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ja3Lu2KO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726822AbgKMPEs (ORCPT ); Fri, 13 Nov 2020 10:04:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726773AbgKMPEs (ORCPT ); Fri, 13 Nov 2020 10:04:48 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 384F7C0617A7 for ; Fri, 13 Nov 2020 07:04:48 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id z3so3249179qtw.9 for ; Fri, 13 Nov 2020 07:04:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=z6R7j/ErAQpQVywmAvZWNTxAOEZj+FGX4EmAZkvMQFc=; b=ja3Lu2KOy2BuOFXkzL2lUUWk5YUS1WrCd0ke75rF1JPSD47BkCy4pBaisbU6MGCrE/ k3Sl5uDr4D8MMyKZ53FqPPvSRHmpdR3DLkGWOydBZqrrIfHNBZopy380Egi8pdxglddX nTB0vKzyjD2b3sigE2pWbYMA6tIW4jIZjL+X4CTdWpt5sdOBGXa4+8zO+BFbDDc7M6Dx w5wJ86eOivuIw5U4psj8fG3fuvLYNzVdeZDHqnZW3iJGhH/PKcdA8gt/Bpo5TAjMLgjf bmanaRWfAJpyZ8Xixhw1pZjaXPoxkmysxqQ3rgbh+5g78Lhbhg5/PSTYGsEliEhAkBUm RsBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=z6R7j/ErAQpQVywmAvZWNTxAOEZj+FGX4EmAZkvMQFc=; b=TMytb9v1CmPxcp89rGxJ1LYD0ENnA/8nVMjy30Idt3ItZiPkRGvmoLjt/jlXtY1OAR D3hZbf+k0kpqaNW+1rXVIDiOYLVi9LPffjT60vmag2I4TkBVD2wPugpKnCj7w9lgFWfD 8KRDbDwjUcHShdnto9fXJsxySOF1Cu0D+LOYvPUubqO7Jdno73gDLMmhZZsUs3vaeLb5 EQLwkOm3xFnt7twooWs7zBm9Hvl6Zfc7/KH6Kx5kKxlRoqQNew5Zs7eoXHIZ+W3zJKhk YC1ip6lNcgmXsEv7XQNGkuIISq+x//Ixq/SopYd6/KfNbfzFm9BkZcqdSp31ZW6PzyKd wivg== X-Gm-Message-State: AOAM531/W0/lrtajS9szodKIUbLqi5avql1hRWWb8kN8wzGPDnVtn4Pw +cuPEDPj8THV0Pgy9t1jydXRIfU5ehY= X-Google-Smtp-Source: ABdhPJyxXocjT06QsIw2ANOUkWRP9V84oDurTfyQBfYFwgihfjbnXJiZdnewZ9cApwZ+Pw/xVzx8Lw== X-Received: by 2002:aed:2ce1:: with SMTP id g88mr2379038qtd.299.1605279886809; Fri, 13 Nov 2020 07:04:46 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id r89sm1049933qtd.16.2020.11.13.07.04.45 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:46 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4jJE032718 for ; Fri, 13 Nov 2020 15:04:45 GMT Subject: [PATCH v1 27/61] NFSD: Replace READ* macros in nfsd4_decode_renew() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:45 -0500 Message-ID: <160527988514.6186.8509161893732755229.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index aa71baacabba..e7b43bc69af9 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1246,15 +1246,7 @@ nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename static __be32 nfsd4_decode_renew(struct nfsd4_compoundargs *argp, clientid_t *clientid) { - DECODE_HEAD; - - if (argp->minorversion >= 1) - return nfserr_notsupp; - - READ_BUF(sizeof(clientid_t)); - COPYMEM(clientid, sizeof(clientid_t)); - - DECODE_TAIL; + return nfsd4_decode_clientid4(argp, clientid); } static __be32 From patchwork Fri Nov 13 15:04:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903803 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 07BB8139F for ; Fri, 13 Nov 2020 15:04:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DF35D2222F for ; Fri, 13 Nov 2020 15:04:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JM4WdC7b" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726691AbgKMPEy (ORCPT ); Fri, 13 Nov 2020 10:04:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36218 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPEx (ORCPT ); Fri, 13 Nov 2020 10:04:53 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D58BC0613D1 for ; Fri, 13 Nov 2020 07:04:53 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id v143so9050221qkb.2 for ; Fri, 13 Nov 2020 07:04:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=B1MpHXz09YNUUnQLdTm8YbHDT6KMUv02pXKtadIKbKI=; b=JM4WdC7bSPHq9VPg747oh3FXyfhIwT2AdZv+sLzyEZ2hl07xeCdPA7iki97CnxxycG f6b3a7Oiuo4oas4QqBYD5bAvKqJUX4t1kqmH8xHQ+WP0h+G8CX4BG29lxMuc3mjjKFRq +VLsahZm8RzWehRDM4ZX7og43u3tVGtBqgg8TomFKcaowsObxUq17KCut47PjeC8aUiM ciSZdxYDv/zP97nPu24xywCgc0h4A2Ctvy4zGGcAPOXQayyZei6L1f+K9yThqDmQrW5P iMCgbDT/9Y1x+Hkk0R+pVOZ3skiUgEP3qWf0tSeKPzevntmsyuhcsksnbOMd3IM/owSW A4rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=B1MpHXz09YNUUnQLdTm8YbHDT6KMUv02pXKtadIKbKI=; b=LFsA6jiwsK3AHzChNq0VY9mX1nXI6ETzMvwBEnijYhQkSwknm3VE5YakzGWbjPtR0O dQvBFI5NhDrYhxxdaM0NoYLVOKBwV9a1i2u5yY3SAst+8466XWCRm2sl3W5Q29aFcf5L acaCUQsplJpkif/yQy+coXLU1E5k4SEJZsT3uZz+pQ+S5/wrxVVDxfJAaPHhKPpWYqkF OOm66jWXRbkaWSEmPk2HusT0pRK7MJ8twrU/LwIx5qbWYo/HD6oapDb3QL3vIrpp3XPG 5w6j9a2ltJEMgiNEYsJMpIa9Gz/J50GOOBB58WMM0s6JaEBwiOQ9xW4WFNXGkuq/xvRS I8MA== X-Gm-Message-State: AOAM5325EKOBpWkiMaJNo0qb+1WqqDnEq6mBLayoBDw+nF8M5zBanJQM YkTW9KPHryqOOBdzw4bsaWckBwZaKOM= X-Google-Smtp-Source: ABdhPJxv3wKsbDnD/ksppO6a/RVcpGpOI87XSiD/uW5vEm5VbUH/Rjy+bdPKYGVsInb2W7ETnQ7ttw== X-Received: by 2002:a37:4953:: with SMTP id w80mr2264819qka.35.1605279892191; Fri, 13 Nov 2020 07:04:52 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id h4sm7267673qkh.93.2020.11.13.07.04.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:51 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4oWJ032721 for ; Fri, 13 Nov 2020 15:04:50 GMT Subject: [PATCH v1 28/61] NFSD: Replace READ* macros in nfsd4_decode_secinfo() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:50 -0500 Message-ID: <160527989049.6186.7791382861982563259.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index e7b43bc69af9..bbae2b1726ac 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1253,16 +1253,7 @@ static __be32 nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp, struct nfsd4_secinfo *secinfo) { - DECODE_HEAD; - - READ_BUF(4); - secinfo->si_namelen = be32_to_cpup(p++); - READ_BUF(secinfo->si_namelen); - SAVEMEM(secinfo->si_name, secinfo->si_namelen); - status = check_filename(secinfo->si_name, secinfo->si_namelen); - if (status) - return status; - DECODE_TAIL; + return nfsd4_decode_component4(argp, &secinfo->si_name, &secinfo->si_namelen); } static __be32 From patchwork Fri Nov 13 15:04:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903807 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 19800138B for ; Fri, 13 Nov 2020 15:05:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 001DE2222F for ; Fri, 13 Nov 2020 15:04:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bng5Wi8J" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726823AbgKMPE7 (ORCPT ); Fri, 13 Nov 2020 10:04:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPE6 (ORCPT ); Fri, 13 Nov 2020 10:04:58 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BFF09C0613D1 for ; Fri, 13 Nov 2020 07:04:58 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id d28so8992364qka.11 for ; Fri, 13 Nov 2020 07:04:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=fOHEgvtZ5sJGF0ttmuJtyWaAjKqDGfg4lvaqpxotxao=; b=Bng5Wi8J0FtY+GEg5bvCdKkeMCvZsYY5eW90kJCJwiZlO25mDlESh9OQck9HJANGdv 5U1b1jVJG+DpqvbyD2LmBJGBYwaQWbACv1b17/1PFhjRhUTiD2T+1gxOrbxIIOVidbux mrCtHD0h2GPo3BHh7One/Km03sfHCkNyM5LIDAJRyHStHys0Q2vuAU6kjko6oxluVSYa D2kHzn7XM7LN1BXZrfHAc5N/QMz/ErMOtuH2L6m+skaCgbFpQ/6Xxl7xH+JoRiXtcQBi 51VCiIWJrhMhE0a+a5RHN9voPT0KOdEE1Uq9U6MnYW+dcEFegofTIRdGsmdMOcS1WIVr U25g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=fOHEgvtZ5sJGF0ttmuJtyWaAjKqDGfg4lvaqpxotxao=; b=Md5F9M5q6uVioAEN0zGKzmV6Qr9Cdp5u0hPGqawDL5lO9+8QRblMQW59EZ5hr4xWJM OfDYCvczO9e1p3fRBcEn6GyuYNsf1vZ1fWVAdn6CeTAEkZ9x/HGDph2wutFG4X0Igiup LGBF89joeuAPBYJ3AeWC5/lLOINt+STCpQiJeOeX00W/Wm9gITltBZIuYFHPmCJm39fG WmSh05dF/KWsWa4kvRI2QiaJtPL2SMalZYq08lkdFVDI46lz+Tq4Z1QbD/krBF/w+bSx iLPB6CMEixmsBiWdxdhhwoLTH2v/KRV+/fm7zoioVhkP7PdfSdwO7zkbKYMMJgw3Bofb +q8Q== X-Gm-Message-State: AOAM530QtxxziLGssg5lffvZnHQwsWA/OJLWqH5PohfIqmcOeF3Kk0ua iG6rtGWn8DwwgXxmoAcNi51qVO8DRwg= X-Google-Smtp-Source: ABdhPJxVZSR/c7WO/0BXFgS6t5lY2DueL+f1Dh1R7XLfTN5e5KOpOOUG18D2mJwABuHGKuQlTuSawA== X-Received: by 2002:a37:4782:: with SMTP id u124mr2362758qka.122.1605279897553; Fri, 13 Nov 2020 07:04:57 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id d184sm6919073qkf.136.2020.11.13.07.04.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:04:56 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF4toa032724 for ; Fri, 13 Nov 2020 15:04:55 GMT Subject: [PATCH v1 29/61] NFSD: Replace READ* macros in nfsd4_decode_setclientid() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:04:55 -0500 Message-ID: <160527989583.6186.16688438933091997482.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 55 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index bbae2b1726ac..82d599887f92 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1284,31 +1284,52 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta static __be32 nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid *setclientid) { - DECODE_HEAD; + __be32 *p, status; if (argp->minorversion >= 1) return nfserr_notsupp; - READ_BUF(NFS4_VERIFIER_SIZE); - COPYMEM(setclientid->se_verf.data, NFS4_VERIFIER_SIZE); - + status = nfsd4_decode_verifier4(argp, &setclientid->se_verf); + if (status) + goto out; status = nfsd4_decode_opaque(argp, &setclientid->se_name); if (status) - return nfserr_bad_xdr; - READ_BUF(8); - setclientid->se_callback_prog = be32_to_cpup(p++); - setclientid->se_callback_netid_len = be32_to_cpup(p++); - READ_BUF(setclientid->se_callback_netid_len); - SAVEMEM(setclientid->se_callback_netid_val, setclientid->se_callback_netid_len); - READ_BUF(4); - setclientid->se_callback_addr_len = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_prog) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_netid_len) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, setclientid->se_callback_netid_len); + if (!p) + goto xdr_error; + setclientid->se_callback_netid_val = svcxdr_tmpalloc(argp, + setclientid->se_callback_netid_len); + if (!setclientid->se_callback_netid_val) + goto nomem; + memcpy(setclientid->se_callback_netid_val, p, + setclientid->se_callback_netid_len); - READ_BUF(setclientid->se_callback_addr_len); - SAVEMEM(setclientid->se_callback_addr_val, setclientid->se_callback_addr_len); - READ_BUF(4); - setclientid->se_callback_ident = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_addr_len) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, setclientid->se_callback_addr_len); + if (!p) + goto xdr_error; + setclientid->se_callback_addr_val = svcxdr_tmpalloc(argp, + setclientid->se_callback_addr_len); + if (!setclientid->se_callback_addr_val) + goto nomem; + memcpy(setclientid->se_callback_addr_val, p, + setclientid->se_callback_addr_len); + if (xdr_stream_decode_u32(argp->xdr, &setclientid->se_callback_ident) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } static __be32 From patchwork Fri Nov 13 15:05:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903809 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 48C8B138B for ; Fri, 13 Nov 2020 15:05:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2BA792223C for ; Fri, 13 Nov 2020 15:05:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lsLc5oqS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726692AbgKMPFF (ORCPT ); Fri, 13 Nov 2020 10:05:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPFF (ORCPT ); Fri, 13 Nov 2020 10:05:05 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3EB27C0613D1 for ; Fri, 13 Nov 2020 07:05:05 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id ek7so4700736qvb.6 for ; Fri, 13 Nov 2020 07:05:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=y+sqOxjjHz6lV4tJ+S4LbUVcKfzNZhK3aN28Y5pPQr0=; b=lsLc5oqSgr+AKbGZwt48uEo8qRdDB175VSiPS2qW1r+7oaVLACdafrl5i96OhoYNZt DjLY8cTm0/HN6AztTIg1dk65L7ns9PkCBYmebHUB+fDXNk8R6sDdXAY04vZjJm0cyhNO sAiAaO2w0mhxOI+wU4wb2DSGsx6yyOVuKe4oB6tQRMmyBm2iewze6surgQy+v9WJPshA NuPqty3ealIIx6xdOAdrwJUR+Tq6fJoVoGYgj1chMKrmkBhN2HOn74/f49ugdlVCUwV2 Do76pOIbLB/oSMaZhMIxlbGrafjVaGGIdFrRPnbuPvQN0pU/Xtz+52R4hnkh7QLXeUvv mt0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=y+sqOxjjHz6lV4tJ+S4LbUVcKfzNZhK3aN28Y5pPQr0=; b=QdxU+7siCUIAXszYx2J3ucR7Giz7004xCIoWojt7/c4sfyvXXD46H54+nkx1QZPfq+ 8JcEkf6YPGoPuhE43xjL5ThEPkNei96QeP9nUBiBJJB9bWw1W4Zsofk2YMcOygqPpCqp FiacCtFDieSLHJ070buIt+rOuGybjnXPv2BczV8ANC3Jrz6jZ7asikVVt2vTC2LYN6KR D4p3WlnkQgamxzAh5F6G0y53kOJfKrl1p0k6WE3jPcoG0np3lsHnZdu7ENYt1hGVeEyz VHY+8OnHxA/Q4CLVcBkRrBw4IdjC/nqb3+yLGwixcKqRkQ6pJtMw4gtUApVFsjE0HINr Vttw== X-Gm-Message-State: AOAM533mkDNboW3UvtLMfkHKLbqhbgBkibNwtg47r7dcoQJit2sw1A5J qQKJd+llqO7GIXYL/jzAeTU/CEYF5ew= X-Google-Smtp-Source: ABdhPJxBtXC/CzQoAvxjYA/Ks6kQZmlkTXkU8RMh+xZSbZRjETkI5yxN4h+MN1ddGkQQyU7s+5AKJw== X-Received: by 2002:a0c:fe0f:: with SMTP id x15mr2744228qvr.11.1605279902626; Fri, 13 Nov 2020 07:05:02 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id m25sm6741222qka.107.2020.11.13.07.05.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:01 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF51x8032727 for ; Fri, 13 Nov 2020 15:05:01 GMT Subject: [PATCH v1 30/61] NFSD: Replace READ* macros in nfsd4_decode_setclientid_confirm() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:01 -0500 Message-ID: <160527990118.6186.9734990977907558861.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 82d599887f92..a6d6f999433c 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1335,16 +1335,21 @@ nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclient static __be32 nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid_confirm *scd_c) { - DECODE_HEAD; + __be32 status; if (argp->minorversion >= 1) return nfserr_notsupp; - READ_BUF(8 + NFS4_VERIFIER_SIZE); - COPYMEM(&scd_c->sc_clientid, 8); - COPYMEM(&scd_c->sc_confirm, NFS4_VERIFIER_SIZE); + status = nfsd4_decode_clientid4(argp, &scd_c->sc_clientid); + if (status) + goto out; + status = nfsd4_decode_verifier4(argp, &scd_c->sc_confirm); + if (status) + goto out; - DECODE_TAIL; + status = nfs_ok; +out: + return status; } /* Also used for NVERIFY */ From patchwork Fri Nov 13 15:05:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903811 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id ED292138B for ; Fri, 13 Nov 2020 15:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CB85E22201 for ; Fri, 13 Nov 2020 15:05:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IKJ9D2rV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726777AbgKMPFK (ORCPT ); Fri, 13 Nov 2020 10:05:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36270 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPFK (ORCPT ); Fri, 13 Nov 2020 10:05:10 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6017C0613D1 for ; Fri, 13 Nov 2020 07:05:09 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id b11so4698622qvr.9 for ; Fri, 13 Nov 2020 07:05:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=+jVRcRBy4kdonFvOYvkqx8Zys4s9YbgDXzHUnlo9VX0=; b=IKJ9D2rVMGzaMEeq3p7YiAIL2VMPdLozJcRyvRV6Qnm5SIawxs8ujw/KuAjToUxh5d kf7wcquPbkjJkcaeYZx0Dpu/5tiEEUbeY/zYfipoHYpLugU/MfUxuB2kdr0nMPgUOoiM SSem8m8qZVOl00Iql0F4LtcKl1W50TjaxWmioriyd4N8fe1w+W88r1XDyhtqEQ6reNa9 ovQBmdTS53HXYksDijITLYRK775VIqcoyO3rm9qgjOWP/lIwLYbnS1ypf+LB0gui3JYn Y+Czq+nfhNDLwSV8jhPxTICYg8/euacvucUeYndIJhtGTDKoSUDt7fyZJaC/i+XB/ukv 0VTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=+jVRcRBy4kdonFvOYvkqx8Zys4s9YbgDXzHUnlo9VX0=; b=uU1+dhuJqGemCaY17VsVk1L6DSvkXQouDfG4esqv5GUX+Kum+Q/8Nn5KAE8VXkwrIa KMVWrOckEGXVlUR22Go0UWFulgNVACbki5ywj4+gmueohmZ/5tY9lpSELdtV106MonKl 6vvvTBQcRbPZxT5tUQ/bz0X4QCrKHZIVlKUf1p8tVvVNwilloIDBCOSraOfdNPcfV/pJ ZKSjrV/H0qFOWM0p2X/lYWs+lW8JlPX+z3sT9m6PVpCphM3YIr2vn2cVkMk81evk7r0l 6ZL7ObUNF+yhEtcq8uJqJhZxBki3+mZ+dxN654YiVqub6I7h9zYK9B15C5NoaGN1+j2f 4C7g== X-Gm-Message-State: AOAM533MvZfi0zVq2tbHIfq3eyrDm1eO/ovwK8CHvQoOqc95qDBGyZ+B CECkLlAM0zWq2a/uMlSR8qpeoap7ut4= X-Google-Smtp-Source: ABdhPJx2xN2VtJPosGiyzeZEgqm4woz3x+VhheEzel9A0fEUPrLg8wZN7qgpxzGR/9H7yvu04B12gQ== X-Received: by 2002:a0c:fde4:: with SMTP id m4mr2615391qvu.16.1605279908000; Fri, 13 Nov 2020 07:05:08 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id t188sm2482794qkd.45.2020.11.13.07.05.07 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:07 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF56cb032730 for ; Fri, 13 Nov 2020 15:05:06 GMT Subject: [PATCH v1 31/61] NFSD: Replace READ* macros in nfsd4_decode_verify() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:06 -0500 Message-ID: <160527990625.6186.11138759150096411072.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index a6d6f999433c..71a9bdb67d06 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1356,7 +1356,7 @@ nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_s static __be32 nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify) { - DECODE_HEAD; + __be32 *p, status; status = nfsd4_decode_bitmap4(argp, verify->ve_bmval, ARRAY_SIZE(verify->ve_bmval)); @@ -1366,12 +1366,22 @@ nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify /* For convenience's sake, we compare raw xdr'd attributes in * nfsd4_proc_verify */ - READ_BUF(4); - verify->ve_attrlen = be32_to_cpup(p++); - READ_BUF(verify->ve_attrlen); - SAVEMEM(verify->ve_attrval, verify->ve_attrlen); - - DECODE_TAIL; + if (xdr_stream_decode_u32(argp->xdr, &verify->ve_attrlen) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, verify->ve_attrlen); + if (!p) + goto xdr_error; + verify->ve_attrval = svcxdr_tmpalloc(argp, verify->ve_attrlen); + if (!verify->ve_attrval) + goto nomem; + memcpy(verify->ve_attrval, p, verify->ve_attrlen); + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } static __be32 From patchwork Fri Nov 13 15:05:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903813 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C23ED138B for ; Fri, 13 Nov 2020 15:05:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A076822201 for ; Fri, 13 Nov 2020 15:05:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AeXu5RnT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726825AbgKMPFP (ORCPT ); Fri, 13 Nov 2020 10:05:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPFO (ORCPT ); Fri, 13 Nov 2020 10:05:14 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B388AC0617A6 for ; Fri, 13 Nov 2020 07:05:14 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id z3so3250339qtw.9 for ; Fri, 13 Nov 2020 07:05:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=RzY1AXh14UuN+4OJCPUoWXLaQbfFmrECoub0hPAxNsc=; b=AeXu5RnTuHzdqPenzz/S58InzNGcqlPNZFNMC1ISlXaspXUlhk6fmw6KXb7SpoW5SI EEwMGRDj2xJYeWF9Z5ZUyFE+3IhuxOKydgbANaIWGwAdGgYXxORREVcBRdl6SKLwqxwn tCDxpfDWVL3kYq59tP18GPFvkVGcwGTxs2TXWDqUcWCyR4PghR/Y/EGdc5Eqqmi5aA/w FxBYrMalfbEn1F9p8SxCiaqzeFxJ7XDh7ut2yQ6rFaZ/AFuq/OE12XZCtUMlM8DKlntq fmgzWOXtlyx0p2H7BzKRco8eBqIYkyEyizJoLVZRsVo4efixZ0CYPxLMESl0mmnWX0z9 xbLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=RzY1AXh14UuN+4OJCPUoWXLaQbfFmrECoub0hPAxNsc=; b=ZPqNV7xJnZcDqoKkgJM5/2TwYXYQiBKhpj0u6s3ZTlmUjPWp9MZQIeXtOg1dE+CdzD SNB/9VnuxfFfCkIJubtJMpq7ZdQ7f0NNCAA4pfgW0o5Vl8bCF2+GBVrTGZYPxWVQ5n4a 4y6kdcJ80ZN/PC/c1DQPJcDYNlacewL1L2rHneAHuURinlxjJakzai1NMbyIEzioVJcr qYqbu1agakfvFrMntUOgw0vDwA52DWZwda7AK2iuYCk955kVIcAOcD25RzwWsfmoMHVO iEiuAPeYs/6wrZ67yrcp/Ec8APpNBJBQUKLlGY6MfhK4f7bCRYDzsn/oKHG+OqELyjxa qjEw== X-Gm-Message-State: AOAM532wH6aDaNzxs28K6IObmqQArx8o5+f4f9oSXYb1ScTfoGY0cIbY KrMosvIvJY7mvhML8Q6uH1e58CXAC9A= X-Google-Smtp-Source: ABdhPJwwt9tG9aXPHKEZDCeUNxVTLhDjczsKzjb3u1X/pD7bvJVDv2ws2mYeFGdCwPOn9RUoXhplug== X-Received: by 2002:aed:3ba6:: with SMTP id r35mr2357738qte.269.1605279913287; Fri, 13 Nov 2020 07:05:13 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id 203sm6871948qkd.25.2020.11.13.07.05.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:12 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5BAd032733 for ; Fri, 13 Nov 2020 15:05:11 GMT Subject: [PATCH v1 32/61] NFSD: Replace READ* macros in nfsd4_decode_write() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:11 -0500 Message-ID: <160527991153.6186.3728345021042537746.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 71a9bdb67d06..db63cd46b9b1 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1387,22 +1387,27 @@ nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify static __be32 nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) { - DECODE_HEAD; + __be32 status; status = nfsd4_decode_stateid4(argp, &write->wr_stateid); if (status) - return status; - READ_BUF(16); - p = xdr_decode_hyper(p, &write->wr_offset); - write->wr_stable_how = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u64(argp->xdr, &write->wr_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &write->wr_stable_how) < 0) + goto xdr_error; if (write->wr_stable_how > NFS_FILE_SYNC) goto xdr_error; - write->wr_buflen = be32_to_cpup(p++); - + if (xdr_stream_decode_u32(argp->xdr, &write->wr_buflen) < 0) + goto xdr_error; if (!xdr_stream_subsegment(argp->xdr, &write->wr_payload, write->wr_buflen)) goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:05:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903815 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 50CB3138B for ; Fri, 13 Nov 2020 15:05:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 34D8E2223C for ; Fri, 13 Nov 2020 15:05:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UuZeIFKJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726465AbgKMPFU (ORCPT ); Fri, 13 Nov 2020 10:05:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPFU (ORCPT ); Fri, 13 Nov 2020 10:05:20 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 663E0C0617A6 for ; Fri, 13 Nov 2020 07:05:19 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id z17so4678376qvy.11 for ; Fri, 13 Nov 2020 07:05:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=AATQi/3PHsNcqlmpzDs0L1GRz6dLwEwqH36LOnZSN30=; b=UuZeIFKJ82bxCL1sfZPe9qikuYICeKiip4CD01GJYbdUrONuXJmeKsj5twSqShhYRP SJkpfWGW3/VWyzeNqBVIuiKaVeiznPt0CrAeC7EVuNCVUTG57cOlj25xfZfXGWW248lP +tBV/Oee32Kki5qpBA2qGhXJcYeefOEnpjjkr23JUcIEwxVj2L1AmJnk8eFUAoxmA4CV F0w1xVejzF4WHBuL97u+dYD9T5vSsQvdm4pqlswyE3OeBjYsa46bXBjOrA9QKjeaXi6C qJ0bGFMg1RZylWNGSnaEU+9J68o+lQI9bm/Y++V611XFS3x4mM+4FW9z37gz4DbMHEJU 9pTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=AATQi/3PHsNcqlmpzDs0L1GRz6dLwEwqH36LOnZSN30=; b=PgG/Lw5i5HslxD5rUOb3kq7T04a9KAQGXfotvq8UqEjR6GOG76rvKtIeu8sZwPbCle hmTkcpfG4XGwY7v6kP0P5Zhu1mLyNlwCRiOHPVdQFA9l1SfV0TarrdEuIMVN30R8hjO/ jG+xT+gFaXUi9e7Q2qN0PN7AKtYt97slae367pb4drsyvPMLUjX8imlNbYbXdNRKwTyX qB8FKYsPSFhijHASUTwlbk9lSiK6g/d1ViaZ2sykNTtgZfjFJ/c0TiT73J6YumCoDvec WII/lZQIPk03QkiGvQmIoW8icqeA++EcZEe0Ssic9XtvY//7Osp6yWeEdbRVqmWUGGj8 L/Fg== X-Gm-Message-State: AOAM530tdeMAlAhye3AsfBp8eHIseBBmOcuH3jpH0up1LCI4yQpR8l4d bResc7Js5IWxeKqOM5d8TtoQWuNu2AE= X-Google-Smtp-Source: ABdhPJxuarLo4AIqkaX4mnRzwF31M64EU8OX1s7XAk0Va4yKB71zyOkEEvIzR9wvdI3F5h4cVz6VsA== X-Received: by 2002:ad4:524d:: with SMTP id s13mr2764938qvq.19.1605279918285; Fri, 13 Nov 2020 07:05:18 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id a3sm6679591qtp.63.2020.11.13.07.05.17 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:17 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5GZI032736 for ; Fri, 13 Nov 2020 15:05:16 GMT Subject: [PATCH v1 33/61] NFSD: Replace READ* macros in nfsd4_decode_release_lockowner() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:16 -0500 Message-ID: <160527991682.6186.3164857695766265038.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index db63cd46b9b1..4a71346dcd9a 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1413,20 +1413,24 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) static __be32 nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_release_lockowner *rlockowner) { - DECODE_HEAD; + __be32 status; if (argp->minorversion >= 1) return nfserr_notsupp; - READ_BUF(12); - COPYMEM(&rlockowner->rl_clientid, sizeof(clientid_t)); - rlockowner->rl_owner.len = be32_to_cpup(p++); - READ_BUF(rlockowner->rl_owner.len); - READMEM(rlockowner->rl_owner.data, rlockowner->rl_owner.len); + status = nfsd4_decode_state_owner4(argp, &rlockowner->rl_clientid, + &rlockowner->rl_owner); + if (status) + goto out; if (argp->minorversion && !zero_clientid(&rlockowner->rl_clientid)) - return nfserr_inval; - DECODE_TAIL; + goto inval_arg; + + status = nfs_ok; +out: + return status; +inval_arg: + return nfserr_inval; } static __be32 From patchwork Fri Nov 13 15:05:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903823 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3409138B for ; Fri, 13 Nov 2020 15:05:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D78E52223C for ; Fri, 13 Nov 2020 15:05:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XBy0nV/L" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726432AbgKMPFo (ORCPT ); Fri, 13 Nov 2020 10:05:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbgKMPFn (ORCPT ); Fri, 13 Nov 2020 10:05:43 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 507C2C0613D1 for ; Fri, 13 Nov 2020 07:05:25 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id t5so6856005qtp.2 for ; Fri, 13 Nov 2020 07:05:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=aPofqo6TKXej4EkUb4mQaZvqVuPfdjQqbGY1MEBKs/0=; b=XBy0nV/LDp7BP5QX7g8YmcQIePKFTCV/rJ5q5xiBI72d2xBMf3gjdRzJYAB38N/46X M0+owqRGuNh7dhbiMXgzBslOqtH1BiNFDwJF6srSGB/mnJIKAiPpQ/UJOO2vStw3Z5PP gWfvwthgY54eQHjSb4ThNvOEogPSkSFLTdcuNDPBb2L4/Y0Xsyk45ok7avjw0MoESfqO uhfZwb3u6UQOk797xeFDEr0wQzD8l0OlQ2GjKPC7jLkP0ZEvCsjlQguZ7oQzPZ72OoQC EnG8pKfuuVoEh8gTW26lQRJ0Pbbzn8ozZC4GR7/UCU2hZaS9ZFeIqC6L4XDy9n9RZaQc cjMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=aPofqo6TKXej4EkUb4mQaZvqVuPfdjQqbGY1MEBKs/0=; b=Kds2PlO2gaPXmepCMFKSNxxmhHrZcfZqO6vq5dmok3oQaTzoAgaGL3zhOmllTCT8eg Y+QoHuDqWrYomrfLh6Ab9gd5qOc9Y0t5b+mQIt4GG33cO7dsfp8wVbQANUATGxzWZSY2 G+o3BHqyW8lfNuQujlgXRC6kJNBrV0uqNK77LKL8QZW8TbH+gayhyyhlKiBcsB53722i Wzv/55P+O29wLsd9B50gqbk3UsUx2osxe0frxuLn85xfxeEYi7gmNXD6cZugRivbIVcU paps/c3AkHPmiREOvnP1AThcX6iXS3SqFd90XCGcDZMahddilZPWBUkJrtkfTJ/x+9AA 4hcQ== X-Gm-Message-State: AOAM530HSWnqEIEby6c/i5UqdOiudX2QMHclZtOcNOwLcPH5Iyw/iY/0 ylhGerDgvP4zR8baLzWu10ht5imPvbM= X-Google-Smtp-Source: ABdhPJwQFwtFpu1IsYHWqcGq0Pm1UTdjx6Cur8YqRKNmrZIptucKLTwn9r/PJFDeUFrWHFa553mGmQ== X-Received: by 2002:aed:2d02:: with SMTP id h2mr2246380qtd.96.1605279923492; Fri, 13 Nov 2020 07:05:23 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id r19sm6496972qtm.4.2020.11.13.07.05.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:22 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5L8I032739 for ; Fri, 13 Nov 2020 15:05:21 GMT Subject: [PATCH v1 34/61] NFSD: Replace READ* macros in nfsd4_decode_cb_sec() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:21 -0500 Message-ID: <160527992189.6186.5049295918269412471.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 73 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 28 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 4a71346dcd9a..2d2034d7f48e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -570,24 +570,22 @@ nfsd4_decode_stateid4(struct nfsd4_compoundargs *argp, stateid_t *sid) static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs) { - DECODE_HEAD; struct user_namespace *userns = nfsd_user_namespace(argp->rqstp); - u32 dummy, uid, gid; + u32 dummy, uid, gid, i, nr_secflavs; char *machine_name; - int i; - int nr_secflavs; + __be32 *p; /* callback_sec_params4 */ - READ_BUF(4); - nr_secflavs = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &nr_secflavs) < 0) + goto xdr_error; if (nr_secflavs) cbs->flavor = (u32)(-1); else /* Is this legal? Be generous, take it to mean AUTH_NONE: */ cbs->flavor = 0; for (i = 0; i < nr_secflavs; ++i) { - READ_BUF(4); - dummy = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; switch (dummy) { case RPC_AUTH_NULL: /* Nothing to read */ @@ -595,24 +593,32 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_ cbs->flavor = RPC_AUTH_NULL; break; case RPC_AUTH_UNIX: - READ_BUF(8); /* stamp */ - dummy = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; /* machine name */ - dummy = be32_to_cpup(p++); - READ_BUF(dummy); - SAVEMEM(machine_name, dummy); + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, dummy); + if (!p) + goto xdr_error; + machine_name = svcxdr_tmpalloc(argp, dummy); + if (!machine_name) + goto nomem; + memcpy(machine_name, p, dummy); - /* uid, gid */ - READ_BUF(8); + /* uid, gid, gidcount */ + p = xdr_inline_decode(argp->xdr, sizeof(__be32) * 3); + if (!p) + goto xdr_error; uid = be32_to_cpup(p++); gid = be32_to_cpup(p++); - /* more gids */ - READ_BUF(4); - dummy = be32_to_cpup(p++); - READ_BUF(dummy * 4); + dummy = be32_to_cpup(p); + p = xdr_inline_decode(argp->xdr, dummy << 2); + if (!p) + goto xdr_error; if (cbs->flavor == (u32)(-1)) { kuid_t kuid = make_kuid(userns, uid); kgid_t kgid = make_kgid(userns, gid); @@ -629,26 +635,37 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_ case RPC_AUTH_GSS: dprintk("RPC_AUTH_GSS callback secflavor " "not supported!\n"); - READ_BUF(8); + /* gcbp_service */ - dummy = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; + /* gcbp_handle_from_server */ - dummy = be32_to_cpup(p++); - READ_BUF(dummy); - p += XDR_QUADLEN(dummy); + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; + if (!xdr_inline_decode(argp->xdr, dummy)) + goto xdr_error; + /* gcbp_handle_from_client */ - READ_BUF(4); - dummy = be32_to_cpup(p++); - READ_BUF(dummy); + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; + if (!xdr_inline_decode(argp->xdr, dummy)) + goto xdr_error; break; default: dprintk("Illegal callback secflavor\n"); return nfserr_inval; } } - DECODE_TAIL; + + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } + /* * NFSv4 operation argument decoders */ From patchwork Fri Nov 13 15:05:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903817 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E96C9139F for ; Fri, 13 Nov 2020 15:05:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CDA482222F for ; Fri, 13 Nov 2020 15:05:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sQ0BNjtg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726773AbgKMPFa (ORCPT ); Fri, 13 Nov 2020 10:05:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPFa (ORCPT ); Fri, 13 Nov 2020 10:05:30 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D5BDFC0617A6 for ; Fri, 13 Nov 2020 07:05:29 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id d38so3362425qvc.3 for ; Fri, 13 Nov 2020 07:05:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=yA+DP94Pfqfd4BIvF3KjEjwpQ4b7os8QlMhrDBLPiEw=; b=sQ0BNjtgJmwHWq90/2A4+dC0wbv+nz1DVT3bUw9TEYwramzHIw/xSCyu1V8vA8iOON W2dj/t/3UOz7sl0ACLxjqxzqMsWjbuTJw71FLLUroGX4kjlYjAIpltdYbQTxKZfBFanC gn5Zv0/ATn2hlIfkSwO5HYM2OFQW7NXudpIY4y16nKAju5MysB/elSlHIZpz6mQKr6FM 6bCshyMD3HWiwuMc9ftD2R7E+Wfo+QQoM+gYPzbv+fmSC6EhC4Q+AE/OTyQqguJVhKxR mBQ81rwWeJv2OGn68Txioy7B8unL9CvUDJjweGVrfDUK7WyBF5d3p3RUSPzm5yMEVaTJ hMGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=yA+DP94Pfqfd4BIvF3KjEjwpQ4b7os8QlMhrDBLPiEw=; b=ch2IyiWnKcFB6kOeiqnBMbT7h5FlV9o3K3qOd+P5Ig3OANGcFbh7qG4ph/zzwQtr9f MkvNzZHVPDvkoTDC6lfzGvtxUpJL/bmGYsJ2mu0RmC+cRLyouev5SyXjO8/DylGGhCQL w8lqerMsD0o9stxAtC7gXc0fYDoPxzxJj/edBIiYR6GPvM0k1xuOjH/z4ejR8ubnLV2s Jdab+SmlCJlwabz5wONblI/LJKpWdYQ2xheMT/yyJoOYfzoxDnvLGtiewYa3cuUaXT+t C1Whw2WVooQWL2YIx999YrDylzGLtxCThbK1yy3I7GFzThhLoAECry04/IaN25aSsLAu oQeQ== X-Gm-Message-State: AOAM531U3D1IaHQl9rWgNc4IB+4JxaYXQOYpIgTaPiwN7cCRd5r34Zgb AL2bcbqcY6kzanLkTqXuNQL6uKvqiPc= X-Google-Smtp-Source: ABdhPJzHoFPltoK6gkBf2RjImr2qJyuD28qDi6uth/1z8L2ET9VrHQjWd2bazvicZ2+HCNZBWC6c7w== X-Received: by 2002:a0c:ab8f:: with SMTP id j15mr461445qvb.54.1605279928831; Fri, 13 Nov 2020 07:05:28 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id r18sm6801662qtp.89.2020.11.13.07.05.27 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:28 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5RwN032742 for ; Fri, 13 Nov 2020 15:05:27 GMT Subject: [PATCH v1 35/61] NFSD: Replace READ* macros in nfsd4_decode_backchannel_ctl() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:27 -0500 Message-ID: <160527992717.6186.7292700826290967478.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 2d2034d7f48e..ff466bea0084 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -678,17 +678,6 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access return nfs_ok; } -static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, struct nfsd4_backchannel_ctl *bc) -{ - DECODE_HEAD; - - READ_BUF(4); - bc->bc_cb_program = be32_to_cpup(p++); - nfsd4_decode_cb_sec(argp, &bc->bc_cb_sec); - - DECODE_TAIL; -} - static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) { DECODE_HEAD; @@ -1450,6 +1439,15 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel return nfserr_inval; } +static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, struct nfsd4_backchannel_ctl *bc) +{ + if (xdr_stream_decode_u32(argp->xdr, &bc->bc_cb_program) < 0) + goto xdr_error; + return nfsd4_decode_cb_sec(argp, &bc->bc_cb_sec); +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) From patchwork Fri Nov 13 15:05:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903829 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A52F4138B for ; Fri, 13 Nov 2020 15:05:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8A4952222F for ; Fri, 13 Nov 2020 15:05:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dI2+KovC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726560AbgKMPFy (ORCPT ); Fri, 13 Nov 2020 10:05:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36346 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPFx (ORCPT ); Fri, 13 Nov 2020 10:05:53 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D091C0617A6 for ; Fri, 13 Nov 2020 07:05:35 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id a15so2545679qvk.5 for ; Fri, 13 Nov 2020 07:05:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=YGj5bWKJIkJFlw0NfGjJ9NNND8YbZyUVEdMssQwW4vY=; b=dI2+KovC+wK5ZFm+mUAR21WTdfR33PFa84zmB3L3k6ybPoIYgR1BSEffG8abe8ema6 1z8DvqAif46Xqz9RdSItXv9T6JLtyBK13bJfuFlYbPY2pICVUU33XxohJXgEhmfHL6In /q43rJcjVkJkw0QVACkpQrB28B7IoTwJWI5BnGU82kF293GWyofhuKUweg8+cm7kbCKF 7Dv5SnnJFzOGVz1lpTcKKAmU0R7t5jCQKlTOdgP+tsmzAsJxDh7C6jQHzx406mXPRmPs pG8/AI0QnWstI1eFwBbxv2k8CpvMCBY9wv/Jt6v1lZOGdQ8/vbcscQP+7N66BQPhAdoi Eztg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=YGj5bWKJIkJFlw0NfGjJ9NNND8YbZyUVEdMssQwW4vY=; b=fr8L6u2hXfXErxKGqV8rOe0VdNUqzfgCdy5ttkPL62wGeL2wv4+fzTrAP+5uxGMj00 CpjpaY7qtpqCExuj3iMZPU6zkviJthHT5SbtYqWvTfQchqTU5QoqBvW+05TNkRMm+4l2 IFz7dyJX7nmBTJYShQoPXw6keBNmDm217eNRRj0VuJbYRj5B3fdmqIRflaKNnFoeJ8u9 36atE9bz/Az48R8zrs+JoOyq+sr+vW3/OL6HN4SbsBdq6trJDCeq93LymY9cxF5x0C08 qL5cThYb+IDXNUaBhEAFHD8lcdv/Tj0Snid0nkpoCX4k3vcpy66W8KdaYNQr7caBh7Gq XRgQ== X-Gm-Message-State: AOAM5316eBJv7I2z2zbF5mVFWPla27LESDZZcWlGmRkQwHtov8plOCC4 lk7aO97g5IUAD2FJ8hVQ1N0IVJfAqao= X-Google-Smtp-Source: ABdhPJy9Ed/SdZqCtBupSHWNOzkWOoqQzu5eztsa4Wh8iLx1qIthyJixjB+vzVWbuaVEUzsxbxnhOg== X-Received: by 2002:a0c:9004:: with SMTP id o4mr2808935qvo.17.1605279934153; Fri, 13 Nov 2020 07:05:34 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id q189sm7018021qkd.41.2020.11.13.07.05.33 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:33 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5WiD032745 for ; Fri, 13 Nov 2020 15:05:32 GMT Subject: [PATCH v1 36/61] NFSD: Replace READ* macros in nfsd4_decode_bind_conn_to_session() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:32 -0500 Message-ID: <160527993246.6186.10485335449992679865.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index ff466bea0084..73a4b23849e2 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -568,6 +568,20 @@ nfsd4_decode_stateid4(struct nfsd4_compoundargs *argp, stateid_t *sid) return nfserr_bad_xdr; } +static __be32 nfsd4_decode_sessionid(struct nfsd4_compoundargs *argp, + struct nfs4_sessionid *sessionid) +{ + __be32 *p; + + p = xdr_inline_decode(argp->xdr, NFS4_MAX_SESSIONID_LEN); + if (!p) + goto xdr_error; + memcpy(sessionid->data, p, sizeof(sessionid->data)); + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs) { struct user_namespace *userns = nfsd_user_namespace(argp->rqstp); @@ -678,18 +692,6 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access return nfs_ok; } -static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) -{ - DECODE_HEAD; - - READ_BUF(NFS4_MAX_SESSIONID_LEN + 8); - COPYMEM(bcts->sessionid.data, NFS4_MAX_SESSIONID_LEN); - bcts->dir = be32_to_cpup(p++); - /* XXX: skipping ctsa_use_conn_in_rdma_mode. Perhaps Tom Tucker - * could help us figure out we should be using it. */ - DECODE_TAIL; -} - static __be32 nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) { @@ -1448,6 +1450,26 @@ static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, stru return nfserr_bad_xdr; } +static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) +{ + __be32 *p, status; + + status = nfsd4_decode_sessionid(argp, &bcts->sessionid); + if (status) + goto out; + p = xdr_inline_decode(argp->xdr, sizeof(__be32) * 2); + if (!p) + goto xdr_error; + bcts->dir = be32_to_cpup(p); + /* ctsa_use_conn_in_rdma_mode is ignored */ + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) From patchwork Fri Nov 13 15:05:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903819 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A53B5139F for ; Fri, 13 Nov 2020 15:05:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 87F002222F for ; Fri, 13 Nov 2020 15:05:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Fi9SQumT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726837AbgKMPFl (ORCPT ); Fri, 13 Nov 2020 10:05:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36362 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbgKMPFk (ORCPT ); Fri, 13 Nov 2020 10:05:40 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A0E3C0617A7 for ; Fri, 13 Nov 2020 07:05:40 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id d28so8994819qka.11 for ; Fri, 13 Nov 2020 07:05:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=r8Yab2+tDNnVlki6NOnGAygA7iZsesb/6/wOoAhA1Cc=; b=Fi9SQumTgSMCTIxBhLte9oqVkAY4ajjuP+Trw1/fMTFyBP5TlNL4D9kRjok1M+J1f2 uNFMNIqot24jTfcZqb5W9ihlvx/KktIELifgBQShAtPMon6091RNuKQZtkk34CYz5x2q FVlfBy4Et7yu2RVi5Zlo24nA7h9ZUQW/maJMbyIb1NcasLh//6tIw2hKSpFcdFYvS1lE UKkG9rJfzZkhAiFwYXNFmfHafpq/N0FwzPPVlQ06fE9a+jnUdYvMRFJdPG/KPySCJhKV E+FgPLJHYpTGKLQ5mD6q/Se9ciyUPF1bfgCXman6XpzyeN/1xDd6IPMxTjO3hVzOEkaX xB0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=r8Yab2+tDNnVlki6NOnGAygA7iZsesb/6/wOoAhA1Cc=; b=ZcochZDNQVInQ8rBeLNyTAZBYr8f/Vca9cpI/8lLAj0uFZn0GD7k5/Yh9qBijN6AMN zRL5s0loTHfLhP3xYWtKz6s43JTqvGJ6bPYYUY0rFjS6kHMVk+2SZsRGr+u4PHpgnADP 4n/iLY7G7bh0o/LhlMJW4PF+Ge/ct8A280O5jBkgEb3kSfPMtA2qTtArnMXnoE4I+Kb1 CSAHQJnEu7R72+shaNistRECnMHVivGjk4aXhDRNhIVhaSoz/xlS/FJYuBRsQpz8DmGW CFRd7h85lGoIHN0N64EWl0bGRfXQW6Owxy3tzvP+yNUMaOZJUPkZUJ5NQTVXi+fM3HiS iNlQ== X-Gm-Message-State: AOAM531sO4RFKqyHCtQGUu1RyoIE7rc1j4sTkAVcmlRRPkG13b1HoEQA 5I4dE4DuFXAR2gjiMviFR5R43VOY0fA= X-Google-Smtp-Source: ABdhPJwJWWX5RYesOV2MKTWFJ8GXQ9jR5w4SIQqPDPfm5HhZhBqhfcEugF1BblriKrctAEMkhR2UQA== X-Received: by 2002:a37:6351:: with SMTP id x78mr2278032qkb.301.1605279939338; Fri, 13 Nov 2020 07:05:39 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id 9sm7050743qke.6.2020.11.13.07.05.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:38 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5bVh032748 for ; Fri, 13 Nov 2020 15:05:37 GMT Subject: [PATCH v1 37/61] NFSD: Add a separate decoder to handle state_protect_ops From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:37 -0500 Message-ID: <160527993774.6186.12332332687540138715.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Refactor for clarity and de-duplication of code. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 73a4b23849e2..ece4e8afe19e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1470,12 +1470,25 @@ static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, return nfserr_bad_xdr; } +static __be32 nfsd4_decode_state_protect_ops(struct nfsd4_compoundargs *argp, + u32 *must_enforce, u32 me_len, + u32 *must_allow, u32 ma_len) +{ + __be32 status; + + status = nfsd4_decode_bitmap4(argp, must_enforce, me_len); + if (status) + return status; + return nfsd4_decode_bitmap4(argp, must_allow, ma_len); +} + static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) { int dummy, tmp; DECODE_HEAD; + u32 bm[3]; READ_BUF(NFS4_VERIFIER_SIZE); COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE); @@ -1494,28 +1507,20 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, case SP4_NONE: break; case SP4_MACH_CRED: - /* spo_must_enforce */ - status = nfsd4_decode_bitmap4(argp, exid->spo_must_enforce, - ARRAY_SIZE(exid->spo_must_enforce)); - if (status) - goto out; - /* spo_must_allow */ - status = nfsd4_decode_bitmap4(argp, exid->spo_must_allow, - ARRAY_SIZE(exid->spo_must_allow)); + status = nfsd4_decode_state_protect_ops(argp, + exid->spo_must_enforce, + ARRAY_SIZE(exid->spo_must_enforce), + exid->spo_must_allow, + ARRAY_SIZE(exid->spo_must_allow)); if (status) goto out; break; case SP4_SSV: /* ssp_ops */ - READ_BUF(4); - dummy = be32_to_cpup(p++); - READ_BUF(dummy * 4); - p += dummy; - - READ_BUF(4); - dummy = be32_to_cpup(p++); - READ_BUF(dummy * 4); - p += dummy; + status = nfsd4_decode_state_protect_ops(argp, bm, ARRAY_SIZE(bm), + bm, ARRAY_SIZE(bm)); + if (status) + goto out; /* ssp_hash_algs<> */ READ_BUF(4); From patchwork Fri Nov 13 15:05:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903825 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0D48F138B for ; Fri, 13 Nov 2020 15:05:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E555E22201 for ; Fri, 13 Nov 2020 15:05:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DzI+Noeb" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726753AbgKMPFq (ORCPT ); Fri, 13 Nov 2020 10:05:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbgKMPFq (ORCPT ); Fri, 13 Nov 2020 10:05:46 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E1321C0613D1 for ; Fri, 13 Nov 2020 07:05:45 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id t5so6856875qtp.2 for ; Fri, 13 Nov 2020 07:05:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=4iNM5JIof41jZIa8kmWrkYKBkDRyEFaKtaLABM9gns0=; b=DzI+NoebAp6WwL+3e7xaNWifcrgjZU574KYCMbYFmE10jAbPoI9WH/KBIad2l5YPAM abyykBO76vMtg7rfioAHtQZB4qVIbcjxn0XZrPhhJ3L1I2nREl6hiRkvWEbwTu0QaVh+ DdlxmAuddau4jZJfz9bRNRjXOQzUiXAkNVzKxnGEPZxQl9R5IV1SfjW4V/UhOjxAA+7n qNiT3lbtkiw8fYRmZ9DCHphGtgzSxqfYb8OMiUw7IO8EZlFd8YTbyg6EovadLIOyqr6D eb85Nd+MR2eUD1D10ReU1pt0yf8PSfEMs+nlz9j9jNxO9S0AoFUIKRKqb17Xa5u5ukDM iYpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=4iNM5JIof41jZIa8kmWrkYKBkDRyEFaKtaLABM9gns0=; b=Of+6lhqw5qsnTROPAZx2x9ucqyWHZ5nHwRLzMmwsJWL4uLN3BOAeHNsbuLX/2qkLUY 1x+MZdy7NBLxNQ5ISf0QzFZrG7TsyHgSLKy7QQgFb8vhwo2qsKnRulbK0fT6bcAvvjDH c4InJeCuqDPl/WutXcvoLpAlvC5PGf8anKntpsMJNXDkzmMieAKIAs0wYXoRH+A7YkqV EL7i/jvzwucMuPThs8K04scQWhcce+CmR6ISQu7dxaWdoPRhxDgh6/Kks77CWzpsnh8k A2cOJaZLQjjLf3wPrnK+ZPbNybdCLJOXoUtqvJf1JY0CyHdWqG3siawlxYu3W2kCkXsd G/Aw== X-Gm-Message-State: AOAM530fw8ibMWiF9xzG87crBSEuMDfV2BCt6QPx/96gIOaOMh6NZyjs 6U36TgvlGzfyXV9Go+LYFLc4q0lU3LM= X-Google-Smtp-Source: ABdhPJxwYGr2HYne9/22tXzWnns/CjP6YjfYYgpsdLYtHssQHL3vXQjShzNyiJNDzqaZQpqESu1ydg== X-Received: by 2002:aed:3a63:: with SMTP id n90mr2414209qte.133.1605279944635; Fri, 13 Nov 2020 07:05:44 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id c14sm6830563qko.29.2020.11.13.07.05.43 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:44 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5hKR032751 for ; Fri, 13 Nov 2020 15:05:43 GMT Subject: [PATCH v1 38/61] NFSD: Add a separate decoder for ssv_sp_parms From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:43 -0500 Message-ID: <160527994303.6186.1989247630725102385.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Refactor for clarity. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 86 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index ece4e8afe19e..4d666e2f8583 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -222,11 +222,13 @@ static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_ne p = xdr_inline_decode(argp->xdr, len); if (!p) goto xdr_error; - o->data = svcxdr_tmpalloc(argp, len); - if (!o->data) - goto nomem; - o->len = len; - memcpy(o->data, p, len); + if (o) { + o->data = svcxdr_tmpalloc(argp, len); + if (!o->data) + goto nomem; + o->len = len; + memcpy(o->data, p, len); + } return nfs_ok; xdr_error: @@ -1482,13 +1484,56 @@ static __be32 nfsd4_decode_state_protect_ops(struct nfsd4_compoundargs *argp, return nfsd4_decode_bitmap4(argp, must_allow, ma_len); } +/* + * This implementation currently does not support SP4_SSV. + * This decoder simply skips over these arguments. + */ +static __be32 nfsd4_decode_ssv_sp_parms(struct nfsd4_compoundargs *argp) +{ + u32 bm[3], count; + __be32 status; + + /* ssp_ops */ + status = nfsd4_decode_state_protect_ops(argp, bm, ARRAY_SIZE(bm), + bm, ARRAY_SIZE(bm)); + if (status) + goto out; + + /* ssp_hash_algs<> */ + if (xdr_stream_decode_u32(argp->xdr, &count) < 0) + goto xdr_error; + while (count--) { + status = nfsd4_decode_opaque(argp, NULL); + if (status) + goto out; + } + + /* ssp_encr_algs<> */ + if (xdr_stream_decode_u32(argp->xdr, &count) < 0) + goto xdr_error; + while (count--) { + status = nfsd4_decode_opaque(argp, NULL); + if (status) + goto out; + } + + /* ssp_window and ssp_num_gss_handles are ignored */ + if (!xdr_inline_decode(argp->xdr, sizeof(__be32) * 2)) + goto xdr_error; + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) { - int dummy, tmp; DECODE_HEAD; - u32 bm[3]; + int dummy; READ_BUF(NFS4_VERIFIER_SIZE); COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE); @@ -1516,34 +1561,9 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, goto out; break; case SP4_SSV: - /* ssp_ops */ - status = nfsd4_decode_state_protect_ops(argp, bm, ARRAY_SIZE(bm), - bm, ARRAY_SIZE(bm)); + status = nfsd4_decode_ssv_sp_parms(argp); if (status) goto out; - - /* ssp_hash_algs<> */ - READ_BUF(4); - tmp = be32_to_cpup(p++); - while (tmp--) { - READ_BUF(4); - dummy = be32_to_cpup(p++); - READ_BUF(dummy); - p += XDR_QUADLEN(dummy); - } - - /* ssp_encr_algs<> */ - READ_BUF(4); - tmp = be32_to_cpup(p++); - while (tmp--) { - READ_BUF(4); - dummy = be32_to_cpup(p++); - READ_BUF(dummy); - p += XDR_QUADLEN(dummy); - } - - /* ignore ssp_window and ssp_num_gss_handles: */ - READ_BUF(8); break; default: goto xdr_error; From patchwork Fri Nov 13 15:05:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903827 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A884B138B for ; Fri, 13 Nov 2020 15:05:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8C6FD22201 for ; Fri, 13 Nov 2020 15:05:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Swg0lvgG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726707AbgKMPFx (ORCPT ); Fri, 13 Nov 2020 10:05:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbgKMPFw (ORCPT ); Fri, 13 Nov 2020 10:05:52 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7032FC0613D1 for ; Fri, 13 Nov 2020 07:05:52 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id q7so4683444qvt.12 for ; Fri, 13 Nov 2020 07:05:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=UgXNnjZtUIgIStANzooR5lqEvSMHW8KTi+AbUU0DL5E=; b=Swg0lvgGRKeTtshlUYnz97ZHEHJkS6JmlxMGso8H8Eyd1aV196tCd5BiXJ2Fwi0oGV sEQUExIM2uyN3H+G9NYrvWOK8pIXO7LTz2wgKePsqf1GtwG21yvGNniGwVtZiNtKTkk4 HtUO7lfuaf1lkKlws2bgVpl4Re5il9445lQwi5HRsYthfRCTJ+m7TsJpYIUIdM5N/ucr Cz9VvAEq3DQBPNjuRuU7EuNzinQySdch3c4WcSIGMVMIPYKSJ/CqIVx0xKjzMXGzCRAp AHsr622pxP/6WNPyGuimqbtx7JA9BqeS7HZpbfF1YWYyd5aZP3xQYh9lW9jDXfZNocpc 2tRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=UgXNnjZtUIgIStANzooR5lqEvSMHW8KTi+AbUU0DL5E=; b=S5WbToUpmXoqIsZK10zyc881bBa6EoGK6rp0kb3urZt7pyPmm8WywXE4mUoeckj6mr 1SuKkcswsSiw3HFUoxecgyX26MNa+o/Yuye1QjytuktGNT43Rm0WtE9NbZEh3NBqFGfP arj8krgXN+OhFl4QDif+OSGt6lavJMfEDsb9HjKwjW6JXUBFURUsyPN6ayXgLOQyl8Yk 4eh3QK6tA7ciLgjMVcqqjMWeR2tJERsJLMYMAodlTOyMb/L0J3gSzAoee4+YY8G/i5tR mdlQaj1gvztwBz/djEUW0CqcgnzZRnO285DeGto6QvK9yNWGjlprPe1HBEuCGdl4YX2B Q71Q== X-Gm-Message-State: AOAM530lRtXZ4d7Ek+Fj1YAYVQyOam/dU+EVylJYtXtrIE56jMwhIe3d MLjBptGRWpeOf3OnvrjQQkmblhvhKnE= X-Google-Smtp-Source: ABdhPJwtSmrwkd4a5HctRcxcp5sxz+eluKJghR7Ilse0Hoyfk8qMbFQGiecLuIiLp2taQEUxdtxMXg== X-Received: by 2002:a0c:8143:: with SMTP id 61mr2779995qvc.6.1605279949699; Fri, 13 Nov 2020 07:05:49 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id p12sm6642479qkp.88.2020.11.13.07.05.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:49 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5mDc032754 for ; Fri, 13 Nov 2020 15:05:48 GMT Subject: [PATCH v1 39/61] NFSD: Add a helper to decode state_protect4_a From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:48 -0500 Message-ID: <160527994831.6186.7016565184206978517.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Refactor for clarity. Also, remove a stale comment. Commit ed94164398c9 ("nfsd: implement machine credential support for some operations") added support for SP4_MACH_CRED, so state_protect_a is no longer completely ignored. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4state.c | 2 +- fs/nfsd/nfs4xdr.c | 51 +++++++++++++++++++++++++++++++++------------------ fs/nfsd/xdr4.h | 2 +- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index d7f27ed6b794..be6dcc4c2ab0 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3066,7 +3066,7 @@ nfsd4_exchange_id(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, rpc_ntop(sa, addr_str, sizeof(addr_str)); dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p " - "ip_addr=%s flags %x, spa_how %d\n", + "ip_addr=%s flags %x, spa_how %u\n", __func__, rqstp, exid, exid->clname.len, exid->clname.data, addr_str, exid->flags, exid->spa_how); diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 4d666e2f8583..d3e238b538d0 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1528,26 +1528,13 @@ static __be32 nfsd4_decode_ssv_sp_parms(struct nfsd4_compoundargs *argp) return nfserr_bad_xdr; } -static __be32 -nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, - struct nfsd4_exchange_id *exid) +static __be32 nfsd4_decode_state_protect4_a(struct nfsd4_compoundargs *argp, + struct nfsd4_exchange_id *exid) { - DECODE_HEAD; - int dummy; - - READ_BUF(NFS4_VERIFIER_SIZE); - COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE); - - status = nfsd4_decode_opaque(argp, &exid->clname); - if (status) - return nfserr_bad_xdr; - - READ_BUF(4); - exid->flags = be32_to_cpup(p++); + __be32 status; - /* Ignore state_protect4_a */ - READ_BUF(4); - exid->spa_how = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &exid->spa_how) < 0) + goto xdr_error; switch (exid->spa_how) { case SP4_NONE: break; @@ -1569,6 +1556,34 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, goto xdr_error; } + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + +static __be32 +nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, + struct nfsd4_exchange_id *exid) +{ + DECODE_HEAD; + int dummy; + + status = nfsd4_decode_verifier4(argp, &exid->verifier); + if (status) + goto out; + status = nfsd4_decode_opaque(argp, &exid->clname); + if (status) + goto out; + + READ_BUF(4); + exid->flags = be32_to_cpup(p++); + + status = nfsd4_decode_state_protect4_a(argp, exid); + if (status) + goto out; + READ_BUF(4); /* nfs_impl_id4 array length */ dummy = be32_to_cpup(p++); diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 6245004a9993..232529bc1b79 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -433,7 +433,7 @@ struct nfsd4_exchange_id { u32 flags; clientid_t clientid; u32 seqid; - int spa_how; + u32 spa_how; u32 spo_must_enforce[3]; u32 spo_must_allow[3]; struct xdr_netobj nii_domain; From patchwork Fri Nov 13 15:05:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903831 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B57F8138B for ; Fri, 13 Nov 2020 15:05:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 990C22222F for ; Fri, 13 Nov 2020 15:05:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dmWIDDbw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726858AbgKMPF4 (ORCPT ); Fri, 13 Nov 2020 10:05:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPF4 (ORCPT ); Fri, 13 Nov 2020 10:05:56 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38FF8C0617A6 for ; Fri, 13 Nov 2020 07:05:56 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id q7so4683582qvt.12 for ; Fri, 13 Nov 2020 07:05:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=p5i/cE20hWPfjsz2NLW2vH2PtR7eGvbAwQ024Hme+8c=; b=dmWIDDbwsdL3B6MiwPki2nvdppNmcFHH94FuIqiZznFL4PQBt3BzD6IC38GRQNTk88 eEAHA2fZsEZZjnXR2oofmx0R2HLOjBCC1mCabS24dEKOi3wcIjXbE2cw0phUbxbjZUlp X/uXr3E68FIffL3KqYDk0sQZ9NaHB1HpcCVuSpWBs8sNVnjnLZwZdHNtPRVm9nblZwdX 1RYoiEqXV7umtpXaybTb60IdjErATF4qfVmQXgYFMCSl8YIVnqPrxYqPrNPTkqTymsmA 6Q3kCXoru3Gbs2SQydAWrIxq3Fuqsu+NaYZyps0WPrZW3SwvgVajugblZbnvJ1ORY0Bv 4YDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=p5i/cE20hWPfjsz2NLW2vH2PtR7eGvbAwQ024Hme+8c=; b=SWQYjLOZx77dRZkQpfq8Kdkx9AuXLt2ZXmQDXMkKRSCJ9U82I2391iI7xQViG+v4Ca jcjuiRpITua8p9SguLbw4GtsmS2N6OUgy7xLXzCKweBv1rz+z/+DyCcfH7bGqPpH6/Zo a0ieBbH44L3QuI0JbMNymdGPrRkSQs2b4RLhjx2x+1gnbmdUbPnUd3zP8n4zxSvXbwbR WjPUWQqkwRjC57Ia4UgL2sZuJmPnGVOqaczy7Ugml9XWEWjiV5MJNyYJDvWFQFd9mJrG Ugs+hCc1i5V0ctczXbGJn7IkSVbn4Czh5n3C4oxhyJ/cKFM8klwsHB3SLSgD32EyfIw7 aiIQ== X-Gm-Message-State: AOAM532gKfRARqVnB3nQoiJ6TpEgOaHngHjxFtWMwS5mYn/famYr2wdg g2oaL7imdrD4kosSaXdE8Lrzs6m+0Rw= X-Google-Smtp-Source: ABdhPJy8tQVDihHhv86JMJRRbKYWZgTZq8lIzI5bdLMYzA4zb94JI9jQsGzNd+wX9XvvZhN8UFfZtQ== X-Received: by 2002:a05:6214:a8f:: with SMTP id ev15mr2618133qvb.20.1605279955179; Fri, 13 Nov 2020 07:05:55 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id f189sm6778809qkb.84.2020.11.13.07.05.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:54 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5rul032757 for ; Fri, 13 Nov 2020 15:05:53 GMT Subject: [PATCH v1 40/61] NFSD: Replace READ* macros in nfsd4_decode_exchange_id() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:53 -0500 Message-ID: <160527995338.6186.13917579604098004455.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index d3e238b538d0..6897078bde82 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1567,8 +1567,8 @@ static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, struct nfsd4_exchange_id *exid) { - DECODE_HEAD; - int dummy; + __be32 status; + u32 dummy; status = nfsd4_decode_verifier4(argp, &exid->verifier); if (status) @@ -1577,16 +1577,16 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, if (status) goto out; - READ_BUF(4); - exid->flags = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &exid->flags) < 0) + goto xdr_error; status = nfsd4_decode_state_protect4_a(argp, exid); if (status) goto out; - READ_BUF(4); /* nfs_impl_id4 array length */ - dummy = be32_to_cpup(p++); - + /* nfs_impl_id4 array length */ + if (xdr_stream_decode_u32(argp->xdr, &dummy) < 0) + goto xdr_error; if (dummy > 1) goto xdr_error; @@ -1605,7 +1605,12 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, if (status) goto xdr_error; } - DECODE_TAIL; + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:05:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903833 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E87F4139F for ; Fri, 13 Nov 2020 15:06:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CB4322222F for ; Fri, 13 Nov 2020 15:06:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Nbb5GUv5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726572AbgKMPGC (ORCPT ); Fri, 13 Nov 2020 10:06:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726336AbgKMPGB (ORCPT ); Fri, 13 Nov 2020 10:06:01 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B9B2AC0613D1 for ; Fri, 13 Nov 2020 07:06:01 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id d28so8996016qka.11 for ; Fri, 13 Nov 2020 07:06:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=sJ35GwTAQwEcbcZUdgGWqf+cH8j/KL4wcQmWrxVGlBk=; b=Nbb5GUv5x+5Yw7DieWtw1z5Q6ne+WGSJwWhXPe/XS8rBRV2y/fm9I2EpYDOAyonTw1 45d7QL9oohqS033n4P81znk3vkTaPOku3WzRp0G/J7uMmMYJrBYdXCjDWUQUg5V8+iJC 1ifj4ohFP4hkZPMFnO1YKAXbri88v/oQJS33OWxNJVroMX3qxXvAHEBMtVMkRcxI4XkH VqltZckZ08uUThJk1Iw4ZNhdeArbeQuXJWGfFuZI/TTfy4PKoK4SRbx3CPiJr/MEVYna 6wUAwKRDye4e8pj/LhcxOawjgbwA1AqPmwOTQ95S65EkkHijQi6vGtzKhRku1+rw30tQ o3Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=sJ35GwTAQwEcbcZUdgGWqf+cH8j/KL4wcQmWrxVGlBk=; b=Smgw19pL1ne442DehFjzyEa1lChS4DNck7EbZoFBCKcgf/rU+01xWBuzHxgwdkp/rF TnU0zGZn080WdVO22xx4M9hkrVfzyPAe9/tqYvEbbS+dFo7LtdA/sk68/QY3K6pC+zZT GNli9tFaKlp8FCB4SCQgP8rVsjkSZwYNFjhHxvDkmQXhiXQSBa+4/uiHbwh8o9rK3IIc dkV5Sr084UwaqIhsUXKOEksQCUn0vHQIMB1nXmgobrp3KKzCiz19oP9lgvwG4EaxEKQK TkN8cE7XZLRwekPjf16hBGNqfPrxo9bd/v5yK6c3g5Ca8IbzqDtDS3k4+5pBGQgk7a9f wkLQ== X-Gm-Message-State: AOAM531Wirl3Nh5v6RunVohoXG4FueQTiAZtcFnlIqPqDZoD4nkI+jeC ygXqbnSa7dFTe6E887D3l6bjVeiSkeM= X-Google-Smtp-Source: ABdhPJxAffjyaSzRfN55JZ8iLnBsyez/HhkPaiB7P3hFOOYTO11OpC9o44t8XFI3oykNGgihzQr6vw== X-Received: by 2002:a37:8d6:: with SMTP id 205mr2311980qki.279.1605279960298; Fri, 13 Nov 2020 07:06:00 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id w1sm5431919qta.34.2020.11.13.07.05.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:05:59 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF5wN0032760 for ; Fri, 13 Nov 2020 15:05:58 GMT Subject: [PATCH v1 41/61] NFSD: Replace READ* macros in nfsd4_decode_create_session() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:05:58 -0500 Message-ID: <160527995867.6186.18155965437034920174.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 6897078bde82..dfd2008db299 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1617,15 +1617,20 @@ static __be32 nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, struct nfsd4_create_session *sess) { - DECODE_HEAD; + __be32 *p, status; - READ_BUF(16); - COPYMEM(&sess->clientid, 8); - sess->seqid = be32_to_cpup(p++); - sess->flags = be32_to_cpup(p++); + status = nfsd4_decode_clientid4(argp, &sess->clientid); + if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &sess->seqid) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &sess->flags) < 0) + goto xdr_error; /* Fore channel attrs */ - READ_BUF(28); + p = xdr_inline_decode(argp->xdr, sizeof(__be32) * 7); + if (!p) + goto xdr_error; p++; /* headerpadsz is always 0 */ sess->fore_channel.maxreq_sz = be32_to_cpup(p++); sess->fore_channel.maxresp_sz = be32_to_cpup(p++); @@ -1634,15 +1639,17 @@ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, sess->fore_channel.maxreqs = be32_to_cpup(p++); sess->fore_channel.nr_rdma_attrs = be32_to_cpup(p++); if (sess->fore_channel.nr_rdma_attrs == 1) { - READ_BUF(4); - sess->fore_channel.rdma_attrs = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &sess->fore_channel.rdma_attrs) < 0) + goto xdr_error; } else if (sess->fore_channel.nr_rdma_attrs > 1) { dprintk("Too many fore channel attr bitmaps!\n"); goto xdr_error; } /* Back channel attrs */ - READ_BUF(28); + p = xdr_inline_decode(argp->xdr, sizeof(__be32) * 7); + if (!p) + goto xdr_error; p++; /* headerpadsz is always 0 */ sess->back_channel.maxreq_sz = be32_to_cpup(p++); sess->back_channel.maxresp_sz = be32_to_cpup(p++); @@ -1651,17 +1658,24 @@ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, sess->back_channel.maxreqs = be32_to_cpup(p++); sess->back_channel.nr_rdma_attrs = be32_to_cpup(p++); if (sess->back_channel.nr_rdma_attrs == 1) { - READ_BUF(4); - sess->back_channel.rdma_attrs = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &sess->back_channel.rdma_attrs) < 0) + goto xdr_error; } else if (sess->back_channel.nr_rdma_attrs > 1) { dprintk("Too many back channel attr bitmaps!\n"); goto xdr_error; } - READ_BUF(4); - sess->callback_prog = be32_to_cpup(p++); - nfsd4_decode_cb_sec(argp, &sess->cb_sec); - DECODE_TAIL; + if (xdr_stream_decode_u32(argp->xdr, &sess->callback_prog) < 0) + goto xdr_error; + status = nfsd4_decode_cb_sec(argp, &sess->cb_sec); + if (status) + goto out; + + status = nfs_ok; +out: + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:06:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903835 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C290A138B for ; Fri, 13 Nov 2020 15:06:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A54F92222F for ; Fri, 13 Nov 2020 15:06:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="emyvwGAb" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726336AbgKMPGH (ORCPT ); Fri, 13 Nov 2020 10:06:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgKMPGG (ORCPT ); Fri, 13 Nov 2020 10:06:06 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A92CAC0613D1 for ; Fri, 13 Nov 2020 07:06:06 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id j31so6829940qtb.8 for ; Fri, 13 Nov 2020 07:06:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=1fHRW/UEEiR6jvLD5WddzqDt9MFE3LP4Xz6L/Jag234=; b=emyvwGAb6FjPo+J7jzYlkAVcnNhtwn4duuFC70YqR7quOkg/2QfzClUkkUaQ1s//0S B0XlKaPjBy1x0W288SBUYnhhT+XkQzBTFMMJWStp0kCSmHWyX1Q9EmuzdaJ0M++I5J4Y w1XUIg7g5sKS638EOIgho70QjSDupXySRkqh9CdOU6LsQ3QIdfs8YZm+7wIgx/0A/uCn dV9svzoo44gw71ly1w6R/S/BQvIWogtxvb8KuRF9mYmq9AoOq8MFqnnosJWLgrrNfaWs /fZcC+d9qc2GF8INwpwZ2TvYsbjin3SsauM6AIqHJVgUwd2cR/hOwGqllI/lAiVrTqGF tOSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=1fHRW/UEEiR6jvLD5WddzqDt9MFE3LP4Xz6L/Jag234=; b=Dewqao93iVDitqqnbGr4M8aksRQHXHJqGEaowlAJP2hQvJTIw4Ux5uk6HQALzxk8/D FKMfOjse6ufVXfbl4MHbKVFXb8QI5KVqzlR3DoGC+sId25RHRlsl1eb52df0NqdHzAbr RtF13EKKvJ8jd/DDDfapteJY55ltsKmDZ/dnwv/A+OF4nR5ndw6Kqh+xHf+OATaCLiUi QgrZuIpXS+du0IP083jIE97EpcRSAJBKG3JcY4FgO1CyQE1Ko4wm/HBK3LejxnpE8zoX Tce3R7Szlm8IfovYfuuIAbKRYrW6jed+SSC8kCDX8+OAdwHT4n2QfRjDQ8IEycJqvFhv AtmA== X-Gm-Message-State: AOAM5320OWEb4DSZ7vWpZ+1YJno/9Vvtc0q6UDr5zhQESFhfg2XsAS61 +oOqK+08uXUotgqbKoBSEU/RWoCUKVE= X-Google-Smtp-Source: ABdhPJwsutinTLIhYoDjX25lX6zTLZN5DeyMsaBgx1ngAq5kAt1JOzxVNmnJqFCH3wxpAnPrsUWX/g== X-Received: by 2002:ac8:6f1c:: with SMTP id g28mr2341700qtv.65.1605279965604; Fri, 13 Nov 2020 07:06:05 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id w192sm7013083qka.68.2020.11.13.07.06.04 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:05 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6388032763 for ; Fri, 13 Nov 2020 15:06:03 GMT Subject: [PATCH v1 42/61] NFSD: Replace READ* macros in nfsd4_decode_destroy_session() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:03 -0500 Message-ID: <160527996396.6186.7996684191771574559.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index dfd2008db299..a6b7533947dc 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1682,11 +1682,7 @@ static __be32 nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_session *destroy_session) { - DECODE_HEAD; - READ_BUF(NFS4_MAX_SESSIONID_LEN); - COPYMEM(destroy_session->sessionid.data, NFS4_MAX_SESSIONID_LEN); - - DECODE_TAIL; + return nfsd4_decode_sessionid(argp, &destroy_session->sessionid); } static __be32 From patchwork Fri Nov 13 15:06:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903837 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 49DC7139F for ; Fri, 13 Nov 2020 15:06:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2D0192222F for ; Fri, 13 Nov 2020 15:06:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="krxpWg4Q" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726507AbgKMPGO (ORCPT ); Fri, 13 Nov 2020 10:06:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgKMPGO (ORCPT ); Fri, 13 Nov 2020 10:06:14 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E87AC0613D1 for ; Fri, 13 Nov 2020 07:06:14 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id j31so6830248qtb.8 for ; Fri, 13 Nov 2020 07:06:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=DrEfwe10/FqTv98FnWzExppu2Y9ZUK9TWxyRDDbGDz0=; b=krxpWg4QmdhOBiZCRgp3vkK7kyEh4Z6TiokKAO/RMgIXsMlBpOsw2OX5yJjWVObKQY kbHkuWQ92OzOpkrq+5YkIlwjKn9hwms7wXxVgmaczz1SYHX/OJmNPiGqLmY9BsM5n6K0 9Y6O5a4kcEW+MBROk5rmyZget6rtxUUCQNPvNtMptZ9qmbwPGqmw7WOL2pQ7TIA+XaYn x5kU/q26YWmEm1epXrSZfGtI6H+JhwJy3Agm5w6qcAakBMb73qUl6TiH9/STu0p9K90A NXmRgZxWgLS9Tb4UK/8lIzX8tx6ALk6PF0T1aic7p+ZnnKx0L+w1QZjlXKgP42Ey8CWs 2tDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=DrEfwe10/FqTv98FnWzExppu2Y9ZUK9TWxyRDDbGDz0=; b=p2UPSW6BIOf1KRb6A5kVoJvUadUaUwOUjk0a21V9kMU4Mwc04eswUGmyGnl8cwT3D3 MPzmkbaiVLHuePDTGuNO8SbbLwV3UGVo5G+YgPUtcWgIUkFThMzwV70cXA/z6dhM5IWw wFwRduL2hjtVU3RJK+f68tYX1d2mbfITvd0RfrpGcg0yHvQx24+gZadHfzd3oGi+b+cS WBIODNT6smoe/JYgstrPl3DqDwrZ0T9lKMOPbCYhmu10cSKLe9I3wOFOTweCsvQBv1B7 58cb9zs7EQXLrkLeoiNoKObVTXGnjtOWYtjpW9C9u+9eO6AAV1DIqg3juiGZFaGZLm7y Pqrg== X-Gm-Message-State: AOAM530THzSxxWGl99nsgDVXpx33rpf+R92EgeFCNmKB96RDnZE7rkit 5pw1XBToat/YNqxHfla3Pf4vIgR1d9c= X-Google-Smtp-Source: ABdhPJwkWuOot43XRen7Cuj8gOrv2z4aqgB8lsa+N/G8PbN7zE2NRJMgaYRbRDF2NVgazjXOGQNwnA== X-Received: by 2002:ac8:4685:: with SMTP id g5mr2382970qto.173.1605279971133; Fri, 13 Nov 2020 07:06:11 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id u12sm2457362qka.21.2020.11.13.07.06.10 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:10 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF69Mc032766 for ; Fri, 13 Nov 2020 15:06:09 GMT Subject: [PATCH v1 43/61] NFSD: Replace READ* macros in nfsd4_decode_free_stateid() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:09 -0500 Message-ID: <160527996924.6186.3615250265473544578.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index a6b7533947dc..c752924e2cdf 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1689,13 +1689,7 @@ static __be32 nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_free_stateid *free_stateid) { - DECODE_HEAD; - - READ_BUF(sizeof(stateid_t)); - free_stateid->fr_stateid.si_generation = be32_to_cpup(p++); - COPYMEM(&free_stateid->fr_stateid.si_opaque, sizeof(stateid_opaque_t)); - - DECODE_TAIL; + return nfsd4_decode_stateid4(argp, &free_stateid->fr_stateid); } static __be32 From patchwork Fri Nov 13 15:06:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903839 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CAA7C139F for ; Fri, 13 Nov 2020 15:06:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ADBF42222F for ; Fri, 13 Nov 2020 15:06:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cbKMPcwt" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726633AbgKMPGV (ORCPT ); Fri, 13 Nov 2020 10:06:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgKMPGU (ORCPT ); Fri, 13 Nov 2020 10:06:20 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53D8EC0617A6 for ; Fri, 13 Nov 2020 07:06:19 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id d28so8997139qka.11 for ; Fri, 13 Nov 2020 07:06:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=d9Ct7s9MV0J75HNDOU83LHMye3sc0YuxBImDqDiLbho=; b=cbKMPcwtFmaTS6okTIQTartUrgmA/cRz+SFcuR8nMygNxqlhpzNW7SqbUt3sefqORZ L/akRv4ibb3O+cAW1JtdiHx1hnMYRoSJ0AhME/eFpEI23uDMOWmaGftJmxy+AD16PBWE UiOXl2HuGhWH/CICvmZZO4FcnandCa5LL2NvkOj24hNq24HH2M6VailvfYcoV7AqT7vS waBT8mqUVp36dOy/5F6VwPeSNxbf934j4ATx2EHr9DZC0AJmtP/XagHgGlRnIuIU+KDh tJJIIg6CL9aUv/tzelVRVh0AdQ7/cINbGgHXPFigOpb5V9+khipyNHoCJ5zLYHU5+SzK SABg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=d9Ct7s9MV0J75HNDOU83LHMye3sc0YuxBImDqDiLbho=; b=Z1W0juCZe5LhH/o5Hn3oLojtUPcUudhiSIQ4R5yZFLuJfzNvnqYCf+85XCCUnd5AP6 xPjyQPK4rRrouzatgqW1n8FhN6FB1IUvROrQv5l778IrrvYt+A4kt69MBVwiIZEC7Eti Zq3D2L5mM20MNud0KVdnTn0wqRTyDWEKFKu9y85qIl0XaOiZmbUhijd9sjPHtSekXwtZ dxid3EV+NDEod6VM2iY56ipkjugkIEOg789r3cansdH46RPQ3wIYORVd3GPbjRfE8uoJ rZQCGYohKiJ0uu21GL/ILpKXvyDk1v6ilmrn0KiXrDskNue/W4V12XNEj/QdLwuQNszv 412A== X-Gm-Message-State: AOAM531rdRxshbabAyYLE7/7C2sSw0WbBKNTMNRemx83hv9LrOjXkfKr FltKCk6Ge1tsF+exosMefw1le//nDO8= X-Google-Smtp-Source: ABdhPJw90OntBbuHzTUvB9C+Xh8gRS5Ou/5RWYFEggROLGuwHkLUQrbFbM1LVeFLiSE04tLdiqJLJQ== X-Received: by 2002:a37:de02:: with SMTP id h2mr2114870qkj.99.1605279976139; Fri, 13 Nov 2020 07:06:16 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id b197sm6544161qkg.65.2020.11.13.07.06.15 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:15 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6EdZ000301 for ; Fri, 13 Nov 2020 15:06:14 GMT Subject: [PATCH v1 44/61] NFSD: Replace READ* macros in nfsd4_decode_getdeviceinfo() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:14 -0500 Message-ID: <160527997453.6186.18349513612608306144.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 56 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c752924e2cdf..44ffcaac3c8e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -570,6 +570,23 @@ nfsd4_decode_stateid4(struct nfsd4_compoundargs *argp, stateid_t *sid) return nfserr_bad_xdr; } +#ifdef CONFIG_NFSD_PNFS +static __be32 +nfsd4_decode_deviceid4(struct nfsd4_compoundargs *argp, + struct nfsd4_deviceid *devid) +{ + __be32 *p; + + p = xdr_inline_decode(argp->xdr, NFS4_DEVICEID4_SIZE); + if (!p) + goto xdr_error; + memcpy(devid, p, sizeof(*devid)); + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +} +#endif /* CONFIG_NFSD_PNFS */ + static __be32 nfsd4_decode_sessionid(struct nfsd4_compoundargs *argp, struct nfs4_sessionid *sessionid) { @@ -1769,27 +1786,24 @@ static __be32 nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp, struct nfsd4_getdeviceinfo *gdev) { - DECODE_HEAD; - u32 num, i; - - READ_BUF(sizeof(struct nfsd4_deviceid) + 3 * 4); - COPYMEM(&gdev->gd_devid, sizeof(struct nfsd4_deviceid)); - gdev->gd_layout_type = be32_to_cpup(p++); - gdev->gd_maxcount = be32_to_cpup(p++); - num = be32_to_cpup(p++); - if (num) { - if (num > 1000) - goto xdr_error; - READ_BUF(4 * num); - gdev->gd_notify_types = be32_to_cpup(p++); - for (i = 1; i < num; i++) { - if (be32_to_cpup(p++)) { - status = nfserr_inval; - goto out; - } - } - } - DECODE_TAIL; + __be32 status; + + status = nfsd4_decode_deviceid4(argp, &gdev->gd_devid); + if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &gdev->gd_layout_type) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &gdev->gd_maxcount) < 0) + goto xdr_error; + status = nfsd4_decode_bitmap4(argp, &gdev->gd_notify_types, 1); + if (status) + goto out; + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:06:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903841 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4083E138B for ; Fri, 13 Nov 2020 15:06:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 25C9622201 for ; Fri, 13 Nov 2020 15:06:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EUOBnw+U" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726732AbgKMPGY (ORCPT ); Fri, 13 Nov 2020 10:06:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgKMPGX (ORCPT ); Fri, 13 Nov 2020 10:06:23 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06F94C0617A6 for ; Fri, 13 Nov 2020 07:06:23 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id q22so9029109qkq.6 for ; Fri, 13 Nov 2020 07:06:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=JzEkf301vBxksCdSOI+3LD73ofrahQzDQV1IM/I4/b0=; b=EUOBnw+UUqxjLEug7rk4q1dT7TCbGIeZz7wtR0/HgOkXPrWLw8bfatV88A0JxQe9JY 7TeRgAjAOsvse3JIxPTrdHqdM24JP0+tLwPKBbsITfNO68QjVdULCO3/kHncn90DtAsm SfHc37rQLEff/HKkKzCcKhGH8emH83Zlr3h8fgyKR+onyPCDPbkqQs+G38jMV5bGkyxY VEJBRLGShnCc5D3zh5FpPJI0YfzP71tM1tA6Krh+6oPh5o3kQec/l13VcoS3VEve8USX xpnAHt7jj2CQ3Ttg6GCCPNioL3QwbzK4ObEwttAMlu4iDpU2rkCoEe17TVnTuoU5sOCD MTEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=JzEkf301vBxksCdSOI+3LD73ofrahQzDQV1IM/I4/b0=; b=ID4WGzYsX/jHNhE2FB0Dyhg9Cpqf2LtKMgsZvBYUxsbOhZUkVOG+iKffTk/+bo1dzG xbqkoFtxaZgavP8LRhEP3TCjao/RlDcKfmadHnCTOX6/oftdVn/LLcOU4SBK2lbaomnt WEv9cI+PJNNTxutvvE11hATRXqT2eBIei0VjMcrbeR9mAob28MCn1BKqGn0PA7DDj4ww A8uUHpMAZrVdhycO7G9VFANrgaCT5c4LeipnqbsQB3UPyREsMwrAGunuKSAmVI7FHGZT NzvqXO9X+Wcjo0lIEwfSdalVW6DHs+v7NPyD5tXf7DxfCrH286T8hW2Q2H3sutDcoZvI HAAQ== X-Gm-Message-State: AOAM530Hsh7MbyzUmHRYKUjygV6oCElYSyTO1QkPj52fFSSHsqfYybpV U5gnNrV/LyhHGKr/uvT47IENLy1ZIrs= X-Google-Smtp-Source: ABdhPJwTmRlOm8iLGTeSaBZzePgTjwQ6m3ij7oclk6t8SaL3sUa8ktYczdbpiiiqMfzIkucSQu/jzw== X-Received: by 2002:a05:620a:95d:: with SMTP id w29mr2236337qkw.76.1605279981420; Fri, 13 Nov 2020 07:06:21 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id q3sm6869661qkf.24.2020.11.13.07.06.20 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:20 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6JmY000304 for ; Fri, 13 Nov 2020 15:06:19 GMT Subject: [PATCH v1 45/61] NFSD: Replace READ* macros in nfsd4_decode_layoutcommit() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:19 -0500 Message-ID: <160527997981.6186.2244400303133940403.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 99 +++++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 44ffcaac3c8e..7ef6baf9c3b7 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1806,6 +1806,57 @@ nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp, return nfserr_bad_xdr; } +static __be32 +nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp, + struct nfsd4_layoutcommit *lcp) +{ + __be32 *p, status; + + if (xdr_stream_decode_u64(argp->xdr, &lcp->lc_seg.offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lcp->lc_seg.length) < 0) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, sizeof(__be32)); + if (!p) + goto xdr_error; + lcp->lc_reclaim = (*p == xdr_zero) ? 0 : 1; + status = nfsd4_decode_stateid4(argp, &lcp->lc_sid); + if (status) + goto out; + if (xdr_stream_decode_u32(argp->xdr, &lcp->lc_newoffset) < 0) + goto xdr_error; + if (lcp->lc_newoffset) { + if (xdr_stream_decode_u64(argp->xdr, &lcp->lc_last_wr) < 0) + goto xdr_error; + } else + lcp->lc_last_wr = 0; + p = xdr_inline_decode(argp->xdr, sizeof(__be32)); + if (!p) + goto xdr_error; + if (xdr_item_is_present(p)) { + status = nfsd4_decode_nfstime4(argp, &lcp->lc_mtime); + if (status) + goto out; + } else { + lcp->lc_mtime.tv_nsec = UTIME_NOW; + } + if (xdr_stream_decode_u32(argp->xdr, &lcp->lc_layout_type) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &lcp->lc_up_len) < 0) + goto xdr_error; + if (lcp->lc_up_len > 0) { + lcp->lc_up_layout = xdr_inline_decode(argp->xdr, lcp->lc_up_len); + if (!lcp->lc_up_layout) + goto xdr_error; + } + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, struct nfsd4_layoutget *lgp) @@ -1830,54 +1881,6 @@ nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, DECODE_TAIL; } -static __be32 -nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp, - struct nfsd4_layoutcommit *lcp) -{ - DECODE_HEAD; - u32 timechange; - - READ_BUF(20); - p = xdr_decode_hyper(p, &lcp->lc_seg.offset); - p = xdr_decode_hyper(p, &lcp->lc_seg.length); - lcp->lc_reclaim = be32_to_cpup(p++); - - status = nfsd4_decode_stateid4(argp, &lcp->lc_sid); - if (status) - return status; - - READ_BUF(4); - lcp->lc_newoffset = be32_to_cpup(p++); - if (lcp->lc_newoffset) { - READ_BUF(8); - p = xdr_decode_hyper(p, &lcp->lc_last_wr); - } else - lcp->lc_last_wr = 0; - READ_BUF(4); - timechange = be32_to_cpup(p++); - if (timechange) { - status = nfsd4_decode_nfstime4(argp, &lcp->lc_mtime); - if (status) - return status; - } else { - lcp->lc_mtime.tv_nsec = UTIME_NOW; - } - READ_BUF(8); - lcp->lc_layout_type = be32_to_cpup(p++); - - /* - * Save the layout update in XDR format and let the layout driver deal - * with it later. - */ - lcp->lc_up_len = be32_to_cpup(p++); - if (lcp->lc_up_len > 0) { - READ_BUF(lcp->lc_up_len); - READMEM(lcp->lc_up_layout, lcp->lc_up_len); - } - - DECODE_TAIL; -} - static __be32 nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, struct nfsd4_layoutreturn *lrp) From patchwork Fri Nov 13 15:06:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903843 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 825E3138B for ; Fri, 13 Nov 2020 15:06:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 65A4A2222F for ; Fri, 13 Nov 2020 15:06:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fCv+8u99" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726621AbgKMPGc (ORCPT ); Fri, 13 Nov 2020 10:06:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgKMPGc (ORCPT ); Fri, 13 Nov 2020 10:06:32 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01F0DC0617A6 for ; Fri, 13 Nov 2020 07:06:28 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id e5so4712489qvs.1 for ; Fri, 13 Nov 2020 07:06:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Kxxhvv7LNn8h6yHJQcGLez7tMmRC+uCc/jjD4ahgeUg=; b=fCv+8u99EHVw4Z7XZ35hXz40IwWxQEm3IUW69gW8+4mKc37llsIk3ghCCKR7+yMij6 M4dqsAIsJOARRcC60/W+pmfn1XQh9nRlXz8H/x0Lu+dMt5DKHAuYxhB4oQ7Ne7rKuEXd bAeh6/HEscIIxUxFvuNAIhHaaGAxMYGpHdgRr5/cmiphKOIrIL/Fr4Ox7ehxv3OyE9It e6lffuXgqFAXKD7JE0QicchtRqC6VujQTPvcf2a1lEfhxhMyZ523QrB7/9FPBuyjOf/L GtBms/QL31TYCZlQv2IzX4zfHubdiZkRYg/I+XpL/gVOwrvXP7PQ2wvsBlR/exjiIQnl qiyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=Kxxhvv7LNn8h6yHJQcGLez7tMmRC+uCc/jjD4ahgeUg=; b=tjryLLhr5sI8fjiim8KT7qpbAw7DHtw0uDrmbUWDO6oF8Am7gPF0Cr5kkwOvaMiaPj Gs4PJEHfdrWX/pFBzK0R2M6xRPSOl84NG8wuIBjflrQby3ibynT6uWKEvV67f/yRTl+2 BU/EiMOB0NNP3+ICEGYJBgVRAZS0aD1/PMv4Z0lO9nMsQphKJr1m3dMHmQIpRqKh/dt1 ramwIR46KcxG9j0sDr2HINe45GBBdrbWA0M2xKofP2cHjAm1qFCPd4UuO9bcLlvLSkmW mJ8+XfwEZWMJxomqfLwCXPHDgznJlJkd+/1ONvHI+5Xxq+jQ2fqL80/qQ5pYXUe/bn/Q Acww== X-Gm-Message-State: AOAM533QhGWh30svvUZr3ErsYKRgykni1uy+rfr0++/tn45b1XsjBfF6 UdOsbjvFGAiLUffOI4lC6ldxPwzU3IE= X-Google-Smtp-Source: ABdhPJw7xejWG1xbV/gObV7dwCb6jD+XjVnuzcMc10tdz9SPj3OsueXo2fpkSyw3Jr49cmbf3pW8Mw== X-Received: by 2002:a0c:c583:: with SMTP id a3mr2634009qvj.2.1605279986912; Fri, 13 Nov 2020 07:06:26 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id k17sm6917228qkj.51.2020.11.13.07.06.25 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:26 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6PCS000307 for ; Fri, 13 Nov 2020 15:06:25 GMT Subject: [PATCH v1 46/61] NFSD: Replace READ* macros in nfsd4_decode_layoutget() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:25 -0500 Message-ID: <160527998510.6186.3544084346307927373.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 7ef6baf9c3b7..c48fa1427421 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1861,24 +1861,31 @@ static __be32 nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, struct nfsd4_layoutget *lgp) { - DECODE_HEAD; - - READ_BUF(36); - lgp->lg_signal = be32_to_cpup(p++); - lgp->lg_layout_type = be32_to_cpup(p++); - lgp->lg_seg.iomode = be32_to_cpup(p++); - p = xdr_decode_hyper(p, &lgp->lg_seg.offset); - p = xdr_decode_hyper(p, &lgp->lg_seg.length); - p = xdr_decode_hyper(p, &lgp->lg_minlength); + __be32 status; + if (xdr_stream_decode_u32(argp->xdr, &lgp->lg_signal) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &lgp->lg_layout_type) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &lgp->lg_seg.iomode) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lgp->lg_seg.offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lgp->lg_seg.length) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lgp->lg_minlength) < 0) + goto xdr_error; status = nfsd4_decode_stateid4(argp, &lgp->lg_sid); if (status) - return status; - - READ_BUF(4); - lgp->lg_maxcount = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u32(argp->xdr, &lgp->lg_maxcount) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:06:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903845 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DA9FF138B for ; Fri, 13 Nov 2020 15:06:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BDB8A2222F for ; Fri, 13 Nov 2020 15:06:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mxHI4AkT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726769AbgKMPGe (ORCPT ); Fri, 13 Nov 2020 10:06:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36524 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726748AbgKMPGd (ORCPT ); Fri, 13 Nov 2020 10:06:33 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3924C0617A6 for ; Fri, 13 Nov 2020 07:06:33 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id f93so6817782qtb.10 for ; Fri, 13 Nov 2020 07:06:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=vU71J1LaDg9CBzAq7tC3UaWK29Ekeq671auKyYB0610=; b=mxHI4AkTcT9JA7xAtatD2kfeMjqtA2b7jFsMZSePZFvhxu7Kw4tPAnmAy0+dtQXyxE MTd27MgI/4Wjq0SlYc3O9zfLaSCa12BEnEv/ovoUFsgP/ySNQS4yae2SUzsDAv41w+jF v+mvTbQZCeT8XLlOVounBQGfkBoMUFeT83UWH62kOHn3b0y2KIvZCS3EWEwFcNoyrL6E hfB2MvuQEp3itcm8xrXCfbPdBj4EW5qhKxShqotOmmwdFuTnKFldKWmQia+dMtbw4Gnw lgYkKHgsQsBDCngIUVkHF/WC1AC0iea0cVQXt8bnKnFrAXe8F6BOAisoDX/2NkG74Et0 s0JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=vU71J1LaDg9CBzAq7tC3UaWK29Ekeq671auKyYB0610=; b=Vr/o5g4/YaviPpWrOiqIBJgGt5vovYb7rTXFez0LXfsddDjw5ML02NSGzQV1O2MqdH X13GieNUKQWCw8lSlaKlwWHibmDiYJPsmabv+zQsuxxrLT4I/K2kM0NGJRbmnvkgNCqs lFA00rQCYOJ1YhwM+F1W6heGsuVHuvlBcj6VvG69OTV4MFesjspSK+lyqVxCCpW1dW6B wVbgXvzITFakEgiuGe1TspvDu8yDeXwK25j0NskG4Sxm6AUEWhxinROgB0vXZfxpBgYN V27PdEiqaSJ1c45SSqyFAKBLE34RaHjzFDFVvAPqggoO9mjaSi4VTwm3RRP/gB1TsM6D POww== X-Gm-Message-State: AOAM530DYycSt3uK6cUXrXM9XFm038kRmL9Q7Sub9ZzM1T7UYNWnBtxf NoO3bzpXP5mRiqnnd/xbgFHMOhuHRvM= X-Google-Smtp-Source: ABdhPJz53QkwNlfvGFBJrKXml+hXAOweOSrYi9CbQoczdzs7ZEIEcbUcQ6XpthFExEWE7WjJEIZWIQ== X-Received: by 2002:aed:3383:: with SMTP id v3mr2343685qtd.353.1605279991972; Fri, 13 Nov 2020 07:06:31 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id j124sm6944211qkf.113.2020.11.13.07.06.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:31 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6UxH000310 for ; Fri, 13 Nov 2020 15:06:30 GMT Subject: [PATCH v1 47/61] NFSD: Replace READ* macros in nfsd4_decode_layoutreturn() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:30 -0500 Message-ID: <160527999039.6186.8941072746737164622.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 68 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c48fa1427421..91f2612b3d2c 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1889,37 +1889,63 @@ nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, } static __be32 -nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, - struct nfsd4_layoutreturn *lrp) +nfsd4_decode_layoutreturn4(struct nfsd4_compoundargs *argp, + struct nfsd4_layoutreturn *lrp) { - DECODE_HEAD; - - READ_BUF(16); - lrp->lr_reclaim = be32_to_cpup(p++); - lrp->lr_layout_type = be32_to_cpup(p++); - lrp->lr_seg.iomode = be32_to_cpup(p++); - lrp->lr_return_type = be32_to_cpup(p++); - if (lrp->lr_return_type == RETURN_FILE) { - READ_BUF(16); - p = xdr_decode_hyper(p, &lrp->lr_seg.offset); - p = xdr_decode_hyper(p, &lrp->lr_seg.length); + __be32 status; + if (xdr_stream_decode_u32(argp->xdr, &lrp->lr_return_type) < 0) + goto xdr_error; + switch (lrp->lr_return_type) { + case RETURN_FILE: + if (xdr_stream_decode_u64(argp->xdr, &lrp->lr_seg.offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &lrp->lr_seg.length) < 0) + goto xdr_error; status = nfsd4_decode_stateid4(argp, &lrp->lr_sid); if (status) - return status; - - READ_BUF(4); - lrp->lrf_body_len = be32_to_cpup(p++); + goto out; + if (xdr_stream_decode_u32(argp->xdr, &lrp->lrf_body_len) < 0) + goto xdr_error; if (lrp->lrf_body_len > 0) { - READ_BUF(lrp->lrf_body_len); - READMEM(lrp->lrf_body, lrp->lrf_body_len); + lrp->lrf_body = xdr_inline_decode(argp->xdr, lrp->lrf_body_len); + if (!lrp->lrf_body) + goto xdr_error; } - } else { + break; + case RETURN_FSID: + case RETURN_ALL: lrp->lr_seg.offset = 0; lrp->lr_seg.length = NFS4_MAX_UINT64; + break; + default: + goto xdr_error; } - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +} + +static __be32 +nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, + struct nfsd4_layoutreturn *lrp) +{ + __be32 *p; + + p = xdr_inline_decode(argp->xdr, sizeof(__be32)); + if (!p) + goto xdr_error; + lrp->lr_reclaim = (*p == xdr_zero) ? 0 : 1; + if (xdr_stream_decode_u32(argp->xdr, &lrp->lr_layout_type) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &lrp->lr_seg.iomode) < 0) + goto xdr_error; + return nfsd4_decode_layoutreturn4(argp, lrp); +xdr_error: + return nfserr_bad_xdr; } #endif /* CONFIG_NFSD_PNFS */ From patchwork Fri Nov 13 15:06:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903847 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A65F9139F for ; Fri, 13 Nov 2020 15:06:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8A01622201 for ; Fri, 13 Nov 2020 15:06:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UDN8AZo7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726606AbgKMPGj (ORCPT ); Fri, 13 Nov 2020 10:06:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgKMPGj (ORCPT ); Fri, 13 Nov 2020 10:06:39 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54941C0613D1 for ; Fri, 13 Nov 2020 07:06:39 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id r7so9049325qkf.3 for ; Fri, 13 Nov 2020 07:06:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=gGKoK09l6/8ejiVSZ0VIz4sgB8+SfdaVecieNaYkxlg=; b=UDN8AZo7diVmzJgK9jSaYCSv1mKs4M4eRcnDGgsXKXVfAEk7onIRDz7ZK9ti8qDBlc iwnKYYXuEgVBt1M5WwetUO5WF4Jt6Arzi3zbT6zbXqxRFVr/DPre6B/HhYgte2G+Fjwf oWH9COka1MRmMKfNoZ57glPCqNPpk3AEzSHo6NbyC0ZdXlXJnD9gjiuGuyLeBYWfZv9n hXr9S0xpHCUju9Ozb2Dyl10X0cfngPF/yjxjhKuUOMxmg3DJFDyV9kSVLtff7fOnditu bPbdfQLRAXcwktPohll1bQXZXif2CG1cFt8M6ho0b5lXfio3D/j2naHYDPChR+tAOUJo aVGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=gGKoK09l6/8ejiVSZ0VIz4sgB8+SfdaVecieNaYkxlg=; b=Br2x1qmoTQk1/sOYWetKP7PZTON7T6pateLnRGPcKaaNaITAvxjubkKOsEkIFIA4e6 BFMKr4YG+9WERW+NowdTnF80QE/NVyz99LMAYhml3pj4Ar4SrF06iIWiZvHjOOHUFpNm XeWSqiL8Rje99Am8HJEvJa8vGtl3PqK5+AIuJG57epQt/uVmhssH5sRyvlOF3dj9xViL LkKPAFp0pcgvOH/i89oiHucm0xbNneRmqkhYxyVfxcWkX6SgWiR6Nxu0cru/U3NXfeiP uXlYgOjWA+IWz28UHgPJ8V0I5PK5LfFF6rUqj8AWZGLBU3wPNO0Tdijdw3UkqrKi3Pbb C6TQ== X-Gm-Message-State: AOAM531GpvaZvA8fVghZQ8avhLJJt/fRlMRNx82pfhUFeiOKFM7B+fka 6dWOZPe4QDTnKS3fqbrg8tOVxGmQru8= X-Google-Smtp-Source: ABdhPJy6DL8nV31m7mJ6CeAcyaH3Fs2QAi6LDKvm+tQ/sZr0HQOvc2PGJbon+HzaN3p6bPnp7FiAeQ== X-Received: by 2002:a05:620a:41c:: with SMTP id 28mr2434471qkp.270.1605279997308; Fri, 13 Nov 2020 07:06:37 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id v14sm7013836qkb.15.2020.11.13.07.06.36 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:36 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6Zdp000313 for ; Fri, 13 Nov 2020 15:06:35 GMT Subject: [PATCH v1 48/61] NFSD: Replace READ* macros in nfsd4_decode_secinfo_no_name() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:35 -0500 Message-ID: <160527999567.6186.14516198696933872603.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 91f2612b3d2c..9585cb9febbc 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1283,17 +1283,6 @@ nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp, return nfsd4_decode_component4(argp, &secinfo->si_name, &secinfo->si_namelen); } -static __be32 -nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp, - struct nfsd4_secinfo_no_name *sin) -{ - DECODE_HEAD; - - READ_BUF(4); - sin->sin_style = be32_to_cpup(p++); - DECODE_TAIL; -} - static __be32 nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *setattr) { @@ -1949,6 +1938,17 @@ nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, } #endif /* CONFIG_NFSD_PNFS */ +static __be32 +nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp, + struct nfsd4_secinfo_no_name *sin) +{ + if (xdr_stream_decode_u32(argp->xdr, &sin->sin_style) < 0) + goto xdr_error; + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, struct nfsd4_fallocate *fallocate) From patchwork Fri Nov 13 15:06:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903851 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3F0F138B for ; Fri, 13 Nov 2020 15:06:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D751822201 for ; Fri, 13 Nov 2020 15:06:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="J80gk3Lj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726863AbgKMPGo (ORCPT ); Fri, 13 Nov 2020 10:06:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36552 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbgKMPGn (ORCPT ); Fri, 13 Nov 2020 10:06:43 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A1838C0613D1 for ; Fri, 13 Nov 2020 07:06:43 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id z3so3254317qtw.9 for ; Fri, 13 Nov 2020 07:06:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=dI9sjCAsPMN8X6MICf+BD61shIb6T5TTy7buwadvfg4=; b=J80gk3LjpBMHMKxomGFhEMQJWR4QBQO+uVQgynizqSr2lghn68XaJZhK1SQKh5gmYv 7w5Ett2Sc1+sIEK3d7S6vxy10Wivso/ejvbha4tqXq+2oCCHBZkwwyQ3dK9Vra3BE/DM FXKqnHaVtYg7znbSI5sBrJUm3jq26WzzgrPfB4bCeQOp7LRe8z6bz21RI/vihP1EsYaj RaF9GKizb+48AHvinp++Yqf3Ei51ikAPz7U4S6mvibS1E54ZfBNFn5VVeRSOICQRTyuG XWb5zshvZq/N4VpSRiTSHSYQEAJB6zCGFGj/TVPz/UtSVqX7AZ5ce8RfwErTT1zwZY3X AGmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=dI9sjCAsPMN8X6MICf+BD61shIb6T5TTy7buwadvfg4=; b=bLU4Nbcn8pyPNRMgY1sWcB9910J7wu+zgA8HMc3zuWJSLTPinu2KFdMvVDzlzphEUQ uYglrvVoQjoVhwycVRyLfS5tvZj/Rvl+2032srCMGMPqyvxTJpluVWiMEorO7OF00lML Srk4ulAF4R45MZ2L8Uwv4CIrYT0cC3vkzpa4mk1Xa3FRblHsOPJBtP0mVo726+wqkB5g u3yQNJ2zHkgiJHi346++A6ew7LKYOFG9/3edU4LFIDmy8CRrOjPZppERvRxeiLx0DIS+ mlES3j0KzvdoUxXkPQmq7BHeyvXTSqAVmSKAF70gRF0EDgrHoCdUQfYOEx7dAhdaNdQN s3YA== X-Gm-Message-State: AOAM532/QvOoKnYZFzZ6akhBypJwBL7ZXH9Xm7zAJqnETZAoddSQLyuo iW2NVWwVYPNevInnRcY+bjMtJTpOVJE= X-Google-Smtp-Source: ABdhPJx5KWnE2K6pdocfWwf5d50Z9Iuh5RmVvHkthoKSh+tqJhrm/FGeDjB2MyYo3LKrKcE86YbaqQ== X-Received: by 2002:ac8:a86:: with SMTP id d6mr2383474qti.22.1605280002610; Fri, 13 Nov 2020 07:06:42 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id r16sm6348986qta.14.2020.11.13.07.06.41 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:42 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6eHp000316 for ; Fri, 13 Nov 2020 15:06:40 GMT Subject: [PATCH v1 49/61] NFSD: Replace READ* macros in nfsd4_decode_sequence() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:40 -0500 Message-ID: <160528000096.6186.9250319500236956010.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 9585cb9febbc..7b4f7f8c44da 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1698,22 +1698,6 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, return nfsd4_decode_stateid4(argp, &free_stateid->fr_stateid); } -static __be32 -nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, - struct nfsd4_sequence *seq) -{ - DECODE_HEAD; - - READ_BUF(NFS4_MAX_SESSIONID_LEN + 16); - COPYMEM(seq->sessionid.data, NFS4_MAX_SESSIONID_LEN); - seq->seqid = be32_to_cpup(p++); - seq->slotid = be32_to_cpup(p++); - seq->maxslots = be32_to_cpup(p++); - seq->cachethis = be32_to_cpup(p++); - - DECODE_TAIL; -} - static __be32 nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid) { @@ -1949,6 +1933,30 @@ nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp, return nfserr_bad_xdr; } +static __be32 +nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, + struct nfsd4_sequence *seq) +{ + __be32 *p, status; + + status = nfsd4_decode_sessionid(argp, &seq->sessionid); + if (status) + goto out; + p = xdr_inline_decode(argp->xdr, sizeof(__be32) * 4); + if (!p) + goto xdr_error; + seq->seqid = be32_to_cpup(p++); + seq->slotid = be32_to_cpup(p++); + seq->maxslots = be32_to_cpup(p++); + seq->cachethis = be32_to_cpup(p++); + + status = nfs_ok; +out: + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +} + static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, struct nfsd4_fallocate *fallocate) From patchwork Fri Nov 13 15:06:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903853 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CB866139F for ; Fri, 13 Nov 2020 15:06:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B00FA2222F for ; Fri, 13 Nov 2020 15:06:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="T3MckAw+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726864AbgKMPGu (ORCPT ); Fri, 13 Nov 2020 10:06:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbgKMPGt (ORCPT ); Fri, 13 Nov 2020 10:06:49 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 98668C0613D1 for ; Fri, 13 Nov 2020 07:06:49 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id n63so6845515qte.4 for ; Fri, 13 Nov 2020 07:06:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=hfj040fWupN2i7Qivvf5j0G5fwFfGL93AFleM83oz08=; b=T3MckAw+V5MXUL/09cnvfvH9uPj9R6kn8LfcGYIg2ygEoWD9hrDDjJKWklJfPWm4iN JcS+jkZCSKY1Bd9ceYku1CRJR82pXUZAmVS19hqP46PtcbAMDgB0sjUaCcvakMiPZYGi jBJgYVh4YsYNmi836UAR9ZKX6iByYgaEoCd2yEa0/qVRtp0A25Jd3VpdsWtNUBlz1Sqw dRBoDby9MO4Z0fSnXqh+ZiPOtcBIE4G9JbBHT9Xp4AaA9V9qGSjBmPTA32hvDFEO6PKZ pdDKiCpA4ZWblQWZBlkTKZyihKGP8Pa/9qm21ztHTFrmctVStlMW1kiXRKANMjIGyxm1 kMLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=hfj040fWupN2i7Qivvf5j0G5fwFfGL93AFleM83oz08=; b=IjnFa6nbSL9B3ePj1tJ+HOM8dSx0pZbN0QMXdpiqGmT+DrKM7ur64fmmGFPggKgL2q Fu9xC+Cvpzy06q/vQnsOOlfU2NsUkNW4txQhKoyDIe3CmIVK+kVy4NEYcMojlc882gta QKh6Xb+Xn5rMwRUKqm4wT/F3l7IYO7HnI9ihH3elf+ciVOLJJgYt8M3Vdxsi/Vi8fw81 dyHR+GzPrLWAUbEwDA1QgeCS+mWqPNedJGkBzRWbmGOwlwAJIS6+GgWpj6ofWGnntIZf xxEOtgLtQfq+IZ3FiBkowxSZ2x/EvQNdwUC6PQv7FM8xTaliLILFrnujN6vviNJl4Lk+ GqpQ== X-Gm-Message-State: AOAM5329Xk9QtQ986NYWTPxnYv+nkT4S6LvKuAJ+mxp9qQCbyLncA93l OTskLNjEILNbO1ziErQ/35sNW9TFmpQ= X-Google-Smtp-Source: ABdhPJy1DaAP6ZUmNvxZpW5A7lAmJWCTSDbxAB/Lr7h5FemFOkJTsw+cZxU5dJt7hGMD8IRTSDc04Q== X-Received: by 2002:aed:3943:: with SMTP id l61mr2356609qte.195.1605280008460; Fri, 13 Nov 2020 07:06:48 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id l3sm7323350qkj.114.2020.11.13.07.06.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:47 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6kJ8000319 for ; Fri, 13 Nov 2020 15:06:46 GMT Subject: [PATCH v1 50/61] NFSD: Replace READ* macros in nfsd4_decode_test_stateid() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:46 -0500 Message-ID: <160528000624.6186.10743817554360851924.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 67 +++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 7b4f7f8c44da..4e9f911366ef 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1698,42 +1698,6 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, return nfsd4_decode_stateid4(argp, &free_stateid->fr_stateid); } -static __be32 -nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid) -{ - int i; - __be32 *p, status; - struct nfsd4_test_stateid_id *stateid; - - READ_BUF(4); - test_stateid->ts_num_ids = ntohl(*p++); - - INIT_LIST_HEAD(&test_stateid->ts_stateid_list); - - for (i = 0; i < test_stateid->ts_num_ids; i++) { - stateid = svcxdr_tmpalloc(argp, sizeof(*stateid)); - if (!stateid) { - status = nfserrno(-ENOMEM); - goto out; - } - - INIT_LIST_HEAD(&stateid->ts_id_list); - list_add_tail(&stateid->ts_id_list, &test_stateid->ts_stateid_list); - - status = nfsd4_decode_stateid4(argp, &stateid->ts_id_stateid); - if (status) - goto out; - } - - status = 0; -out: - return status; -xdr_error: - dprintk("NFSD: xdr error (%s:%d)\n", __FILE__, __LINE__); - status = nfserr_bad_xdr; - goto out; -} - static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_clientid *dc) { DECODE_HEAD; @@ -1957,6 +1921,37 @@ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, return nfserr_bad_xdr; } +static __be32 +nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid) +{ + struct nfsd4_test_stateid_id *stateid; + __be32 status; + u32 i; + + if (xdr_stream_decode_u32(argp->xdr, &test_stateid->ts_num_ids) < 0) + goto xdr_error; + + INIT_LIST_HEAD(&test_stateid->ts_stateid_list); + for (i = 0; i < test_stateid->ts_num_ids; i++) { + stateid = svcxdr_tmpalloc(argp, sizeof(*stateid)); + if (!stateid) + goto nomem; + INIT_LIST_HEAD(&stateid->ts_id_list); + list_add_tail(&stateid->ts_id_list, &test_stateid->ts_stateid_list); + status = nfsd4_decode_stateid4(argp, &stateid->ts_id_stateid); + if (status) + goto out; + } + + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserrno(-ENOMEM); +} + static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, struct nfsd4_fallocate *fallocate) From patchwork Fri Nov 13 15:06:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903855 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7DFA3138B for ; Fri, 13 Nov 2020 15:06:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 61BE42222F for ; Fri, 13 Nov 2020 15:06:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Cl+BspW8" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726865AbgKMPGy (ORCPT ); Fri, 13 Nov 2020 10:06:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbgKMPGy (ORCPT ); Fri, 13 Nov 2020 10:06:54 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6130FC0613D1 for ; Fri, 13 Nov 2020 07:06:54 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id d9so9018444qke.8 for ; Fri, 13 Nov 2020 07:06:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=njexyQIniMAi/zh5QdNc8eP0n/Xpio6g+aUYiFGkmlE=; b=Cl+BspW8MGmEEhVDwYMn11BPzUjws7t4NuFf3rUv9MOcx+hDVMQ3Bp/xtf7bSj4utr FMb+JSmwGYapXmOPty8Nr6lcZqYzuMDcWeSCt+oGGHljdjXgJmNdgOlxiJaUf489mXlo UYurwVv365KMeCxpkQUMt/HF5KTRajRWIMeAlZJNuyHW3dgV/Q78P4YmSRz3aZl2L+LJ 0lZARzLtmyrh8oE6JHWQRzFb7009Oh6+Ye5s6ls6PbNG20n2+eHTa8Q7d71PERrJijC3 dqzrjzVaA+PfUKm1gY+lpMPXWxfCwWivgO+dLH4d7xqDS0nOloE682Y5YRiAYEZJXK5r t0Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=njexyQIniMAi/zh5QdNc8eP0n/Xpio6g+aUYiFGkmlE=; b=UIAxnQKV0qI92G5FKlJL2Mb/+UujAjitjuwmmXpHqJOZ4pyuz17iNvuw/6/bgLCI9R Kzb1sv9UI960AWxGl8vZ4G4gibAYH3PCwUCs1Ayug4yZm6D2hEuYmQsp35JdwiBh+PSn jtKvqei3CLqPJdkSrnHjHUhpY9FWXPHVAM5sTaznCXBUBWTL3vr7cU0l3upeCmX+9w5X R0vD7/bToLcqolE7kkYgp6kXOrX9eJ3JLrl7AvPKgoB1kgGhHsAVJdmdZcJqsMzU9jWl 0dnNhZER/JAipty4uX6p6PFPS+6i0BqlP/U3CyaEYrSwoWtXvXriQFFbr9fFI1/fm1Lz zIrQ== X-Gm-Message-State: AOAM533xXYS+noV4lm7oqw1OUCuorQF1CutcRbD79ldGSIi5MAA0RRiP WLzU2kOwmuy2YEmP+86K7c8I7uyC9Ig= X-Google-Smtp-Source: ABdhPJy3FR3ja5tTSkemlNdbsxJIphUv1EnYeWKLVTAyeJ3clnGLmPv7D1CGaE7jml7u/WMCP6rmNQ== X-Received: by 2002:a37:b483:: with SMTP id d125mr2312490qkf.456.1605280013324; Fri, 13 Nov 2020 07:06:53 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id z16sm7353273qka.18.2020.11.13.07.06.52 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:52 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6pJ6000322 for ; Fri, 13 Nov 2020 15:06:51 GMT Subject: [PATCH v1 51/61] NFSD: Replace READ* macros in nfsd4_decode_destroy_clientid() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:51 -0500 Message-ID: <160528001160.6186.16007038815137189510.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 4e9f911366ef..c69dbe8f5ff2 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1698,16 +1698,6 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, return nfsd4_decode_stateid4(argp, &free_stateid->fr_stateid); } -static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_clientid *dc) -{ - DECODE_HEAD; - - READ_BUF(8); - COPYMEM(&dc->clientid, 8); - - DECODE_TAIL; -} - static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, struct nfsd4_reclaim_complete *rc) { DECODE_HEAD; @@ -1952,6 +1942,11 @@ nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_sta return nfserrno(-ENOMEM); } +static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_clientid *dc) +{ + return nfsd4_decode_clientid4(argp, &dc->clientid); +} + static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, struct nfsd4_fallocate *fallocate) From patchwork Fri Nov 13 15:06:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903857 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A8990138B for ; Fri, 13 Nov 2020 15:07:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8ECD32223C for ; Fri, 13 Nov 2020 15:07:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ei/XZI6y" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726861AbgKMPHB (ORCPT ); Fri, 13 Nov 2020 10:07:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36602 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726662AbgKMPHA (ORCPT ); Fri, 13 Nov 2020 10:07:00 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E381DC0613D1 for ; Fri, 13 Nov 2020 07:06:59 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id z3so3254986qtw.9 for ; Fri, 13 Nov 2020 07:06:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=DW/SxJBilg0v4lPpN6/EnkiSPYriPQECQVoS16rFw5A=; b=Ei/XZI6yB8swHtBT8QNtv34yFJElmerOS9/w5fIg5W6HCJTuuII4RfkX1HNlbtcv3+ IGTZFEtJbd6lQRLPiEmaQJDKtOwQ2BPzo3sEM3lgY/uwMerHk/jM/Hz1czeckc2OyDTx vUeDD9mSWiJ3j5Hyd8GlRWgDOjANoWLLftUQRZXW5X+Z9YoPqMdMqT8eeCQsWilcb8wp KMq8lO0fjERDTLbrYwiJm7chsTB23F3Y0LD3a0B4ErOirVf8Y8XJHURz8ZiyldIAK4gd ttgwoanZsAXtx8L4BMXAan8Dhp4E6QMSMq446ifdqNceVOnh7NkNxw07ryKGnFl1RB2l h/cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=DW/SxJBilg0v4lPpN6/EnkiSPYriPQECQVoS16rFw5A=; b=gmTdJ51HNAekx/eScAmMWESjtZDW0AXcJ2Y/XN1LUdO3VLTRhtkqdh7leBi65W/NJC QJtQc3DVcJyZ4WB3mKoeZstDmvVYnbFHFG5/7ptiMa1VBeDwczq2PLaHD8/ZbgraQh5G nyfaxAXnUxrq0ONLEONE+yPHlQp4jiJNRTcHzO/D6qETQtG/lBnq7GzE2TVk+4yH4nY9 l18D5VKHUSa6rU5y4KPPAD+SF/btISsQZtWum3qASyoQwkTPreP6SwoUIpT36l8YR+Vg 8Gijvze2gtLDFOuNYeL3pCIbjqUXcm+d/m8pjUdlx2ozhrOO0iw0tBBgbAqzCoyehZQs Hpcw== X-Gm-Message-State: AOAM532wspSar7chreokHqWvDiNIQE1qx3nVHGKikbzHzr2PzJ6kyaIr wHvEc//hSwL9q6oJe2z/qd61Avo+AI0= X-Google-Smtp-Source: ABdhPJxhktwvlyacFzwwnTWnwQTm+lAvzhy+Qg8fTAF8WGzqAhV82jyHQsd3Eo9NfnurEwrR6+RPjw== X-Received: by 2002:ac8:4e84:: with SMTP id 4mr2304904qtp.296.1605280018631; Fri, 13 Nov 2020 07:06:58 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id k31sm6602317qtd.40.2020.11.13.07.06.57 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:06:58 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF6uMn000325 for ; Fri, 13 Nov 2020 15:06:56 GMT Subject: [PATCH v1 52/61] NFSD: Replace READ* macros in nfsd4_decode_reclaim_complete() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:06:56 -0500 Message-ID: <160528001696.6186.7670929235558400783.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c69dbe8f5ff2..94e96bf09cc1 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1698,16 +1698,6 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, return nfsd4_decode_stateid4(argp, &free_stateid->fr_stateid); } -static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, struct nfsd4_reclaim_complete *rc) -{ - DECODE_HEAD; - - READ_BUF(4); - rc->rca_one_fs = be32_to_cpup(p++); - - DECODE_TAIL; -} - #ifdef CONFIG_NFSD_PNFS static __be32 nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp, @@ -1947,6 +1937,13 @@ static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, str return nfsd4_decode_clientid4(argp, &dc->clientid); } +static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, struct nfsd4_reclaim_complete *rc) +{ + if (xdr_stream_decode_u32(argp->xdr, &rc->rca_one_fs) < 0) + return nfserr_bad_xdr; + return nfs_ok; +} + static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, struct nfsd4_fallocate *fallocate) From patchwork Fri Nov 13 15:07:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903859 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2B2DD138B for ; Fri, 13 Nov 2020 15:07:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0F77E22242 for ; Fri, 13 Nov 2020 15:07:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qx4QSQDh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726878AbgKMPHH (ORCPT ); Fri, 13 Nov 2020 10:07:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726876AbgKMPHG (ORCPT ); Fri, 13 Nov 2020 10:07:06 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9D75C0613D1 for ; Fri, 13 Nov 2020 07:07:05 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id d9so9019035qke.8 for ; Fri, 13 Nov 2020 07:07:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=XL6s6Tk4i4MrxWO3yZZ103RWXK3hxp8dnouqOicAbuc=; b=qx4QSQDhzzsDMAtAWxtuBA8q8aXIYAqpuUpqUkIKMN34ZTkxdRKpcWBvqMzEQfCy6w zVySt+0jKf5cHUmI0/0skfA87qXr9jshPkYMMeTg2C91Lw4frFTSVBudEWsD2TP+pXzL xKiyiOxQTCggq9q4rBJghpdI2cSK9SfXlaWDYs9u9bCUlxqRaegImvGpgY/4FodQMD8+ an3DV/IoX1DMWjXpgghfFH9+wY5AO9TLI/tuM4Q2n/6Vg9d/6bGOPI+9ZaHjpeyJCbaO 1OWuBowRnT6ccet1ykXLH70WOykDaHLRELPRmKMCNGI+aqJXFk4Zm/TrenGHLz+1oz3l xcYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=XL6s6Tk4i4MrxWO3yZZ103RWXK3hxp8dnouqOicAbuc=; b=mc/8WLmJ8dPdaWNPPzv2pWrGeXM8nyw502Lkb2cTRPh02XJ1+i5kXfOygDnF6pAppK QXycngj6BCmHgQ/g1lIYFcQcuJ26j5IhlxCL/VtBmJ4tclcOKR4seoNAHoRmfd+S4niZ N57YQnJIhDBmHNhIJ2MQgEdYw5kvyY1W4O+Q13yawPuXrz5WmZAUiJ10xxn7cwFPPrKj 1A3Vgo3vRn4LY+qdrKGScjk4OapENmQ9k+hG6omAS48hlSFbQEn0HtmgWpMJWfeiKSMA 6w2meO88yYcQTXb15MIGicpojUGak5pDL2JRaZCk4Rigj51gnYYPqHwybBxSu9A7+m0F a1iQ== X-Gm-Message-State: AOAM532oSn37ugK9/7M6yxP2aaKi7Ia4FxJDQlrdtmXpXU8X2U7qWASk f5YHLdewvz6B3b137AbcV9SGFzR1D8s= X-Google-Smtp-Source: ABdhPJzRWg2f7b/3Fi4y94VX2kP6p2Bk0M5eUQoXQVc9aOVomyQDFcmOzJlk9FQ+WKkejE3K4hB4Qw== X-Received: by 2002:a37:5f42:: with SMTP id t63mr2397575qkb.236.1605280024058; Fri, 13 Nov 2020 07:07:04 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id r89sm1053847qtd.16.2020.11.13.07.07.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:03 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF72kb000328 for ; Fri, 13 Nov 2020 15:07:02 GMT Subject: [PATCH v1 53/61] NFSD: Replace READ* macros in nfsd4_decode_fallocate() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:02 -0500 Message-ID: <160528002232.6186.12736242667821000001.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 94e96bf09cc1..9afdb83c5c23 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1948,17 +1948,21 @@ static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, struct nfsd4_fallocate *fallocate) { - DECODE_HEAD; + __be32 status; status = nfsd4_decode_stateid4(argp, &fallocate->falloc_stateid); if (status) - return status; - - READ_BUF(16); - p = xdr_decode_hyper(p, &fallocate->falloc_offset); - xdr_decode_hyper(p, &fallocate->falloc_length); + goto out; + if (xdr_stream_decode_u64(argp->xdr, &fallocate->falloc_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &fallocate->falloc_length) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:07:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903861 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4A912139F for ; Fri, 13 Nov 2020 15:07:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2FB5C22240 for ; Fri, 13 Nov 2020 15:07:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OxZH50dn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726860AbgKMPHM (ORCPT ); Fri, 13 Nov 2020 10:07:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726884AbgKMPHM (ORCPT ); Fri, 13 Nov 2020 10:07:12 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CD2EC0613D1 for ; Fri, 13 Nov 2020 07:07:12 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id 199so9016639qkg.9 for ; Fri, 13 Nov 2020 07:07:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=JbWgFE61PLjU9GAdj0oHrl8/eNQKOjfOnfeODNsr/aw=; b=OxZH50dn201x4ugxYa/GyhnNCChAPeddxyQIr4N0pfWYeqlvfszUWlgNKPhZTnmLY3 O5me8OCKOprv0aoKXhjak8xiO4MNxPtMAbk7K3x8DRgabDa84bopts+vjbAlkbA6fXHg UtULg9LYmS9sOweaSkvfAq5P2+/kqARvElhtM3THWGR09Gb+bywI8RXRNXDFWnJwtgHZ kPHD9PUZkGIoD8tmHNrM60V5C6sAGfndZlJsIZdKmZ9BQ+LiCTIJ4PMiien6LR55Vb5J pAIv3Y/pwilVpb5wc17XFaVd9z0uXn7mkuMLLngMpAmxHR25oYcRQBZsv0vMXdWoDeLA WCXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=JbWgFE61PLjU9GAdj0oHrl8/eNQKOjfOnfeODNsr/aw=; b=jhIjhJMOL7/RPdIjaOGt9Z5QbLY05AKgrY1G4qquLspjVPftrs1A1RlbGa5aV3qBIT 9yKw/v2tT2excw/2cvxr4D1ddBLffvbbLS3ei87sxVj5dV4ZrA9Ek1eY9kOYtENjiyH+ S/TsGbQeZsSMxOEYzanqnvyIelCJx85WFlNUrFd7S24EuIdgzi/zReZNPLEDtWl08Pgh yFt/xWtqreUsKJxjpfKduDYe1tPe7W8xVMwt+CX2yNrcd5NFWWHXwzAAva7CCq2Z/60V /TtSBL3xDSxtXxx2UjhhBzvJBkCsJ4e2tkBjHUikLcB48ml7ktrBH/tfr/IeeghPAVJ/ cI6w== X-Gm-Message-State: AOAM5333wk7r0DVEpyY+q5OeA6OMrEvBmIWbc035GeCuk2STWzascVkF YKFEvXJVkeHvCKVnlevaeeeOzcADl4s= X-Google-Smtp-Source: ABdhPJymmiUeQhJ0W8SI7eFa5AaI3HhfbfP30+a0XG7Hd19g4g7NT9s/IjuK71fB7O9vxfEWiGH41g== X-Received: by 2002:a37:4d7:: with SMTP id 206mr2370948qke.233.1605280029539; Fri, 13 Nov 2020 07:07:09 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id q11sm6616807qtp.47.2020.11.13.07.07.08 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:08 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF77s0000331 for ; Fri, 13 Nov 2020 15:07:07 GMT Subject: [PATCH v1 54/61] NFSD: Replace READ* macros in nfsd4_decode_clone() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:07 -0500 Message-ID: <160528002768.6186.12249785285512383070.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 9afdb83c5c23..7e969f04f62f 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1968,20 +1968,26 @@ nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone) { - DECODE_HEAD; + __be32 status; status = nfsd4_decode_stateid4(argp, &clone->cl_src_stateid); if (status) return status; status = nfsd4_decode_stateid4(argp, &clone->cl_dst_stateid); if (status) - return status; + goto out; + if (xdr_stream_decode_u64(argp->xdr, &clone->cl_src_pos) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &clone->cl_dst_pos) < 0) + goto xdr_error; + if (xdr_stream_decode_u64(argp->xdr, &clone->cl_count) < 0) + goto xdr_error; - READ_BUF(8 + 8 + 8); - p = xdr_decode_hyper(p, &clone->cl_src_pos); - p = xdr_decode_hyper(p, &clone->cl_dst_pos); - p = xdr_decode_hyper(p, &clone->cl_count); - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 nfsd4_decode_nl4_server(struct nfsd4_compoundargs *argp, From patchwork Fri Nov 13 15:07:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903863 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C0F5E138B for ; Fri, 13 Nov 2020 15:07:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A541E22242 for ; Fri, 13 Nov 2020 15:07:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C+WL5m/W" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726891AbgKMPHS (ORCPT ); Fri, 13 Nov 2020 10:07:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726886AbgKMPHR (ORCPT ); Fri, 13 Nov 2020 10:07:17 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 554C0C0613D1 for ; Fri, 13 Nov 2020 07:07:17 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id l2so9058984qkf.0 for ; Fri, 13 Nov 2020 07:07:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=fHbm716OIddML+oaM5igvI2/l5zK5hH6CRVMkQnNjiI=; b=C+WL5m/WprDcDwtWG1IQLoahkBdicXWzfknhapjgnwcGKm5XkIDzbmNwXerr+2tR8q z3+tZjGykh5+DMZs6f765o6+x7lgRudwFyiAHfbH+lbdpBi31wlcuCR8CKcdXquq9LV4 WwepoUFVkfu30RK0FV6fttj2/USTrhiHmXeiUgnYnanHAfWYzf1BpV0/KJngbKIXulZn y9gCYn1L1ipi67NWJet8lYY9L4ty5hcFro20bX8t4mKStW3+wTyHNuXbcNeCP5ACg+dr wUe+DM2uRhQ5NeTbOdVq1FelVwWJPzfgTdNiQnu0t7BOBY3wkDqawJp2JSsn3bEbrq94 vlww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=fHbm716OIddML+oaM5igvI2/l5zK5hH6CRVMkQnNjiI=; b=EJQuMdsnVQUWivf08FTYK7uAI7d7csazyH+A1Cko7N/zRYGoOY4Y2KFuZglUE0OlhK j5W5CJ7eFax12eyy7aDQvbmWRfGI+bsRXXqpDOCinSgd2uS9Ztrt8xpfbLGfai20R2xM /eL3JC9j+R44JHCkkrJVPMdlS/UJ3oLDGzX6DqCM/FNDRGhG9h3GaWAW+GIb7FBxrERw DWRyMPrB7HXCWEYOBJWwUwTZJGKqP2GJ732FBMamyMf/WYwTk3txIZHDXDVhXtOGxpOl YAzz5Y/1Uw4DJQrtScRpVK9AaTi+9Gvw4dV8z0vmD5NK3FBW6QklUjBkcvdzNBkEP8j8 pk+w== X-Gm-Message-State: AOAM5325dD130ADfr2Kk4zPA7mkKkTIsXOLKDfhj2ND8yVVHF5/VyAIc eHwVHVIfGEY899OF6whPTxDJMUDLJgk= X-Google-Smtp-Source: ABdhPJx5ZXMgiHpHABErlT88dIbF+RLQCR7VnepU49e8hFMet3mAAdRej8qzVjnoY3b6DpvZGOvXVg== X-Received: by 2002:a37:7c04:: with SMTP id x4mr2245680qkc.441.1605280034709; Fri, 13 Nov 2020 07:07:14 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id t133sm7082909qke.82.2020.11.13.07.07.13 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:14 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7Dmu000334 for ; Fri, 13 Nov 2020 15:07:13 GMT Subject: [PATCH v1 55/61] NFSD: Replace READ* macros in nfsd4_decode_copy() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:13 -0500 Message-ID: <160528003304.6186.14520651807274321599.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 7e969f04f62f..408da2625dba 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1993,43 +1993,51 @@ nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone) static __be32 nfsd4_decode_nl4_server(struct nfsd4_compoundargs *argp, struct nl4_server *ns) { - DECODE_HEAD; struct nfs42_netaddr *naddr; + __be32 *p; - READ_BUF(4); - ns->nl4_type = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &ns->nl4_type) < 0) + goto xdr_error; /* currently support for 1 inter-server source server */ switch (ns->nl4_type) { case NL4_NETADDR: naddr = &ns->u.nl4_addr; - READ_BUF(4); - naddr->netid_len = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &naddr->netid_len) < 0) + goto xdr_error; if (naddr->netid_len > RPCBIND_MAXNETIDLEN) goto xdr_error; - READ_BUF(naddr->netid_len + 4); /* 4 for uaddr len */ - COPYMEM(naddr->netid, naddr->netid_len); + p = xdr_inline_decode(argp->xdr, naddr->netid_len); + if (!p) + goto xdr_error; + memcpy(naddr->netid, p, naddr->netid_len); - naddr->addr_len = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &naddr->addr_len) < 0) + goto xdr_error; if (naddr->addr_len > RPCBIND_MAXUADDRLEN) goto xdr_error; - READ_BUF(naddr->addr_len); - COPYMEM(naddr->addr, naddr->addr_len); + p = xdr_inline_decode(argp->xdr, naddr->addr_len); + if (!p) + goto xdr_error; + memcpy(naddr->addr, p, naddr->addr_len); break; default: goto xdr_error; } - DECODE_TAIL; + + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; } static __be32 nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) { - DECODE_HEAD; struct nl4_server *ns_dummy; + __be32 *p, status; int i, count; status = nfsd4_decode_stateid4(argp, ©->cp_src_stateid); @@ -2039,7 +2047,9 @@ nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) if (status) return status; - READ_BUF(8 + 8 + 8 + 4 + 4 + 4); + p = xdr_inline_decode(argp->xdr, sizeof(__be64) * 3 + sizeof(__be32) * 3); + if (!p) + goto xdr_error; p = xdr_decode_hyper(p, ©->cp_src_pos); p = xdr_decode_hyper(p, ©->cp_dst_pos); p = xdr_decode_hyper(p, ©->cp_count); @@ -2057,7 +2067,7 @@ nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) /* decode all the supplied server addresses but use first */ status = nfsd4_decode_nl4_server(argp, ©->cp_src); if (status) - return status; + goto out; ns_dummy = kmalloc(sizeof(struct nl4_server), GFP_KERNEL); if (ns_dummy == NULL) @@ -2071,8 +2081,11 @@ nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) } kfree(ns_dummy); intra: - - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } static __be32 From patchwork Fri Nov 13 15:07:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903869 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 137BB138B for ; Fri, 13 Nov 2020 15:07:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E46F422201 for ; Fri, 13 Nov 2020 15:07:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="t95sG2Ef" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726711AbgKMPHh (ORCPT ); Fri, 13 Nov 2020 10:07:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726526AbgKMPHh (ORCPT ); Fri, 13 Nov 2020 10:07:37 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 61368C0613D1 for ; Fri, 13 Nov 2020 07:07:24 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id v11so6822000qtq.12 for ; Fri, 13 Nov 2020 07:07:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=cdih5GI/dhHUpJziNpURGNtIgUUPJvHL110ZAtZlyiM=; b=t95sG2Efpr0dfVXhWHm/ui9WQcVGiNK0plKdLjeqlBvXtwxxq3C0CQPVR7ZRcmWfvY q8twVsRjmLeHcjmAp/2AU8tF8dd1eD6NRoYvxi/+suXs+0veApKAVzyGAKzm10PjVATI mJ2bkEjAFx0jUQKFCthU4NJOe3eLiCJT5wBvwhoj/IQtC6pdfN5SDI+TWgvkCLZf0ckz 4EFZN9+ix72IWOTFyx0KX/dk7SKHTWwKDUzYsmeTOlYibryUF8j6AMrGxD+tVLXKU3gY ytjTTylZynAK183SPqci/bpI+3ZWXbE0Szn1Ry1uGGs0F/3KhdmqA6LZ/c8QO226ng/n fAkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=cdih5GI/dhHUpJziNpURGNtIgUUPJvHL110ZAtZlyiM=; b=piM5cmlsaLT5kU/kpQbMdj3LMh3tstrM2cvKPwXVZdOR368U2EE/PyICDxDEUM1H7i lvoq2kPoSrIzwSt6bITPxQ9W/c1QLp15sR+O5fGl7oY/TWKlOVy7r5NoEgfu3kLHGMZm LxUM2SO2euMOO6sfcxeUNFJmNiLBwG6958gXH62YDGP4Csk4IstTsJjhE66kst100QbR Z1qpOSJAUs8SKebTnfv8ZWPIFEFIwrvdUfbE/OeQJADHAMVb6VKtEt/biy+4TBmgOsy8 0ZTVOtspiG3tcOVgJt/cMoVFrbyoBqPiPq4XHs/QiSbwaHnVTVJaxZRv6i9iNqmKF9Zj IGOA== X-Gm-Message-State: AOAM532wTeWVVmSIuiYAZWx8m8bNNjmIsQk7yd9RIeEKyhn5yvzX5yLu Ktz4hhGOOziHP/bhmQoAj1+aT/2Dd2E= X-Google-Smtp-Source: ABdhPJwBzKrbUFWDbPu1Xn3IIwLGR3mdBMaT2IKiPk3BCDU9ubHnY1WCOjS8GBkkixeAQRtNV6p3iQ== X-Received: by 2002:ac8:5bc4:: with SMTP id b4mr2178088qtb.189.1605280039958; Fri, 13 Nov 2020 07:07:19 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id a85sm6887683qkg.3.2020.11.13.07.07.18 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:19 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7IiH000337 for ; Fri, 13 Nov 2020 15:07:18 GMT Subject: [PATCH v1 56/61] NFSD: Replace READ* macros in nfsd4_decode_seek() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:18 -0500 Message-ID: <160528003840.6186.12603304346209628234.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 408da2625dba..1f7eb2f67390 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2110,17 +2110,21 @@ nfsd4_decode_copy_notify(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_seek(struct nfsd4_compoundargs *argp, struct nfsd4_seek *seek) { - DECODE_HEAD; + __be32 status; status = nfsd4_decode_stateid4(argp, &seek->seek_stateid); if (status) - return status; - - READ_BUF(8 + 4); - p = xdr_decode_hyper(p, &seek->seek_offset); - seek->seek_whence = be32_to_cpup(p); + goto out; + if (xdr_stream_decode_u64(argp->xdr, &seek->seek_offset) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &seek->seek_whence) < 0) + goto xdr_error; - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; } /* From patchwork Fri Nov 13 15:07:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903865 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D7FB7139F for ; Fri, 13 Nov 2020 15:07:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD06C22240 for ; Fri, 13 Nov 2020 15:07:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XewjJM9D" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726775AbgKMPH1 (ORCPT ); Fri, 13 Nov 2020 10:07:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726711AbgKMPH0 (ORCPT ); Fri, 13 Nov 2020 10:07:26 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75BFAC0617A6 for ; Fri, 13 Nov 2020 07:07:26 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id v20so1426454qvx.4 for ; Fri, 13 Nov 2020 07:07:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=H355uMOS88su4O0oJUFwVT+hG+CgLa5JlEEt+7u26vs=; b=XewjJM9DDtknkrjIQCr0mGSCWs/XobE9goMeocIu3hGapLXUpvmCgkb47vBpeSkI+o jeKaG8gubKL92GxOCSTtQ+F80yeUa0b/2lrzNRk+kLiCagpRpmJRHD8tXoTjr+U9xu0Q YSzcLR8eegDaGcbXXsHzdYocev963rMZ4BwSegEs4invGG31+6w1Ssw81znRDEe+kXH8 ydu+oFKJJHrAFElzR3VOTipcMzA5mHVbA16aiuYv2o6rlK8YjgpQ1Co0dHutX6j3alyF wdS7bZKfzPRPa8quPRYfFAUDBhrlWhvIECX6p3KzX9kr8KgO//7NqUAyao2SSXwp7mzb UDLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=H355uMOS88su4O0oJUFwVT+hG+CgLa5JlEEt+7u26vs=; b=NlCWno72REsCpjmhKvoW5EEdbm/oPDrLtpWl5ZKh+II1Hr0pRyK3cDecbtCt/fX5dr HrYNeNmH1SM5U16kcrtPX5qf9IPikrdg49Vlp+YhI5NfJuJ0IKrSZaW/eKUCcDsVAuhj USw8+MiLjbJ+eYNsj1Il2rhiJ6g9daorRCLOq3rUoGlUq+5pN0GjfhPjPHFpCcykVdOO hdNICx8ie3aSjcKKSkptPEhx5BX7FOd7T5vMhsNkIkdqlY24eG3mqjNCK771PBfDnDpT U1YYuEp7nezv7di2SC7XRiRfrsIxCDjBS42G/9nQ90lSbBcfj+hzdGv5Es392SZS4yHV 3zvA== X-Gm-Message-State: AOAM532DyG92+IHWSCuJurCAO7LCPUfuaXvI9TKle9HyCSLvHzI/y9zf 10H4eKcNSjQsOfNBTYU/fYqhTXOXJ88= X-Google-Smtp-Source: ABdhPJyllFHkLJMSuDsP0wdb4oW6Q2Qhg9Eyd5vm/Iv7SBd7bx8rWx0DZGNHeEuoUSP8I/YXJk3JKw== X-Received: by 2002:ad4:5691:: with SMTP id bc17mr2800268qvb.30.1605280045242; Fri, 13 Nov 2020 07:07:25 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id e10sm7274567qkn.126.2020.11.13.07.07.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:24 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7NFZ000340 for ; Fri, 13 Nov 2020 15:07:23 GMT Subject: [PATCH v1 57/61] NFSD: Replace READ* macros in nfsd4_decode_xattr_name() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:23 -0500 Message-ID: <160528004347.6186.13036251358322566533.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 1f7eb2f67390..12b90251fbf5 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2187,12 +2187,12 @@ nfsd4_vbuf_from_vector(struct nfsd4_compoundargs *argp, struct xdr_buf *xdr, static __be32 nfsd4_decode_xattr_name(struct nfsd4_compoundargs *argp, char **namep) { - DECODE_HEAD; char *name, *sp, *dp; u32 namelen, cnt; + __be32 *p; - READ_BUF(4); - namelen = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &namelen) < 0) + goto xdr_error; if (namelen > (XATTR_NAME_MAX - XATTR_USER_PREFIX_LEN)) return nfserr_nametoolong; @@ -2200,12 +2200,12 @@ nfsd4_decode_xattr_name(struct nfsd4_compoundargs *argp, char **namep) if (namelen == 0) goto xdr_error; - READ_BUF(namelen); - + p = xdr_inline_decode(argp->xdr, namelen); + if (!p) + goto xdr_error; name = svcxdr_tmpalloc(argp, namelen + XATTR_USER_PREFIX_LEN + 1); if (!name) - return nfserr_jukebox; - + goto nomem; memcpy(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN); /* @@ -2225,7 +2225,11 @@ nfsd4_decode_xattr_name(struct nfsd4_compoundargs *argp, char **namep) *namep = name; - DECODE_TAIL; + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } /* From patchwork Fri Nov 13 15:07:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903867 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 901EC138B for ; Fri, 13 Nov 2020 15:07:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 759A222240 for ; Fri, 13 Nov 2020 15:07:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fY609x15" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726805AbgKMPHc (ORCPT ); Fri, 13 Nov 2020 10:07:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36692 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726711AbgKMPHb (ORCPT ); Fri, 13 Nov 2020 10:07:31 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7490AC0617A6 for ; Fri, 13 Nov 2020 07:07:31 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id y11so4693240qvu.10 for ; Fri, 13 Nov 2020 07:07:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=5LxcTAe+cqw6aJ09UwYt+0J6QbAh8KbhTavE5bIbLOc=; b=fY609x158s5NFgIp1Y01q4VHppOCWOOzgz4XYDdZX5rYyPDJxMGAWuubSG01sCN7we egnr0b3GAOz3W62cNC4arUsO+MLtmMCEB33WhDrMhWJRhXgPMSIDDosQ1AD6StVgGBTC uocBPpZ0wZkhTQjy7yipfYgQ3yPKcv5+HOWPZBL6D/iflUldfV2GXNgKlhYC//x+KmxF XDcfF85nhKqhOqbIBZpBdRO2DmHkZWQCSGK4+gqe36ylsxNTO8PKLTii38i63BQ6cjsI d7DOb1rrIDg2XiL0xbjPr7qb3gevaxG16OgudyWHDxb9An/J89AC2qMxeZnjm60/qFwU ayUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=5LxcTAe+cqw6aJ09UwYt+0J6QbAh8KbhTavE5bIbLOc=; b=pcDJIrjPmUY85AmyuiMkVr8ITpxnM9wZ9IrLJ3bI1haUSSD8CdBY/hvo5AmTr2fTe/ 4crkuXzzUL4CiHz32WXpB1vdbTWn4i/Z0SFihz3S7HlR8hGByH7dYU1Ci5FWXBqqjlni i7AG+uMaArsk9Rzy9hJ+dHW466L8uIVT0r2PbSaxQ/CW+2YpMS7SWYcMAI+mKuV6+YAG BWYCHERizP/LP2h02bwcEJYIjy59pYQo7VJlpimb4wEU5/UW4ZXNqq+nGmh5AS5jIh/x Musmb6xK5wmrtsfYk20mi6d+mcXltiYkrEfXXyHh03aOomYkZQLaeT1FB9Nbx9ngPJys NEug== X-Gm-Message-State: AOAM531LQiecEQ4hQjP8AzZm75PlZENnis/O/z2EHjJGpibQ52Zk3NJR BXcUevlYu5D1HBk+nFl7tvUcI3ImcDk= X-Google-Smtp-Source: ABdhPJxd7UaH/a0gEZkiwmXvi58BZ6l44qhEqXKgnKmWoarRP3PO+GZ5Re6MRn2zNMZQNI/2svvilA== X-Received: by 2002:a0c:9004:: with SMTP id o4mr2818900qvo.17.1605280050384; Fri, 13 Nov 2020 07:07:30 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id d16sm6966745qkc.58.2020.11.13.07.07.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:29 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7Ss2000343 for ; Fri, 13 Nov 2020 15:07:28 GMT Subject: [PATCH v1 58/61] NFSD: Replace READ* macros in nfsd4_decode_setxattr() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:28 -0500 Message-ID: <160528004877.6186.2667946875923803861.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 12b90251fbf5..760aac341fab 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2261,25 +2261,25 @@ static __be32 nfsd4_decode_setxattr(struct nfsd4_compoundargs *argp, struct nfsd4_setxattr *setxattr) { - DECODE_HEAD; u32 flags, maxcount, size; + __be32 status; - READ_BUF(4); - flags = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &flags) < 0) + goto xdr_error; if (flags > SETXATTR4_REPLACE) - return nfserr_inval; + goto inval_arg; setxattr->setxa_flags = flags; status = nfsd4_decode_xattr_name(argp, &setxattr->setxa_name); if (status) - return status; + goto out; maxcount = svc_max_payload(argp->rqstp); maxcount = min_t(u32, XATTR_SIZE_MAX, maxcount); - READ_BUF(4); - size = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &size) < 0) + goto xdr_error; if (size > maxcount) return nfserr_xattr2big; @@ -2293,7 +2293,13 @@ nfsd4_decode_setxattr(struct nfsd4_compoundargs *argp, &setxattr->setxa_buf, size); } - DECODE_TAIL; + status = nfs_ok; +out: + return status; +xdr_error: + return nfserr_bad_xdr; +inval_arg: + return nfserr_inval; } static __be32 From patchwork Fri Nov 13 15:07:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903871 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 65630138B for ; Fri, 13 Nov 2020 15:07:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4801922240 for ; Fri, 13 Nov 2020 15:07:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gnk4ecCw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726723AbgKMPHi (ORCPT ); Fri, 13 Nov 2020 10:07:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726526AbgKMPHi (ORCPT ); Fri, 13 Nov 2020 10:07:38 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0306FC0613D1 for ; Fri, 13 Nov 2020 07:07:38 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id r7so9052870qkf.3 for ; Fri, 13 Nov 2020 07:07:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=COrvmwlddej0CGMOGx4wlESLR75B8NOG7RYuqdB3xT4=; b=gnk4ecCw0RYG4qgaI6bxlFSeWPZcEXYxxz4VycIhA40xTSYGfrAmug3UfXDht/4Zl0 o+5W/MVRtznM160GsyJzII5OVoniDHae/4P6aNEO8wqQ3N2biQMGDSR7UsimOjQX4pXH UaDrvx53pPYvNneZKpTe2lz+xmg2DUbwdTpElDun7Xu6whwQztGabAcqDeTeKWRGSRdv t8FBrmoWyTSclSSGaj0XXRxLoWwqoKhWNvY/KLX0AkRVck0ndZh0NA7xg8r7HPT5mLR5 D5TlsFxIB2lfF83Eo8OJ/JuOB9sTK/jhCzzGHHZSZPjUdgBUDLlEZ8pQH0zWg8gZ9rtb x3ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=COrvmwlddej0CGMOGx4wlESLR75B8NOG7RYuqdB3xT4=; b=VQD6rhVBddjIZTKTM6T9PU8/VhkeFuQRKR/UVTQRkRxg0+SvyFySM2awZkAO+jjxZD rihFqF4CKRJqD76swa7IkwI67Mk1s30V2vKJED45J6nZp6KxRrhW0EejB/S88qRJFag+ j/33SK23BL3FV1+f8XtwejEBjr5leBp9lUX2dDvAcrqjuSXaYinBaU0A1m+nWa/3u6iM PqULo/hajAThwDBLP85Rf6+MVG1pybF4i2/WxsG3/L9MQoRy3er1b+5mUlnW6jQ87qE2 EjZTEh+R7hdIaz2i3aMsfxNesgzPt2AqGS6vwyTG+EZnejxjdz3NXutMFyxIFmwXD5Oj jkJg== X-Gm-Message-State: AOAM5335QwQMzcjW4j7XqaNG98tqM7CRXgPRlu4LRe23csyxvM5woBas UWmZ1KrfKJV/MTCDUVWmgIUOAtnBw3Q= X-Google-Smtp-Source: ABdhPJx5OhvC+a/gkEEEj8s7Iw/pfmwcCUT1c4tVnOxH7KdPogl+vP8zn/D4RO4C2J+RZRdmG8wA0w== X-Received: by 2002:a37:b642:: with SMTP id g63mr2304459qkf.460.1605280055724; Fri, 13 Nov 2020 07:07:35 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id a23sm6663937qtj.56.2020.11.13.07.07.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:35 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7Y2S000346 for ; Fri, 13 Nov 2020 15:07:34 GMT Subject: [PATCH v1 59/61] NFSD: Replace READ* macros in nfsd4_decode_listxattrs() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:34 -0500 Message-ID: <160528005406.6186.6799824894457553423.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 760aac341fab..4332b16cfdc8 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -2306,11 +2306,10 @@ static __be32 nfsd4_decode_listxattrs(struct nfsd4_compoundargs *argp, struct nfsd4_listxattrs *listxattrs) { - DECODE_HEAD; u32 maxcount; - READ_BUF(12); - p = xdr_decode_hyper(p, &listxattrs->lsxa_cookie); + if (xdr_stream_decode_u64(argp->xdr, &listxattrs->lsxa_cookie) < 0) + goto xdr_error; /* * If the cookie is too large to have even one user.x attribute @@ -2320,15 +2319,20 @@ nfsd4_decode_listxattrs(struct nfsd4_compoundargs *argp, (XATTR_LIST_MAX / (XATTR_USER_PREFIX_LEN + 2))) return nfserr_badcookie; - maxcount = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &maxcount) < 0) + goto xdr_error; if (maxcount < 8) /* Always need at least 2 words (length and one character) */ - return nfserr_inval; + goto inval_arg; maxcount = min(maxcount, svc_max_payload(argp->rqstp)); listxattrs->lsxa_maxcount = maxcount; - DECODE_TAIL; + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +inval_arg: + return nfserr_inval; } static __be32 From patchwork Fri Nov 13 15:07:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903873 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AD7AB138B for ; Fri, 13 Nov 2020 15:07:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8D73E22240 for ; Fri, 13 Nov 2020 15:07:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="r1NZKlvy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726760AbgKMPHo (ORCPT ); Fri, 13 Nov 2020 10:07:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36726 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726526AbgKMPHn (ORCPT ); Fri, 13 Nov 2020 10:07:43 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84C7DC0613D1 for ; Fri, 13 Nov 2020 07:07:43 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id h15so8992828qkl.13 for ; Fri, 13 Nov 2020 07:07:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=2udU+k42nj7AHqpsPJS5UzjEd83YyLvzDJNvz9lQzPQ=; b=r1NZKlvy7NcbgLU+I34Imyyii7fY+Oh+htm9R1u35S4CC/nBAqaOUc0Q3AuQsjiCvf OPbs3z/Oz/ngX4ZVzg0Or0eGifja9oOwyXMRm+9OuWAnUdzQ/KcVTxJHwBmRpQj92jCM Cl1xQilzJm0v5zSczd5IKnKmARSz48D6niFlqlelmUPmkD/8QMxpnzpO7KkASOxocH1R JZSsh1w+554bq/JQUBCITUQlPWu4Ad+TttNvy24cRbo9QadTTjbwY2Aw2RVPLLgrbUPd 9TVlLLXqWAhpdNGIi9KArlft6t4yyUx30MmzbHmxwc1LwdUxKQi/B1VCuZeenMd5Lljl Rshw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=2udU+k42nj7AHqpsPJS5UzjEd83YyLvzDJNvz9lQzPQ=; b=jmwm5EpnbepXl8y1JWSEMGzFgRrVEuicD+ebJQoabfrDb6IGEr5d3US7bQs9BJeWqV yGuJ7fCtoAK7zxgFBbNEVP2bCB+r7ICJeGWVzhzmP+r+oMwn2r3mdpVXk+SaQHb3XIDK tZQFY7jOQr7tgidDp4TCu2E7aD962i3iW+CGlCBNyddG3f1DDkWb8JgN3NTSANyTbYCY +2qu3QeopkQYVWia7SzU/qzoBxiWOY1V2dqjdFCRXpF10Dsd3dG4a2UwRvws7ssPBoRN Z/WcGK/V4NPxngzQPn7n6AJp76qUz+jWR0EvcRyC813l8oTox+49tFv22e9HIE7yDjFU cdWw== X-Gm-Message-State: AOAM531wIb7bXcSWzhdFQOX5mUtQSDJrHpZo1uRSXkHWNzLVuaphJfX/ jK0xkNUSIrdyhSODsd+GOp62vFA1a4U= X-Google-Smtp-Source: ABdhPJwSgJyZFhnYgAzwbwH25WJeMAUJ+mzgyoBFN8mWhfRkmguBAF5+IByvAWWTtMJd0io1pORsdw== X-Received: by 2002:a37:82c5:: with SMTP id e188mr2318576qkd.58.1605280060979; Fri, 13 Nov 2020 07:07:40 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id o63sm6578912qkd.96.2020.11.13.07.07.40 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:40 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7d6B000349 for ; Fri, 13 Nov 2020 15:07:39 GMT Subject: [PATCH v1 60/61] NFSD: Replace READ* macros in nfsd4_decode_compound() From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:39 -0500 Message-ID: <160528005934.6186.2184546567789022367.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Chuck Lever --- fs/nfsd/nfs4proc.c | 2 +- fs/nfsd/nfs4xdr.c | 67 +++++++++++++++++++++++----------------------------- fs/nfsd/xdr4.h | 2 +- 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index b810d048c5f8..205e1b3ce629 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -3281,7 +3281,7 @@ int nfsd4_max_reply(struct svc_rqst *rqstp, struct nfsd4_op *op) void warn_on_nonidempotent_op(struct nfsd4_op *op) { if (OPDESC(op)->op_flags & OP_MODIFIES_SOMETHING) { - pr_err("unable to encode reply to nonidempotent op %d (%s)\n", + pr_err("unable to encode reply to nonidempotent op %u (%s)\n", op->opnum, nfsd4_op_name(op->opnum)); WARN_ON_ONCE(1); } diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 4332b16cfdc8..3ab248433f44 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -184,28 +184,6 @@ svcxdr_dupstr(struct nfsd4_compoundargs *argp, void *buf, u32 len) return p; } -/** - * savemem - duplicate a chunk of memory for later processing - * @argp: NFSv4 compound argument structure to be freed with - * @p: pointer to be duplicated - * @nbytes: length to be duplicated - * - * Returns a pointer to a copy of @nbytes bytes of memory at @p - * that are preserved until processing of the NFSv4 compound - * operation described by @argp finishes. - */ -static char *savemem(struct nfsd4_compoundargs *argp, __be32 *p, int nbytes) -{ - void *ret; - - ret = svcxdr_tmpalloc(argp, nbytes); - if (!ret) - return NULL; - memcpy(ret, p, nbytes); - return ret; -} - - /* * NFSv4 basic data type decoders */ @@ -2462,33 +2440,43 @@ nfsd4_opnum_in_range(struct nfsd4_compoundargs *argp, struct nfsd4_op *op) static __be32 nfsd4_decode_compound(struct nfsd4_compoundargs *argp) { - DECODE_HEAD; struct nfsd4_op *op; bool cachethis = false; int auth_slack= argp->rqstp->rq_auth_slack; int max_reply = auth_slack + 8; /* opcnt, status */ int readcount = 0; int readbytes = 0; + __be32 *p; int i; - READ_BUF(4); - argp->taglen = be32_to_cpup(p++); - READ_BUF(argp->taglen); - SAVEMEM(argp->tag, argp->taglen); - READ_BUF(8); - argp->minorversion = be32_to_cpup(p++); - argp->opcnt = be32_to_cpup(p++); - max_reply += 4 + (XDR_QUADLEN(argp->taglen) << 2); + if (xdr_stream_decode_u32(argp->xdr, &argp->taglen) < 0) + goto xdr_error; + argp->tag = NULL; + if (unlikely(argp->taglen)) { + if (argp->taglen > NFSD4_MAX_TAGLEN) + goto xdr_error; + p = xdr_inline_decode(argp->xdr, argp->taglen); + if (!p) + goto xdr_error; + argp->tag = svcxdr_tmpalloc(argp, argp->taglen); + if (!argp->tag) + goto nomem; + memcpy(argp->tag, p, argp->taglen); + } - if (argp->taglen > NFSD4_MAX_TAGLEN) + if (xdr_stream_decode_u32(argp->xdr, &argp->minorversion) < 0) + goto xdr_error; + if (xdr_stream_decode_u32(argp->xdr, &argp->opcnt) < 0) goto xdr_error; + max_reply += 4 + xdr_align_size(argp->taglen); + /* * NFS4ERR_RESOURCE is a more helpful error than GARBAGE_ARGS * here, so we return success at the xdr level so that * nfsd4_proc can handle this is an NFS-level error. */ if (argp->opcnt > NFSD_MAX_OPS_PER_COMPOUND) - return 0; + goto out; if (argp->opcnt > ARRAY_SIZE(argp->iops)) { argp->ops = kzalloc(argp->opcnt * sizeof(*argp->ops), GFP_KERNEL); @@ -2506,8 +2494,8 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp) op = &argp->ops[i]; op->replay = NULL; - READ_BUF(4); - op->opnum = be32_to_cpup(p++); + if (xdr_stream_decode_u32(argp->xdr, &op->opnum) < 0) + goto xdr_error; if (nfsd4_opnum_in_range(argp, op)) op->status = nfsd4_dec_ops[op->opnum](argp, &op->u); @@ -2550,7 +2538,12 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp) if (readcount > 1 || max_reply > PAGE_SIZE - auth_slack) clear_bit(RQ_SPLICE_OK, &argp->rqstp->rq_flags); - DECODE_TAIL; +out: + return nfs_ok; +xdr_error: + return nfserr_bad_xdr; +nomem: + return nfserr_jukebox; } static __be32 *encode_change(__be32 *p, struct kstat *stat, struct inode *inode, @@ -5460,7 +5453,7 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op) if (op->status && opdesc && !(opdesc->op_flags & OP_NONTRIVIAL_ERROR_ENCODE)) goto status; - BUG_ON(op->opnum < 0 || op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) || + BUG_ON(op->opnum >= ARRAY_SIZE(nfsd4_enc_ops) || !nfsd4_enc_ops[op->opnum]); encoder = nfsd4_enc_ops[op->opnum]; op->status = encoder(resp, op->status, &op->u); diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 232529bc1b79..749c2d711d21 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -615,7 +615,7 @@ struct nfsd4_copy_notify { }; struct nfsd4_op { - int opnum; + u32 opnum; const struct nfsd4_operation * opdesc; __be32 status; union nfsd4_op_u { From patchwork Fri Nov 13 15:07:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 11903875 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A1A67139F for ; Fri, 13 Nov 2020 15:07:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8169222242 for ; Fri, 13 Nov 2020 15:07:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="vexd7Ssg" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726526AbgKMPHs (ORCPT ); Fri, 13 Nov 2020 10:07:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726789AbgKMPHr (ORCPT ); Fri, 13 Nov 2020 10:07:47 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A157C0613D1 for ; Fri, 13 Nov 2020 07:07:47 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id g17so6854552qts.5 for ; Fri, 13 Nov 2020 07:07:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:from:to:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=d6RR6f6r3EsCnCokdGgPRh3LTVdPPGEAj+AsZPCBwIU=; b=vexd7SsglNBxAiRnMPEbxhQqSNrtNox+EAXFEI0q/lY4gJp5r2Y6fWvQkRFEogohSs Hf/E9A/y5IbL9c04uzzSQzzR61CcPhyDbu1t2tBmva6Sz0JCqYcNzNRrrKK1H+1l67fz D+JBQwn22Bgt2OvLG3cb+VOqwRHl9LRgYfpT/VtKqe22ZY5TF3cn3Nbk5+/D1+5XUfIe 0pohwC2sbw2jj5MeULTmH8Js55oDSJaik513XRukkzsLDtQH2e+bCDJuphqHMdaCcU9y 1NqM8hxUZPD4oLtjYBZX8Ht8oHPOESvJ/vnyPKLi5PqhAv1dUluUZLzS8bRcI+Eck+fa 4vAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:from:to:date:message-id :in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=d6RR6f6r3EsCnCokdGgPRh3LTVdPPGEAj+AsZPCBwIU=; b=Cju7y/TI98Q+n7jsWm9mRBfYCs4bg1voiGpArQ/st3KGDc53cV2oUX8243ZbGRhyPz lO+b9BoRqBR7fwIu5ZhUVDJs4KIBmy6ayfaaXuzJhPzVw5RaP26kFCeFIKdWGtZqfsA6 5afpDBGNEFtnOrkxunPFpj0QQb2qFZTfQGxKEMEhrjK8zjVHyTSnY8xq0z390rD863oQ zpC3+oB6lfeB9OpcEKbo73RV4XY6pUp8wzAbepgIgIP9+JN/pKNiih9Nm8BQ2RsIqqsh N0H6JXWTBVMwYZtcln2XzGNCVHxByydBuhHi2eqptwj8bokxuzSH9RYGeIgFqBVTD+Fv 9M/g== X-Gm-Message-State: AOAM530+la2RHDOMpUzHy1Nbq1M7z8XbyGQgeA7YvHDPaChDuRqFQK8j xFL7qnG96FR0rvwFf1ohFSl4UuCTTE0= X-Google-Smtp-Source: ABdhPJz46RsMNO/JzNJ5ar/czFj8h89zGHMYk+xVb8OJBAZLYU68STJsc5M0cZZk2XEYgxSNf7jtNQ== X-Received: by 2002:ac8:6953:: with SMTP id n19mr2466336qtr.184.1605280066285; Fri, 13 Nov 2020 07:07:46 -0800 (PST) Received: from gateway.1015granger.net (c-68-61-232-219.hsd1.mi.comcast.net. [68.61.232.219]) by smtp.gmail.com with ESMTPSA id d184sm6924338qkf.136.2020.11.13.07.07.45 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 07:07:45 -0800 (PST) Sender: Chuck Lever Received: from klimt.1015granger.net (klimt.1015granger.net [192.168.1.55]) by gateway.1015granger.net (8.14.7/8.14.7) with ESMTP id 0ADF7irA000352 for ; Fri, 13 Nov 2020 15:07:44 GMT Subject: [PATCH v1 61/61] NFSD: Remove macros that are no longer used From: Chuck Lever To: linux-nfs@vger.kernel.org Date: Fri, 13 Nov 2020 10:07:44 -0500 Message-ID: <160528006463.6186.2700423294066360127.stgit@klimt.1015granger.net> In-Reply-To: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> References: <160527962905.6186.17550620763636619885.stgit@klimt.1015granger.net> User-Agent: StGit/0.23-29-ga622f1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Now that all the NFSv4 decoder functions have been converted to make direct calls to the xdr helpers, remove the unused C macros. Signed-off-by: Chuck Lever --- fs/nfsd/nfs4xdr.c | 40 ---------------------------------------- fs/nfsd/xdr4.h | 9 --------- 2 files changed, 49 deletions(-) diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 3ab248433f44..68d9dec9bc32 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -100,45 +100,6 @@ check_filename(char *str, int len) return 0; } -#define DECODE_HEAD \ - __be32 *p; \ - __be32 status -#define DECODE_TAIL \ - status = 0; \ -out: \ - return status; \ -xdr_error: \ - dprintk("NFSD: xdr error (%s:%d)\n", \ - __FILE__, __LINE__); \ - status = nfserr_bad_xdr; \ - goto out - -#define READMEM(x,nbytes) do { \ - x = (char *)p; \ - p += XDR_QUADLEN(nbytes); \ -} while (0) -#define SAVEMEM(x,nbytes) do { \ - if (!(x = (p==argp->tmp || p == argp->tmpp) ? \ - savemem(argp, p, nbytes) : \ - (char *)p)) { \ - dprintk("NFSD: xdr error (%s:%d)\n", \ - __FILE__, __LINE__); \ - goto xdr_error; \ - } \ - p += XDR_QUADLEN(nbytes); \ -} while (0) -#define COPYMEM(x,nbytes) do { \ - memcpy((x), p, nbytes); \ - p += XDR_QUADLEN(nbytes); \ -} while (0) -#define READ_BUF(nbytes) \ - do { \ - p = xdr_inline_decode(argp->xdr,\ - nbytes); \ - if (!p) \ - goto xdr_error; \ - } while (0) - static int zero_clientid(clientid_t *clid) { return (clid->cl_boot == 0) && (clid->cl_id == 0); @@ -5546,7 +5507,6 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p) struct nfsd4_compoundargs *args = rqstp->rq_argp; /* svcxdr_tmp_alloc */ - args->tmpp = NULL; args->to_free = NULL; args->xdr = &rqstp->rq_xdr_stream; diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 749c2d711d21..dc951768c695 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -386,13 +386,6 @@ struct nfsd4_setclientid_confirm { nfs4_verifier sc_confirm; }; -struct nfsd4_saved_compoundargs { - __be32 *p; - __be32 *end; - int pagelen; - struct page **pagelist; -}; - struct nfsd4_test_stateid_id { __be32 ts_id_status; stateid_t ts_id_stateid; @@ -696,8 +689,6 @@ struct svcxdr_tmpbuf { struct nfsd4_compoundargs { /* scratch variables for XDR decode */ - __be32 tmp[8]; - __be32 * tmpp; struct xdr_stream *xdr; struct svcxdr_tmpbuf *to_free; struct svc_rqst *rqstp;