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

Commit 3c68198e authored by Neil Horman's avatar Neil Horman Committed by David S. Miller
Browse files

sctp: Make hmac algorithm selection for cookie generation dynamic



Currently sctp allows for the optional use of md5 of sha1 hmac algorithms to
generate cookie values when establishing new connections via two build time
config options.  Theres no real reason to make this a static selection.  We can
add a sysctl that allows for the dynamic selection of these algorithms at run
time, with the default value determined by the corresponding crypto library
availability.
This comes in handy when, for example running a system in FIPS mode, where use
of md5 is disallowed, but SHA1 is permitted.

Note: This new sysctl has no corresponding socket option to select the cookie
hmac algorithm.  I chose not to implement that intentionally, as RFC 6458
contains no option for this value, and I opted not to pollute the socket option
namespace.

Change notes:
v2)
	* Updated subject to have the proper sctp prefix as per Dave M.
	* Replaced deafult selection options with new options that allow
	  developers to explicitly select available hmac algs at build time
	  as per suggestion by Vlad Y.

Signed-off-by: default avatarNeil Horman <nhorman@tuxdriver.com>
CC: Vlad Yasevich <vyasevich@gmail.com>
CC: "David S. Miller" <davem@davemloft.net>
CC: netdev@vger.kernel.org
Acked-by: default avatarVlad Yasevich <vyasevich@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 342567cc
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1514,6 +1514,20 @@ cookie_preserve_enable - BOOLEAN

	Default: 1

cookie_hmac_alg - STRING
	Select the hmac algorithm used when generating the cookie value sent by
	a listening sctp socket to a connecting client in the INIT-ACK chunk.
	Valid values are:
	* md5
	* sha1
	* none
	Ability to assign md5 or sha1 as the selected alg is predicated on the
	configuarion of those algorithms at build time (CONFIG_CRYPTO_MD5 and
	CONFIG_CRYPTO_SHA1).

	Default: Dependent on configuration.  MD5 if available, else SHA1 if
	available, else none.

rcvbuf_policy - INTEGER
	Determines if the receive buffer is attributed to the socket or to
	association.   SCTP supports the capability to create multiple
+3 −0
Original line number Diff line number Diff line
@@ -62,6 +62,9 @@ struct netns_sctp {
	/* Whether Cookie Preservative is enabled(1) or not(0) */
	int cookie_preserve_enable;

	/* The namespace default hmac alg */
	char *sctp_hmac_alg;

	/* Valid.Cookie.Life	    - 60  seconds  */
	unsigned int valid_cookie_life;

+0 −8
Original line number Diff line number Diff line
@@ -312,14 +312,6 @@ enum { SCTP_MAX_GABS = 16 };
				 * functions simpler to write.
				 */

#if defined (CONFIG_SCTP_HMAC_MD5)
#define SCTP_COOKIE_HMAC_ALG "hmac(md5)"
#elif defined (CONFIG_SCTP_HMAC_SHA1)
#define SCTP_COOKIE_HMAC_ALG "hmac(sha1)"
#else
#define SCTP_COOKIE_HMAC_ALG NULL
#endif

/* These return values describe the success or failure of a number of
 * routines which form the lower interface to SCTP_outqueue.
 */
+1 −0
Original line number Diff line number Diff line
@@ -177,6 +177,7 @@ struct sctp_sock {

	/* Access to HMAC transform. */
	struct crypto_hash *hmac;
	char *sctp_hmac_alg;

	/* What is our base endpointer? */
	struct sctp_endpoint *ep;
+13 −26
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ menuconfig IP_SCTP
	select CRYPTO
	select CRYPTO_HMAC
	select CRYPTO_SHA1
	select CRYPTO_MD5 if SCTP_HMAC_MD5
	select LIBCRC32C
	---help---
	  Stream Control Transmission Protocol
@@ -68,33 +67,21 @@ config SCTP_DBG_OBJCNT

	  If unsure, say N

choice
	prompt "SCTP: Cookie HMAC Algorithm"
	default SCTP_HMAC_MD5
config SCTP_COOKIE_HMAC_MD5
	bool "Enable optional MD5 hmac cookie generation"
	help
	  HMAC algorithm to be used during association initialization.  It
	  is strongly recommended to use HMAC-SHA1 or HMAC-MD5.  See 
	  configuration for Cryptographic API and enable those algorithms
          to make usable by SCTP. 
	  Enable optional MD5 hmac based SCTP cookie generation
	default y
	select CRYPTO_HMAC if SCTP_COOKIE_HMAC_MD5
	select CRYPTO_MD5 if SCTP_COOKIE_HMAC_MD5

config SCTP_HMAC_NONE
	bool "None"
config SCTP_COOKIE_HMAC_SHA1
	bool "Enable optional SHA1 hmac cookie generation"
	help
	  Choosing this disables the use of an HMAC during association 
	  establishment.  It is advised to use either HMAC-MD5 or HMAC-SHA1.
	  Enable optional SHA1 hmac based SCTP cookie generation
	default y
	select CRYPTO_HMAC if SCTP_COOKIE_HMAC_SHA1
	select CRYPTO_SHA1 if SCTP_COOKIE_HMAC_SHA1

config SCTP_HMAC_SHA1
	bool "HMAC-SHA1"
	help 
	  Enable the use of HMAC-SHA1 during association establishment.  It 
	  is advised to use either HMAC-MD5 or HMAC-SHA1.

config SCTP_HMAC_MD5
	bool "HMAC-MD5"
	help
	  Enable the use of HMAC-MD5 during association establishment.  It is 
	  advised to use either HMAC-MD5 or HMAC-SHA1.

endchoice

endif # IP_SCTP
Loading