All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v2 0/3] cifs: introduce support for AES-GMAC signing
@ 2022-08-29 21:33 Enzo Matsumiya
  2022-08-29 21:33 ` [RFC PATCH v2 1/3] cifs: introduce AES-GMAC signing support for SMB 3.1.1 Enzo Matsumiya
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Enzo Matsumiya @ 2022-08-29 21:33 UTC (permalink / raw)
  To: linux-cifs; +Cc: smfrench, pc, ronniesahlberg, nspmangalore

Hi,

This patch series introduce the support for AES-GMAC signing for SMB 3.1.1,
when the negotiate signing context is successfully negotiated.

This is an implementation of the MS-SMB2 spec, section 3.1.4.1 "Signing An
Outgoing Message".

AES-GMAC uses AES-128-GCM (kernel crypto algorithm "gcm(aes)" from the gcm
module) as its base.

AES-GCM, an authenticated encryption algorithm, takes 4 inputs for encryption:
1. a secret key
2. an initialization vector (IV), or nonce
3. the plaintext data (the message to be encrypted)
4. an extra buffer called Additional Authenticated data (AAD), or sometimes
   Associated Data (AD)

Superficially describing it, it encrypts the plaintext using the key and then
uses the nonce to generate an authentication tag (our signature, in this
context).  It then produces 2 outputs; the encrypted data, along with its
computed authentication tag.  The AAD buffer is left intact.

Because of this design, AES-GCM can be used to "encrypt" an empty plaintext
buffer, and still run its authentication generation algorithm over the AAD
buffer (which is set to our SMB2 message), making it practically a MAC
algorithm.

Compared to AES-CMAC, AES-GMAC has shown (*) to be much faster because its
internal authentication algorithm can be paralellized by taking advantage of
especialized, optimized CPU instructions (on certain supported platforms).

With these patches, I hope cifs.ko can get a performance improvemente when
AES-GMAC is used for message signing.

Patch 1/3: add the core functions to perform AES-GMAC signing (see commit
	   message for more details)
Patch 2/3: set the "enable_negotiate_signing" module param as deprecated,
	   making cifs.ko always try to negotiate AES-GMAC first, but use
	   AES-CMAC if fail
Patch 3/3: show the signing algorithm name being used in DebugData

To do/discuss:
- serious benchmark and comparison (vs AES-CMAC) on cifs.ko workloads (*)
- complete removal of "enable_negotiate_signing" module param
- RDMA/SMB Direct; I have no experience with it, nor an RDMA-capable setup
- bugs?

Any kind of feedback is welcome.


Cheers,

Enzo Matsumiya (3):
  cifs: introduce AES-GMAC signing support for SMB 3.1.1
  cifs: deprecate 'enable_negotiate_signing' module param
  cifs: show signing algorithm name in DebugData

 fs/cifs/cifs_debug.c    |   7 +-
 fs/cifs/cifsencrypt.c   |   5 +
 fs/cifs/cifsfs.c        |   8 +-
 fs/cifs/cifsglob.h      |  12 +-
 fs/cifs/sess.c          |   2 +
 fs/cifs/smb2glob.h      |  10 +
 fs/cifs/smb2misc.c      |   6 +
 fs/cifs/smb2ops.c       | 484 +++++++++++++++++++++++++++++++++-------
 fs/cifs/smb2pdu.c       |  97 ++++++--
 fs/cifs/smb2proto.h     |   7 +-
 fs/cifs/smb2transport.c |  87 ++++++--
 11 files changed, 592 insertions(+), 133 deletions(-)

-- 
2.35.3


^ permalink raw reply	[flat|nested] 10+ messages in thread
* Re: [RFC PATCH v2 1/3] cifs: introduce AES-GMAC signing support for SMB 3.1.1
  2022-08-29 21:33 ` [RFC PATCH v2 1/3] cifs: introduce AES-GMAC signing support for SMB 3.1.1 Enzo Matsumiya
@ 2022-08-31  5:58 ` Dan Carpenter
  2022-09-14  4:07   ` Stefan Metzmacher
  1 sibling, 0 replies; 10+ messages in thread
From: kernel test robot @ 2022-08-30 21:27 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 4985 bytes --]

BCC: lkp(a)intel.com
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20220829213354.2714-2-ematsumiya@suse.de>
References: <20220829213354.2714-2-ematsumiya@suse.de>
TO: Enzo Matsumiya <ematsumiya@suse.de>

