svn commit: r271673 - head/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Tue Sep 16 14:20:34 UTC 2014


Author: tuexen
Date: Tue Sep 16 14:20:33 2014
New Revision: 271673
URL: http://svnweb.freebsd.org/changeset/base/271673

Log:
  Use a consistent type for the number of HMAC algorithms.
  This fixes a bug which resulted in a warning on the userland
  stack, when compiled on Windows.
  Thanks to Peter Kasting from Google for reporting the issue and
  provinding a potential fix.
  
  MFC after: 3 days

Modified:
  head/sys/netinet/sctp_auth.c
  head/sys/netinet/sctp_auth.h
  head/sys/netinet/sctp_pcb.c
  head/sys/netinet/sctp_usrreq.c

Modified: head/sys/netinet/sctp_auth.c
==============================================================================
--- head/sys/netinet/sctp_auth.c	Tue Sep 16 13:48:46 2014	(r271672)
+++ head/sys/netinet/sctp_auth.c	Tue Sep 16 14:20:33 2014	(r271673)
@@ -631,7 +631,7 @@ sctp_copy_skeylist(const struct sctp_key
 
 
 sctp_hmaclist_t *
-sctp_alloc_hmaclist(uint8_t num_hmacs)
+sctp_alloc_hmaclist(uint16_t num_hmacs)
 {
 	sctp_hmaclist_t *new_list;
 	int alloc_size;
@@ -1438,8 +1438,8 @@ sctp_auth_get_cookie_params(struct sctp_
 			p_random = (struct sctp_auth_random *)phdr;
 			random_len = plen - sizeof(*p_random);
 		} else if (ptype == SCTP_HMAC_LIST) {
-			int num_hmacs;
-			int i;
+			uint16_t num_hmacs;
+			uint16_t i;
 
 			if (plen > sizeof(hmacs_store))
 				break;

Modified: head/sys/netinet/sctp_auth.h
==============================================================================
--- head/sys/netinet/sctp_auth.h	Tue Sep 16 13:48:46 2014	(r271672)
+++ head/sys/netinet/sctp_auth.h	Tue Sep 16 14:20:33 2014	(r271673)
@@ -154,7 +154,7 @@ sctp_auth_key_release(struct sctp_tcb *s
 
 
 /* hmac list handling */
-extern sctp_hmaclist_t *sctp_alloc_hmaclist(uint8_t num_hmacs);
+extern sctp_hmaclist_t *sctp_alloc_hmaclist(uint16_t num_hmacs);
 extern void sctp_free_hmaclist(sctp_hmaclist_t * list);
 extern int sctp_auth_add_hmacid(sctp_hmaclist_t * list, uint16_t hmac_id);
 extern sctp_hmaclist_t *sctp_copy_hmaclist(sctp_hmaclist_t * list);

Modified: head/sys/netinet/sctp_pcb.c
==============================================================================
--- head/sys/netinet/sctp_pcb.c	Tue Sep 16 13:48:46 2014	(r271672)
+++ head/sys/netinet/sctp_pcb.c	Tue Sep 16 14:20:33 2014	(r271673)
@@ -6509,8 +6509,8 @@ sctp_load_addresses_from_init(struct sct
 			}
 			got_random = 1;
 		} else if (ptype == SCTP_HMAC_LIST) {
-			int num_hmacs;
-			int i;
+			uint16_t num_hmacs;
+			uint16_t i;
 
 			if (plen > sizeof(hmacs_store))
 				break;

Modified: head/sys/netinet/sctp_usrreq.c
==============================================================================
--- head/sys/netinet/sctp_usrreq.c	Tue Sep 16 13:48:46 2014	(r271672)
+++ head/sys/netinet/sctp_usrreq.c	Tue Sep 16 14:20:33 2014	(r271673)
@@ -4208,12 +4208,13 @@ sctp_setopt(struct socket *so, int optna
 			uint32_t i;
 
 			SCTP_CHECK_AND_CAST(shmac, optval, struct sctp_hmacalgo, optsize);
-			if (optsize < sizeof(struct sctp_hmacalgo) + shmac->shmac_number_of_idents * sizeof(uint16_t)) {
+			if ((optsize < sizeof(struct sctp_hmacalgo) + shmac->shmac_number_of_idents * sizeof(uint16_t)) ||
+			    (shmac->shmac_number_of_idents > 0xffff)) {
 				SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
 				error = EINVAL;
 				break;
 			}
-			hmaclist = sctp_alloc_hmaclist(shmac->shmac_number_of_idents);
+			hmaclist = sctp_alloc_hmaclist((uint16_t) shmac->shmac_number_of_idents);
 			if (hmaclist == NULL) {
 				SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, ENOMEM);
 				error = ENOMEM;


More information about the svn-src-head mailing list