ping: limit ICMP read buffer size
This commit is contained in:
parent
bebc8d67f3
commit
1aa83a9f92
3 changed files with 6 additions and 3 deletions
|
|
@ -17,6 +17,9 @@ import (
|
|||
"github.com/sagernet/sing/common/logger"
|
||||
)
|
||||
|
||||
// Although its theoretical maximum may be 64k, I don’t yet know of any practical use case for that. For memory-usage reasons, I’m just using a 2k buffer.
|
||||
const maxICMPPacketSize = 2048
|
||||
|
||||
var _ tun.DirectRouteDestination = (*Destination)(nil)
|
||||
|
||||
type Destination struct {
|
||||
|
|
@ -77,7 +80,7 @@ func ConnectDestination(
|
|||
func (d *Destination) loopRead() {
|
||||
defer d.Close()
|
||||
for {
|
||||
buffer := buf.NewPacket()
|
||||
buffer := buf.NewSize(maxICMPPacketSize)
|
||||
err := d.conn.SetReadDeadline(time.Now().Add(d.timeout))
|
||||
if err != nil {
|
||||
d.logger.ErrorContext(d.ctx, E.Cause(err, "set read deadline for ICMP conn"))
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ func ConnectGVisor(
|
|||
func (d *GVisorDestination) loopRead() {
|
||||
defer d.endpoint.Close()
|
||||
for {
|
||||
buffer := buf.NewPacket()
|
||||
buffer := buf.NewSize(maxICMPPacketSize)
|
||||
err := d.conn.SetReadDeadline(time.Now().Add(d.timeout))
|
||||
if err != nil {
|
||||
d.logger.ErrorContext(d.ctx, E.Cause(err, "set read deadline for ICMP conn"))
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ func (c *UnprivilegedConn) fetchResponse(conn *net.UDPConn, identifier uint16) {
|
|||
return
|
||||
}
|
||||
}
|
||||
buffer := buf.NewPacket()
|
||||
buffer := buf.NewSize(maxICMPPacketSize)
|
||||
cmsgBuffer := buf.NewSize(1024)
|
||||
n, oobN, _, addr, err := conn.ReadMsgUDPAddrPort(buffer.FreeBytes(), cmsgBuffer.FreeBytes())
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue