diff options
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 16 |
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; } |