Commit e78b1e49 authored by Mikio Hara's avatar Mikio Hara

ipv6: don't crash with corrupted control messages

Change-Id: I39f79ec43c73b2fcc90316713181940ada523150
Reviewed-on: https://go-review.googlesource.com/45114
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent ec5a957f
...@@ -129,14 +129,14 @@ func (cm *ControlMessage) Parse(b []byte) error { ...@@ -129,14 +129,14 @@ func (cm *ControlMessage) Parse(b []byte) error {
if lvl != iana.ProtocolIPv6 { if lvl != iana.ProtocolIPv6 {
continue continue
} }
switch typ { switch {
case ctlOpts[ctlTrafficClass].name: case typ == ctlOpts[ctlTrafficClass].name && l >= ctlOpts[ctlTrafficClass].length:
ctlOpts[ctlTrafficClass].parse(cm, m.Data(l)) ctlOpts[ctlTrafficClass].parse(cm, m.Data(l))
case ctlOpts[ctlHopLimit].name: case typ == ctlOpts[ctlHopLimit].name && l >= ctlOpts[ctlHopLimit].length:
ctlOpts[ctlHopLimit].parse(cm, m.Data(l)) ctlOpts[ctlHopLimit].parse(cm, m.Data(l))
case ctlOpts[ctlPacketInfo].name: case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length:
ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) ctlOpts[ctlPacketInfo].parse(cm, m.Data(l))
case ctlOpts[ctlPathMTU].name: case typ == ctlOpts[ctlPathMTU].name && l >= ctlOpts[ctlPathMTU].length:
ctlOpts[ctlPathMTU].parse(cm, m.Data(l)) ctlOpts[ctlPathMTU].parse(cm, m.Data(l))
} }
} }
......
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ipv6_test
import (
"testing"
"golang.org/x/net/ipv6"
)
func TestControlMessageParseWithFuzz(t *testing.T) {
var cm ipv6.ControlMessage
for _, fuzz := range []string{
"\f\x00\x00\x00)\x00\x00\x00.\x00\x00\x00",
"\f\x00\x00\x00)\x00\x00\x00,\x00\x00\x00",
} {
cm.Parse([]byte(fuzz))
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment