RMR params payload points to params msgbuf. Make sure that freed memory is not used 48/3848/1
authorJuha Hyttinen <juha.hyttinen@nokia.com>
Tue, 26 May 2020 12:12:47 +0000 (15:12 +0300)
committerJuha Hyttinen <juha.hyttinen@nokia.com>
Tue, 26 May 2020 12:13:31 +0000 (15:13 +0300)
Change-Id: I5dc09c9ff0ca907a23d49d7055a6ee9eaf351480
Signed-off-by: Juha Hyttinen <juha.hyttinen@nokia.com>
go.mod
go.sum
pkg/control/control.go
pkg/control/ut_test.go
pkg/teststub/controlRmrStub.go
pkg/teststub/rmrenv.go

diff --git a/go.mod b/go.mod
index 9b2386e..6410b0f 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,7 @@ module gerrit.o-ran-sc.org/r/ric-plt/submgr
 
 replace gerrit.o-ran-sc.org/r/ric-plt/sdlgo => gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2
 
-replace gerrit.o-ran-sc.org/r/ric-plt/xapp-frame => gerrit.o-ran-sc.org/r/ric-plt/xapp-frame.git v0.4.9
+replace gerrit.o-ran-sc.org/r/ric-plt/xapp-frame => gerrit.o-ran-sc.org/r/ric-plt/xapp-frame.git v0.4.11
 
 replace gerrit.o-ran-sc.org/r/com/golog => gerrit.o-ran-sc.org/r/com/golog.git v0.0.1
 
diff --git a/go.sum b/go.sum
index 0563736..2186933 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -3,16 +3,16 @@ gerrit.o-ran-sc.org/r/com/golog.git v0.0.1 h1:9RfO/Whehaaq5KiJTT7s+YOzmi9mT1C3Hk
 gerrit.o-ran-sc.org/r/com/golog.git v0.0.1/go.mod h1:b8YB31U8/4iRpABioeSzGi/YMzOQ/Zq7hrJmmXKqlJk=
 gerrit.o-ran-sc.org/r/ric-plt/alarm-go.git/alarm v0.4.2 h1:XNfkp3PwZ7pfkPszX7NaX6DzToCGjcWTLbIHYqCFNu0=
 gerrit.o-ran-sc.org/r/ric-plt/alarm-go.git/alarm v0.4.2/go.mod h1:AdEWKtERGvOQy9ybLhyhrb9w9LLVn8i9xzTwoR5n4BY=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.21 h1:eK9nUZOTMJ/EnMpH9bkWtMgOvCn3u4+PNCb9gu10s6w=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.21/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.21 h1:PQ/Mu2ol+8Oh/0BqCWWhPlVVoRCg5dQDEGm4+Opp5w4=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.21/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.21 h1:N3UbqJ9WqC8JEz/TwHHwZwCFAW6VTlZLpD5lnbdD+Y8=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.21/go.mod h1:SQBZLy1HP94i1vQ3y730wGFsrHqZtgPaEkzPgtqBNw0=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.35 h1:TGXHb4DNY8on+ej4S9VUnk2HibIC/5chDy64OE+bQBQ=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.35/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.35 h1:tkM3yE8UzmuH4nf9TqAmiNBSuIZ2CtcMRH2eBIYIzpQ=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.35/go.mod h1:G+4sUBMbLfQ+RrGS65U15tKmbnP+/1b5oLTPmMfyfT4=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.35 h1:LcxnUUDwsCzYEISKmkjkyYfg/lnLt8ofkPiGK69vNIA=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.35/go.mod h1:2bSaXTpECbZieB8bMnubTqMwF3n+mMBxlTaAXvcduNg=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2 h1:UK7awyRKIkVdokWvvkYvazlg3EWIfMnIqCcJxTnLlDA=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2/go.mod h1:y2WhrCvdLkAKdH+ySdHSOSehACJkTMyZghCGVcqoZzc=
