summaryrefslogtreecommitdiffstats
path: root/rpc/rpc-transport/socket/src/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'rpc/rpc-transport/socket/src/socket.c')
-rw-r--r--rpc/rpc-transport/socket/src/socket.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index e969a5cf7fd..94b243bab15 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -847,6 +847,7 @@ __socket_reset (rpc_transport_t *this)
if (priv->incoming.iobuf) {
iobuf_unref (priv->incoming.iobuf);
+ priv->incoming.iobuf = NULL;
}
GF_FREE (priv->incoming.request_info);
@@ -1899,10 +1900,10 @@ out:
}
-static inline
-void __socket_reset_priv (socket_private_t *priv)
+static inline void
+__socket_reset_priv (socket_private_t *priv)
{
- struct gf_sock_incoming *in = NULL;
+ struct gf_sock_incoming *in = NULL;
/* used to reduce the indirection */
in = &priv->incoming;
@@ -1914,6 +1915,7 @@ void __socket_reset_priv (socket_private_t *priv)
if (in->iobuf) {
iobuf_unref (in->iobuf);
+ in->iobuf = NULL;
}
if (in->request_info != NULL) {
@@ -1924,7 +1926,6 @@ void __socket_reset_priv (socket_private_t *priv)
memset (&in->payload_vector, 0,
sizeof (in->payload_vector));
- in->iobuf = NULL;
}
@@ -1987,6 +1988,12 @@ __socket_proto_state_machine (rpc_transport_t *this,
in->fraghdr = ntoh32 (in->fraghdr);
in->total_bytes_read += RPC_FRAGSIZE(in->fraghdr);
+
+ if (in->total_bytes_read >= GF_UNIT_GB) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
iobuf = iobuf_get2 (this->ctx->iobuf_pool,
(in->total_bytes_read +
sizeof (in->fraghdr)));
@@ -2087,6 +2094,7 @@ out:
if ((ret == -1) && (errno == EAGAIN)) {
ret = 0;
}
+
return ret;
}