From 620bb97e3ff1f1ef504228fbc2a2005eb0367b7a Mon Sep 17 00:00:00 2001 From: liangxianlong Date: Thu, 13 Jan 2022 14:48:10 +0800 Subject: [PATCH] runtime: Provide protection for shared data The k.reqHandlers should be protected by locks when used Fixes #3440 Signed-off-by: liangxianlong --- src/runtime/virtcontainers/kata_agent.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/runtime/virtcontainers/kata_agent.go b/src/runtime/virtcontainers/kata_agent.go index cd0336ee8d..ebfbb6df99 100644 --- a/src/runtime/virtcontainers/kata_agent.go +++ b/src/runtime/virtcontainers/kata_agent.go @@ -2068,10 +2068,20 @@ func (k *kataAgent) sendReq(spanCtx context.Context, request interface{}) (inter } msgName := proto.MessageName(request.(proto.Message)) + + k.Lock() + + if k.reqHandlers == nil { + return nil, errors.New("Client has already disconnected") + } + handler := k.reqHandlers[msgName] if msgName == "" || handler == nil { return nil, errors.New("Invalid request type") } + + k.Unlock() + message := request.(proto.Message) ctx, cancel := k.getReqContext(spanCtx, msgName) if cancel != nil {