mirror of
https://github.com/ipxe/ipxe
synced 2025-12-21 20:40:25 +03:00
Clarified packet ownership transfer between a few functions.
Added a large number of missing calls to free_pkb(). In the case of UDP, no received packets were ever freed, which lead to memory exhaustion remarkably quickly once pxelinux started up. In general, any function with _rx() in its name which accepts a pk_buff *must* either call free_pkb() or pass the pkb to another _rx() function (e.g. the next layer up the stack). Since the UDP (and TCP) layers don't pass packet buffers up to the higher-layer protocols (the "applications"), they must free the packet buffer after calling the application's newdata() method.
This commit is contained in:
@@ -54,6 +54,7 @@ int tcpip_rx ( struct pk_buff *pkb, uint8_t tcpip_proto,
|
||||
}
|
||||
|
||||
DBG ( "Unrecognised TCP/IP protocol %d\n", tcpip_proto );
|
||||
free_pkb ( pkb );
|
||||
return -EPROTONOSUPPORT;
|
||||
}
|
||||
|
||||
@@ -78,6 +79,7 @@ int tcpip_tx ( struct pk_buff *pkb, struct tcpip_protocol *tcpip_protocol,
|
||||
}
|
||||
|
||||
DBG ( "Unrecognised TCP/IP address family %d\n", st_dest->st_family );
|
||||
free_pkb ( pkb );
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user