mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Fix error handling for bad message sizes.
The message size check is legitimate: the size must be negotiated, which relies on the fixed message limit up front. Sending a message larger than that indicates that the connection is out of sync and is considered a socket error (disconnect). Similarly, sending a size that is too small indicates that the stream is out-of-sync or invalid. PiperOrigin-RevId: 207996551 Change-Id: Icd8b513d5307e9d5953dbb957ee70ceea111098d
This commit is contained in:
+2
-2
@@ -206,11 +206,11 @@ func recv(s *unet.Socket, msize uint32, lookup lookupTagAndType) (Tag, message,
|
||||
// The message is too small.
|
||||
//
|
||||
// See above: it's probably screwed.
|
||||
return NoTag, nil, ErrNoValidMessage
|
||||
return NoTag, nil, ErrSocket{ErrNoValidMessage}
|
||||
}
|
||||
if size > maximumLength || size > msize {
|
||||
// The message is too big.
|
||||
return NoTag, nil, &ErrMessageTooLarge{size, msize}
|
||||
return NoTag, nil, ErrSocket{&ErrMessageTooLarge{size, msize}}
|
||||
}
|
||||
remaining := size - headerLength
|
||||
|
||||
|
||||
@@ -73,8 +73,8 @@ func TestRecvOverrun(t *testing.T) {
|
||||
t.Fatalf("send got err %v expected nil", err)
|
||||
}
|
||||
|
||||
if _, _, err := recv(server, maximumLength, messageByType); err != ErrNoValidMessage {
|
||||
t.Fatalf("recv got err %v expected ErrNoValidMessage", err)
|
||||
if _, _, err := recv(server, maximumLength, messageByType); err == nil {
|
||||
t.Fatalf("recv got err %v expected ErrSocket{ErrNoValidMessage}", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user