linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chuck Lever <chuck.lever@oracle.com>
To: linux-nfs@vger.kernel.org, linux-rdma@vger.kernel.org
Subject: [PATCH V2 10/17] xprtrdma: Add CONFIG setting that can disable ALLPHYSICAL
Date: Mon, 21 Apr 2014 18:02:14 -0400	[thread overview]
Message-ID: <20140421220214.12569.23157.stgit@manet.1015granger.net> (raw)
In-Reply-To: <20140421214442.12569.8950.stgit@manet.1015granger.net>

ALLPHYSICAL is not a safe memory registration mode because it
permits NFS servers to write anywhere in a client's memory.  NFS
server bugs could result in client memory being overwritten.

This can be useful for embedded systems which do not support more
surgical RDMA memory registration and protection methods, or for
bring-up of new HCA hardware.

However, enterprise Linux distributions have expressed a desire to
disable it in production environments.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---

 include/linux/sunrpc/xprtrdma.h |    2 --
 net/sunrpc/Kconfig              |   14 ++++++++++++++
 net/sunrpc/xprtrdma/verbs.c     |   10 +++++-----
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/include/linux/sunrpc/xprtrdma.h b/include/linux/sunrpc/xprtrdma.h
index c2f04e1..64a0a0a 100644
--- a/include/linux/sunrpc/xprtrdma.h
+++ b/include/linux/sunrpc/xprtrdma.h
@@ -62,8 +62,6 @@
 #define RPCRDMA_INLINE_PAD_THRESH  (512)/* payload threshold to pad (bytes) */
 
 /* memory registration strategies */