-gerrit.o-ran-sc.org/r/ric-plt/xapp-frame.git v0.4.9 h1:ceyAhNmrbmhG7HnMjJRZCFQSI6T9YStC1G0sn48YOzs=
-gerrit.o-ran-sc.org/r/ric-plt/xapp-frame.git v0.4.9/go.mod h1:KW8iIt4GdHJHEHmVlSiz95rL4cLoWSIF3OmPeShRR/s=
+gerrit.o-ran-sc.org/r/ric-plt/xapp-frame.git v0.4.11 h1:XDdMGircM79SJ7FD+GEw60qK6RfdfEtyvO88VcoYt+s=
+gerrit.o-ran-sc.org/r/ric-plt/xapp-frame.git v0.4.11/go.mod h1:bjhhEII07w+zPQzyvqTq84TjKQPa6IkcnSyWB1DfGHo=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
@@ -127,8 +127,8 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
index 4978a8d..35e39f4 100755 (executable)
@@ -191,6 +191,16 @@ func (c *Control) Consume(params *xapp.RMRParams) (err error) {
 
        defer c.Rmr.Free(msg.Mbuf)
 
+       // xapp-frame might use direct access to c buffer and
+       // when msg.Mbuf is freed, someone might take it into use
+       // and payload data might be invalid inside message handle function
+       //
+       // subscriptions won't load system a lot so there is no
+       // real performance hit by cloning buffer into new go byte slice
+       cPay := append(msg.Payload[:0:0], msg.Payload...)
+       msg.Payload = cPay
+       msg.PayloadLen = len(cPay)
+
        switch msg.Mtype {
        case xapp.RIC_SUB_REQ:
                go c.handleXAPPSubscriptionRequest(msg)
index c0c3b72..baedbae 100644 (file)
@@ -38,6 +38,11 @@ func CaseBegin(desc string) *teststub.TestWrapper {
        return tent
 }
 
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+const teststubPortSeed int = 55555
+
 //-----------------------------------------------------------------------------
 //
 //-----------------------------------------------------------------------------
@@ -51,7 +56,7 @@ var mainCtrl *testingSubmgrControl
 
 var dummystub *teststubdummy.RmrDummyStub
 
-func ut_test_init() {
+func ut_test_init() func() {
        tent := CaseBegin("ut_test_init")
 
        //---------------------------------
@@ -108,7 +113,7 @@ func ut_test_init() {
        //       If XID is not matching xapp stub will just
        //       drop message. (Messages 12011, 12012, 12021, 12022)
        //
-       // NOTE2: 55555 message type is for stub rmr connectivity probing
+       // NOTE2: teststubPortSeed message type is for stub rmr connectivity probing
        //
        // NOTE3: Ports per entity:
        //
@@ -140,13 +145,12 @@ func ut_test_init() {
        rt.AddRoute(12022, e2term2src.String(), -1, mainsrc.String())
        rt.AddRoute(12021, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
        rt.AddRoute(12022, mainsrc.String(), -1, xapp2src.String()+";"+xapp1src.String())
-       rt.AddRoute(55555, "", -1, xapp2src.String()+";"+xapp1src.String()+";"+e2term1src.String()+";"+e2term2src.String()+";"+dummysrc.String())
+       rt.AddRoute(teststubPortSeed, "", -1, xapp2src.String()+";"+xapp1src.String()+";"+e2term1src.String()+";"+e2term2src.String()+";"+dummysrc.String())
 
        rt.AddMeid(e2term1src.String(), []string{"RAN_NAME_1", "RAN_NAME_2"})
        rt.AddMeid(e2term2src.String(), []string{"RAN_NAME_11", "RAN_NAME_12"})
 
        rt.Enable()
-       defer rt.Disable()
        tent.Logger.Info("rttable[%s]", rt.Table())
 
        //---------------------------------
@@ -168,8 +172,8 @@ func ut_test_init() {
                } else {
                        tent.Logger.Info("Alarm has alternated RMR_SEED_RT=%s, so waiting 0.5 secs before restoring it", os.Getenv("RMR_SEED_RT"))
                        time.Sleep(500 * time.Millisecond)
-                       rt.Disable()
                        rt.Enable()
+                       tent.Logger.Info("rttable[%s]", rt.Table())
                        break
                }
        }
@@ -183,36 +187,36 @@ func ut_test_init() {
        //
        //---------------------------------
        tent.Logger.Info("### xapp1 stub run ###")
-       xappConn1 = teststube2ap.CreateNewE2Stub("xappstub1", xapp1src, teststub.RmrRtgSvc{}, "RMRXAPP1STUB", 55555)
+       xappConn1 = teststube2ap.CreateNewE2Stub("xappstub1", xapp1src, teststub.RmrRtgSvc{}, "RMRXAPP1STUB", teststubPortSeed)
 
        //---------------------------------
        //
        //---------------------------------
        tent.Logger.Info("### xapp2 stub run ###")
-       xappConn2 = teststube2ap.CreateNewE2Stub("xappstub2", xapp2src, teststub.RmrRtgSvc{}, "RMRXAPP2STUB", 55555)
+       xappConn2 = teststube2ap.CreateNewE2Stub("xappstub2", xapp2src, teststub.RmrRtgSvc{}, "RMRXAPP2STUB", teststubPortSeed)
 
        //---------------------------------
        //
        //---------------------------------
        tent.Logger.Info("### e2term1 stub run ###")
-       e2termConn1 = teststube2ap.CreateNewE2termStub("e2termstub1", e2term1src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB1", 55555)
+       e2termConn1 = teststube2ap.CreateNewE2termStub("e2termstub1", e2term1src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB1", teststubPortSeed)
 
        //---------------------------------
        //
        //---------------------------------
        tent.Logger.Info("### e2term2 stub run ###")
-       e2termConn2 = teststube2ap.CreateNewE2termStub("e2termstub2", e2term2src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB2", 55555)
+       e2termConn2 = teststube2ap.CreateNewE2termStub("e2termstub2", e2term2src, teststub.RmrRtgSvc{}, "RMRE2TERMSTUB2", teststubPortSeed)
 
        //---------------------------------
        // Just to test dummy stub
        //---------------------------------
        tent.Logger.Info("### dummy stub run ###")
-       dummystub = teststubdummy.CreateNewRmrDummyStub("dummystub", dummysrc, teststub.RmrRtgSvc{}, "DUMMYSTUB", 55555)
+       dummystub = teststubdummy.CreateNewRmrDummyStub("dummystub", dummysrc, teststub.RmrRtgSvc{}, "DUMMYSTUB", teststubPortSeed)
 
        //---------------------------------
        // Testing message sending
        //---------------------------------
-       if teststub.RmrStubControlWaitAlive(10, 55555, mainCtrl.c) == false {
+       if teststub.RmrStubControlWaitAlive(10, teststubPortSeed, mainCtrl.c) == false {
                os.Exit(1)
        }
 
@@ -221,6 +225,7 @@ func ut_test_init() {
                os.Exit(1)
        }
 
+       return func() { rt.Disable() }
 }
 
 //-----------------------------------------------------------------------------
@@ -228,7 +233,8 @@ func ut_test_init() {
 //-----------------------------------------------------------------------------
 func TestMain(m *testing.M) {
        CaseBegin("TestMain start")
-       ut_test_init()
+       cleanfn := ut_test_init()
        code := m.Run()
+       cleanfn()
        os.Exit(code)
 }
index 0f207e8..958b8b8 100644 (file)
@@ -88,6 +88,10 @@ func (tc *RmrStubControl) Consume(params *xapp.RMRParams) (err error) {
        msg := xapptweaks.NewParams(params)
        tc.CntRecvMsg++
 
+       cPay := append(msg.Payload[:0:0], msg.Payload...)
+       msg.Payload = cPay
+       msg.PayloadLen = len(cPay)
+
        if msg.Mtype == tc.InitMsg {
                tc.Logger.Info("Testing message ignore %s", msg.String())
                tc.SetActive()
index 5a57b56..cf1e284 100644 (file)
@@ -53,9 +53,9 @@ func (rrt *RmrRouteTable) AddRoute(mtype int, src string, subid int, trg string)
 func (rrt *RmrRouteTable) AddMeid(trg string, meids []string) {
 
        line := "mme_ar"
-       line += "|"
+       line += " | "
        line += trg
-       line += "|"
+       line += " | "
        for _, str := range meids {
                line += " " + str
        }
@@ -65,7 +65,7 @@ func (rrt *RmrRouteTable) AddMeid(trg string, meids []string) {
 func (rrt *RmrRouteTable) DelMeid(meids []string) {
 
        line := "mme_del"
-       line += "|"
+       line += " | "
        for _, str := range meids {
                line += " " + str
        }
@@ -82,6 +82,7 @@ func (rrt *RmrRouteTable) Table() string {
                allrt += val + "\n"
        }
        allrt += "newrt|end\n"
+       allrt += "\n"
        allrt += "meid_map | start\n"
        for _, val := range rrt.meids {
                allrt += val + "\n"
@@ -91,11 +92,11 @@ func (rrt *RmrRouteTable) Table() string {
 }
 
 func (rrt *RmrRouteTable) Enable() {
-       if len(rrt.tmpfile) > 0 {
-               os.Remove(rrt.tmpfile)
+       if len(rrt.tmpfile) == 0 {
+               rrt.tmpfile, _ = CreateTmpFile(rrt.Table())
        }
-       rrt.tmpfile, _ = CreateTmpFile(rrt.Table())
        os.Setenv("RMR_SEED_RT", rrt.tmpfile)
+       os.Setenv("RMR_RTG_SVC", "-1")
        xapp.Logger.Info("Using rt file %s", os.Getenv("RMR_SEED_RT"))
 }
 
@@ -103,6 +104,7 @@ func (rrt *RmrRouteTable) Disable() {
        if len(rrt.tmpfile) > 0 {
                os.Remove(rrt.tmpfile)
                os.Unsetenv("RMR_SEED_RT")
+               os.Unsetenv("RMR_RTG_SVC")
                rrt.tmpfile = ""
                xapp.Logger.Info("Not using rt file ")
        }