diff options
Diffstat (limited to 'rpc/rpc-transport/socket/src/socket.c')
| -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;  }  | 