-#define RPCRDMA_PERSISTENT_REGISTRATION (1)
-
 enum rpcrdma_memreg {
 	RPCRDMA_BOUNCEBUFFERS = 0,
 	RPCRDMA_REGISTER,
diff --git a/net/sunrpc/Kconfig b/net/sunrpc/Kconfig
index 0754d0f..c9a736e 100644
--- a/net/sunrpc/Kconfig
+++ b/net/sunrpc/Kconfig
@@ -58,6 +58,20 @@ config SUNRPC_XPRT_RDMA_CLIENT
 
 	  If unsure, say N.
 
+config SUNRPC_XPRT_RDMA_CLIENT_ALLPHYSICAL
+	bool "Enable ALLPHYSICAL memory registration mode"
+	depends on SUNRPC_XPRT_RDMA_CLIENT
+	default y
+	help
+	  This option enables support for the ALLPHYSICAL memory
+	  registration mode.
+
+	  This mode is very fast but not safe because it registers
+	  and exposes all of local memory. This could allow an
+	  NFS server bug to corrupt client memory.
+
+	  If unsure, say Y.
+
 config SUNRPC_XPRT_RDMA_SERVER
 	tristate "RPC over RDMA Server Support"
 	depends on SUNRPC && INFINIBAND && INFINIBAND_ADDR_TRANS
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index 35dcd10..9b71896 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -510,7 +510,7 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
 		if (!ia->ri_id->device->alloc_fmr) {
 			dprintk("RPC:       %s: MTHCAFMR registration "
 				"not supported by HCA\n", __func__);
-#if RPCRDMA_PERSISTENT_REGISTRATION
+#ifdef CONFIG_SUNRPC_XPRT_RDMA_CLIENT_ALLPHYSICAL
 			memreg = RPCRDMA_ALLPHYSICAL;
 #else
 			rc = -ENOMEM;
@@ -530,7 +530,7 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
 	switch (memreg) {
 	case RPCRDMA_FRMR:
 		break;
-#if RPCRDMA_PERSISTENT_REGISTRATION
+#ifdef CONFIG_SUNRPC_XPRT_RDMA_CLIENT_ALLPHYSICAL
 	case RPCRDMA_ALLPHYSICAL:
 		mem_priv = IB_ACCESS_LOCAL_WRITE |
 				IB_ACCESS_REMOTE_WRITE |
@@ -541,7 +541,7 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
 		if (ia->ri_have_dma_lkey)
 			break;
 		mem_priv = IB_ACCESS_LOCAL_WRITE;
-#if RPCRDMA_PERSISTENT_REGISTRATION
+#ifdef CONFIG_SUNRPC_XPRT_RDMA_CLIENT_ALLPHYSICAL
 	register_setup:
 #endif
 		ia->ri_bind_mem = ib_get_dma_mr(ia->ri_pd, mem_priv);
@@ -1601,7 +1601,7 @@ rpcrdma_register_external(struct rpcrdma_mr_seg *seg,
 
 	switch (ia->ri_memreg_strategy) {
 
-#if RPCRDMA_PERSISTENT_REGISTRATION
+#ifdef CONFIG_SUNRPC_XPRT_RDMA_CLIENT_ALLPHYSICAL
 	case RPCRDMA_ALLPHYSICAL:
 		rpcrdma_map_one(ia, seg, writing);
 		seg->mr_rkey = ia->ri_bind_mem->rkey;
@@ -1639,7 +1639,7 @@ rpcrdma_deregister_external(struct rpcrdma_mr_seg *seg,
 
 	switch (ia->ri_memreg_strategy) {
 
-#if RPCRDMA_PERSISTENT_REGISTRATION
+#ifdef CONFIG_SUNRPC_XPRT_RDMA_CLIENT_ALLPHYSICAL
 	case RPCRDMA_ALLPHYSICAL:
 		BUG_ON(nsegs != 1);
 		rpcrdma_unmap_one(ia, seg);


  parent reply	other threads:[~2014-04-21 22:02 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-21 22:00 [PATCH V2 00/17] NFS/RDMA patches for review Chuck Lever
2014-04-21 22:00 ` [PATCH V2 01/17] xprtrdma: mind the device's max fast register page list depth Chuck Lever
2014-04-21 22:01 ` [PATCH V2 02/17] nfs-rdma: Fix for FMR leaks Chuck Lever
2014-04-21 22:01 ` [PATCH V2 03/17] xprtrdma: Enable RDMA pad optimization by default Chuck Lever
2014-04-22 15:05   ` Chuck Lever
2014-04-21 22:01 ` [PATCH V2 04/17] xprtrdma: RPC/RDMA must invoke xprt_wake_pending_tasks() in process context Chuck Lever
2014-04-21 22:01 ` [PATCH V2 05/17] xprtrdma: Remove BOUNCEBUFFERS memory registration mode Chuck Lever
2014-04-21 22:01 ` [PATCH V2 06/17] xprtrdma: Remove MEMWINDOWS registration modes Chuck Lever
2014-04-21 22:01 ` [PATCH V2 07/17] xprtrdma: Remove REGISTER memory registration mode Chuck Lever
2014-04-21 22:01 ` [PATCH V2 08/17] xprtrdma: Fall back to MTHCAFMR when FRMR is not supported Chuck Lever
2014-04-21 22:02 ` [PATCH V2 09/17] xprtrdma: mount reports "Invalid mount option" if memreg mode " Chuck Lever
2014-04-21 22:02 ` Chuck Lever [this message]
2014-04-22  6:23   ` [PATCH V2 10/17] xprtrdma: Add CONFIG setting that can disable ALLPHYSICAL Christoph Hellwig
2014-04-23 10:24     ` Sagi Grimberg
2014-04-21 22:02 ` [PATCH V2 11/17] xprtrdma: Simplify rpcrdma_deregister_external() synopsis Chuck Lever
2014-04-21 22:02 ` [PATCH V2 12/17] xprtrdma: Make rpcrdma_ep_destroy() return void Chuck Lever
2014-04-21 22:02 ` [PATCH V2 13/17] xprtrdma: Split the completion queue Chuck Lever
2014-04-21 22:02 ` [PATCH V2 14/17] xprtrmda: Reduce lock contention in completion handlers Chuck Lever
2014-04-21 22:02 ` [PATCH V2 15/17] xprtrmda: Reduce calls to ib_poll_cq() " Chuck Lever
2014-04-21 22:03 ` [PATCH V2 16/17] xprtrdma: Limit work done by completion handler Chuck Lever
2014-04-23 10:15   ` Sagi Grimberg
2014-04-21 22:03 ` [PATCH V2 17/17] xprtrdma: Reduce the number of hardway buffer allocations Chuck Lever

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140421220214.12569.23157.stgit@manet.1015granger.net \
    --to=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).