Prevent using zero as NICID.

PiperOrigin-RevId: 629890469
This commit is contained in:
Konstantin Bogomolov
2024-05-01 17:46:34 -07:00
committed by gVisor bot
parent 8ed5e07639
commit 52f1d31378
3 changed files with 27 additions and 1 deletions
+13
View File
@@ -274,6 +274,19 @@ func (*ErrDuplicateNICID) IgnoreStats() bool {
}
func (*ErrDuplicateNICID) String() string { return "duplicate nic id" }
// ErrInvalidNICID indicates the operation used an invalid NIC ID.
//
// +stateify savable
type ErrInvalidNICID struct{}
func (*ErrInvalidNICID) isError() {}
// IgnoreStats implements Error.
func (*ErrInvalidNICID) IgnoreStats() bool {
return false
}
func (*ErrInvalidNICID) String() string { return "invalid nic id" }
// ErrInvalidEndpointState indicates the endpoint is in an invalid state.
//
// +stateify savable
+3
View File
@@ -846,6 +846,9 @@ func (s *Stack) CreateNICWithOptions(id tcpip.NICID, ep LinkEndpoint, opts NICOp
s.mu.Lock()
defer s.mu.Unlock()
if id == 0 {
return &tcpip.ErrInvalidNICID{}
}
// Make sure id is unique.
if _, ok := s.nics[id]; ok {
return &tcpip.ErrDuplicateNICID{}
+11 -1
View File
@@ -2446,6 +2446,16 @@ func TestCreateNICWithOptions(t *testing.T) {
desc string
calls []callArgsAndExpect
}{
{
desc: "InvalidNICID",
calls: []callArgsAndExpect{
{
nicID: tcpip.NICID(0),
opts: stack.NICOptions{Name: "eth0"},
err: &tcpip.ErrInvalidNICID{},
},
},
},
{
desc: "DuplicateNICID",
calls: []callArgsAndExpect{
@@ -2544,7 +2554,7 @@ func TestNICStats(t *testing.T) {
var txBytesTotal, rxBytesTotal, txPacketsTotal, rxPacketsTotal int
for i, nic := range nics {
nicid := tcpip.NICID(i)
nicid := tcpip.NICID(i + 1)
ep := channel.New(1, defaultMTU, "")
if err := s.CreateNIC(nicid, ep); err != nil {
t.Fatal("CreateNIC failed: ", err)