summaryrefslogtreecommitdiffstats
path: root/sys/rpc
diff options
context:
space:
mode:
authorgnn <gnn@FreeBSD.org>2013-04-04 15:16:53 +0000
committergnn <gnn@FreeBSD.org>2013-04-04 15:16:53 +0000
commitea724ef317ac5207f69f4849283592a0ad824494 (patch)
treefc73cfc19943f8335d8f14a0409240fa3cc041a8 /sys/rpc
parent5d62c483f5b2e47bc1004c2a6fcbea2bcbed6db4 (diff)
downloadFreeBSD-src-ea724ef317ac5207f69f4849283592a0ad824494.zip
FreeBSD-src-ea724ef317ac5207f69f4849283592a0ad824494.tar.gz
Improve error handling when unwrapping received data.
Submitted by: Rick Macklem MFC after: 1 week
Diffstat (limited to 'sys/rpc')
-rw-r--r--sys/rpc/rpcsec_gss/rpcsec_gss_prot.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/rpc/rpcsec_gss/rpcsec_gss_prot.c b/sys/rpc/rpcsec_gss/rpcsec_gss_prot.c
index a50c4fa..90c6fe2 100644
--- a/sys/rpc/rpcsec_gss/rpcsec_gss_prot.c
+++ b/sys/rpc/rpcsec_gss/rpcsec_gss_prot.c
@@ -208,6 +208,8 @@ m_trim(struct mbuf *m, int len)
struct mbuf *n;
int off;
+ if (m == NULL)
+ return;
n = m_getptr(m, len, &off);
if (n) {
n->m_len = off;
@@ -251,10 +253,19 @@ xdr_rpc_gss_unwrap_data(struct mbuf **resultsp,
* Extract the MIC and make it contiguous.
*/
cklen = get_uint32(&results);
+ if (!results) {
+ m_freem(message);
+ return (FALSE);
+ }
KASSERT(cklen <= MHLEN, ("unexpected large GSS-API checksum"));
mic = results;
- if (cklen > mic->m_len)
+ if (cklen > mic->m_len) {
mic = m_pullup(mic, cklen);
+ if (!mic) {
+ m_freem(message);
+ return (FALSE);
+ }
+ }
if (cklen != RNDUP(cklen))
m_trim(mic, cklen);
@@ -272,6 +283,8 @@ xdr_rpc_gss_unwrap_data(struct mbuf **resultsp,
} else if (svc == rpc_gss_svc_privacy) {
/* Decode databody_priv. */
len = get_uint32(&results);
+ if (!results)
+ return (FALSE);
/* Decrypt databody. */
message = results;
@@ -294,6 +307,8 @@ xdr_rpc_gss_unwrap_data(struct mbuf **resultsp,
/* Decode rpc_gss_data_t (sequence number + arguments). */
seq_num = get_uint32(&message);
+ if (!message)
+ return (FALSE);
/* Verify sequence number. */
if (seq_num != seq) {
OpenPOWER on IntegriCloud