Hi Enzo,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on cifs/for-next]
[also build test WARNING on linus/master v6.0-rc3 next-20220830]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Enzo-Matsumiya/cifs-introduce-support-for-AES-GMAC-signing/20220830-053851
base:   git://git.samba.org/sfrench/cifs-2.6.git for-next
:::::: branch date: 24 hours ago
:::::: commit date: 24 hours ago
config: x86_64-randconfig-m001 (https://download.01.org/0day-ci/archive/20220831/202208310526.DwSOBsS4-lkp(a)intel.com/config)
compiler: gcc-11 (Debian 11.3.0-5) 11.3.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
fs/cifs/smb2transport.c:666 smb2_verify_signature() warn: impossible condition '(shdr->Command == 18446744073709551615) => (0-u16max == u64max)'

vim +666 fs/cifs/smb2transport.c

3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  654  
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  655  int
0b688cfc8b3472 Jeff Layton     2012-09-18  656  smb2_verify_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server)
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  657  {
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  658  	unsigned int rc;
edad734c74a4ab Steve French    2020-03-27  659  	char server_response_sig[SMB2_SIGNATURE_SIZE];
0d35e382e4e96a Ronnie Sahlberg 2021-11-05  660  	struct smb2_hdr *shdr =
0d35e382e4e96a Ronnie Sahlberg 2021-11-05  661  			(struct smb2_hdr *)rqst->rq_iov[0].iov_base;
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  662  
31473fc4f9653b Pavel Shilovsky 2016-10-24  663  	if ((shdr->Command == SMB2_NEGOTIATE) ||
31473fc4f9653b Pavel Shilovsky 2016-10-24  664  	    (shdr->Command == SMB2_SESSION_SETUP) ||
31473fc4f9653b Pavel Shilovsky 2016-10-24  665  	    (shdr->Command == SMB2_OPLOCK_BREAK) ||
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29 @666  	    (shdr->Command == 0xFFFFFFFFFFFFFFFF) || /* MS-SMB2 3.2.5.1.3 */
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  667  	    (shdr->Status == STATUS_PENDING) || /* MS-SMB2 3.2.5.1.3 */
4f5c10f1ad45ae Steve French    2019-09-03  668  	    server->ignore_signature ||
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  669  	    (!server->session_estab))
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  670  		return 0;
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  671  
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  672  	/*
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  673  	 * BB what if signatures are supposed to be on for session but
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  674  	 * server does not send one? BB
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  675  	 */
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  676  
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  677  	/*
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  678  	 * Save off the origiginal signature so we can modify the smb and check
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  679  	 * our calculated signature against what the server sent.
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  680  	 */
31473fc4f9653b Pavel Shilovsky 2016-10-24  681  	memcpy(server_response_sig, shdr->Signature, SMB2_SIGNATURE_SIZE);
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  682  
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  683  	/*
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  684  	 * all implementations of ->calc_signature() will zero shdr->Signature
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  685  	 * before computing it
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  686  	 */
eda1c54f148a86 Long Li         2020-03-31  687  	rc = server->ops->calc_signature(rqst, server, true);
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  688  	if (rc)
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  689  		return rc;
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  690  
f460c502747305 Steve French    2020-03-29  691  	if (memcmp(server_response_sig, shdr->Signature, SMB2_SIGNATURE_SIZE)) {
9692ea9d3288a2 Steve French    2020-04-15  692  		cifs_dbg(VFS, "sign fail cmd 0x%x message id 0x%llx\n",
9692ea9d3288a2 Steve French    2020-04-15  693  			shdr->Command, shdr->MessageId);
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  694  		return -EACCES;
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  695  	}
df3d3cd4e3d4e8 Enzo Matsumiya  2022-08-29  696  
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  697  	return 0;
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  698  }
3c1bf7e48e9e46 Pavel Shilovsky 2012-09-18  699  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-09-14 14:48 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-29 21:33 [RFC PATCH v2 0/3] cifs: introduce support for AES-GMAC signing Enzo Matsumiya
2022-08-29 21:33 ` [RFC PATCH v2 1/3] cifs: introduce AES-GMAC signing support for SMB 3.1.1 Enzo Matsumiya
2022-08-30 15:49   ` kernel test robot
2022-09-14  4:07   ` Stefan Metzmacher
2022-09-14 14:32     ` Enzo Matsumiya
2022-09-14 14:47       ` Stefan Metzmacher
2022-08-29 21:33 ` [RFC PATCH v2 2/3] cifs: deprecate 'enable_negotiate_signing' module param Enzo Matsumiya
2022-08-29 21:33 ` [RFC PATCH v2 3/3] cifs: show signing algorithm name in DebugData Enzo Matsumiya
2022-08-30 21:27 [RFC PATCH v2 1/3] cifs: introduce AES-GMAC signing support for SMB 3.1.1 kernel test robot
2022-08-31  5:58 ` Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.