diff --git a/homa_incoming.c b/homa_incoming.c index bb1e365c..55d412f9 100644 --- a/homa_incoming.c +++ b/homa_incoming.c @@ -44,7 +44,7 @@ int homa_message_in_init(struct homa_rpc *rpc, int length) { int err; - if (((unsigned int)length) > HOMA_MAX_MESSAGE_LENGTH) + if (length == 0 || ((unsigned int)length) > HOMA_MAX_MESSAGE_LENGTH) return -EINVAL; rpc->msgin.length = length; diff --git a/test/unit_homa_incoming.c b/test/unit_homa_incoming.c index 5471ed41..acf9820b 100644 --- a/test/unit_homa_incoming.c +++ b/test/unit_homa_incoming.c @@ -180,6 +180,15 @@ TEST_F(homa_incoming, homa_message_in_init__negative_message_length) ASSERT_TRUE(IS_ERR(srpc)); EXPECT_EQ(EINVAL, -PTR_ERR(srpc)); } +TEST_F(homa_incoming, homa_message_in_init__zero_message_length) +{ + struct homa_rpc *srpc; + + self->data.msg_length = htonl(0); + srpc = homa_rpc_alloc_server(&self->hsk, self->client_ip, &self->data.common); + ASSERT_TRUE(IS_ERR(srpc)); + EXPECT_EQ(EINVAL, -PTR_ERR(srpc)); +} TEST_F(homa_incoming, homa_message_in_init__no_buffer_region) { struct homa_rpc *crpc = unit_client_rpc(&self->hsk,