mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Disallow setting a coordinator for a coordinator device.
The error code is based on the runc's behavior: ```shell # ip link set dev br0 master br0 Error: Can not enslave a bridge to a bridge. # echo $? 2 ``` Reported-by: syzbot+9dcefbdcc9ecdeb4df96@syzkaller.appspotmail.com PiperOrigin-RevId: 679761515
This commit is contained in:
@@ -48,7 +48,7 @@ func TestWritePacketFromBridge(t *testing.T) {
|
||||
bridgeEndpoint := stack.NewBridgeEndpoint(1500)
|
||||
bridgeEndpoint.SetLinkAddress(bridgeLinkAddr)
|
||||
if err := s.CreateNIC(bridgeID, bridgeEndpoint); err != nil {
|
||||
t.Fatalf("s.CreateNIC(%d, _): %s", nicID, err)
|
||||
t.Fatalf("s.CreateNIC(%d, _): %s", bridgeID, err)
|
||||
}
|
||||
if err := s.SetNICCoordinator(nicID, bridgeID); err != nil {
|
||||
t.Fatalf("s.SetNICCoordinator")
|
||||
@@ -106,7 +106,7 @@ func TestWritePacketBetweenDevices(t *testing.T) {
|
||||
bridgeEndpoint := stack.NewBridgeEndpoint(1500)
|
||||
bridgeEndpoint.SetLinkAddress(bridgeLinkAddr)
|
||||
if err := s.CreateNIC(bridgeID, bridgeEndpoint); err != nil {
|
||||
t.Fatalf("s.CreateNIC(%d, _): %s", nicID, err)
|
||||
t.Fatalf("s.CreateNIC(%d, _): %s", bridgeID, err)
|
||||
}
|
||||
|
||||
c := channel.New(1, header.EthernetMinimumSize, localLinkAddr)
|
||||
@@ -150,6 +150,23 @@ func TestWritePacketBetweenDevices(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetCoordinator(t *testing.T) {
|
||||
const (
|
||||
bridgeLinkAddr = tcpip.LinkAddress("\x02\x02\x03\x04\x05\x08")
|
||||
bridgeID = 6
|
||||
)
|
||||
|
||||
s := stack.New(stack.Options{})
|
||||
bridgeEndpoint := stack.NewBridgeEndpoint(1500)
|
||||
bridgeEndpoint.SetLinkAddress(bridgeLinkAddr)
|
||||
if err := s.CreateNIC(bridgeID, bridgeEndpoint); err != nil {
|
||||
t.Fatalf("s.CreateNIC(%d, _): %s", bridgeID, err)
|
||||
}
|
||||
if err := s.SetNICCoordinator(bridgeID, bridgeID); err == nil {
|
||||
t.Fatalf("s.SetNICCoordinator(%d, %d) = %s, want = %s", bridgeID, bridgeID, err, tcpip.ErrNoSuchFile{})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMTU(t *testing.T) {
|
||||
e := stack.NewBridgeEndpoint(1500)
|
||||
mtus := []uint32{1000, 2000}
|
||||
|
||||
@@ -1053,7 +1053,10 @@ func (s *Stack) SetNICCoordinator(id tcpip.NICID, mid tcpip.NICID) tcpip.Error {
|
||||
if !ok {
|
||||
return &tcpip.ErrUnknownNICID{}
|
||||
}
|
||||
|
||||
// Setting a coordinator for a coordinator NIC is not allowed.
|
||||
if _, ok := nic.NetworkLinkEndpoint.(CoordinatorNIC); ok {
|
||||
return &tcpip.ErrNoSuchFile{}
|
||||
}
|
||||
m, ok := s.nics[mid]
|
||||
if !ok {
|
||||
return &tcpip.ErrUnknownNICID{}
|
||||
|
||||
@@ -31,6 +31,10 @@ ip link add hveth1 type veth peer name veth1 netns test1
|
||||
ip link set up dev hveth0
|
||||
ip link set up dev hveth1
|
||||
|
||||
if ip link set br0 master br0; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ip link set hveth0 master br0
|
||||
ip link set hveth1 master br0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user