📌 Understanding Buffer Overflow Errors in Linux Networks📌

Prashant Lakhera
3 min readFeb 27, 2024

--

❓ What is buffer overflows?

Buffer overflows occur when data surpassing the network interface or the system’s processing capacity exceeds the buffer space available for storing incoming packets. This situation often results in packet drops, leading to reduced network performance and increased latency.

🛠️ How does Kernel set these network buffers?

In Linux, kernel sets default buffer sizes for sending and receiving data on network sockets. These defaults are set during system initialization but can be adjusted after system startup.

The sysctl utility is used to modify kernel parameters at runtime. Network buffer sizes can be controlled by parameters such as rmem_default, rmem_max, wmem_default, and wmem_max:

1️⃣ net.core.rmem_default and net.core.wmem_default are the default OS buffer sizes for receiving and sending data used by sockets.

2️⃣ net.core.rmem_max and net.core.wmem_max represent the maximum buffer sizes that can be allocated for socket receive and send operations.

🧐 NOTE: Modern Linux kernels can automatically adjust the buffer size ( known as “autotuning”) for network sockets based on network conditions. This is meant to optimize throughput and efficiency. Settings like tcp_rmem and tcp_wmem for TCP sockets can influence autotuning.

📜 What message I will see in logs if there is buffer overflow error?

Network buffer overflows in Linux typically don’t produce a straightforward error message like application-level buffer overflows might. Instead, you might observe symptoms indirectly through various command outputs or logs indicating that packets are being dropped or network issues. Here is an example of how you might notice network buffer overflow issues:

5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:1a:4b:16:01:5c brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
→ 1024556731 10485760 0 3450 0 0
TX: bytes packets errors dropped carrier collsns
1144556731 10485760 0 0 0 0

You might find messages in your system logs (dmesg or /var/log/syslog) related to dropped packets or buffer overflows. As shown in the figure below

🔧 How to Tune

To adjust these parameters, use the sysctl command followed by the parameter name and the desired value. For example, to increase the maximum receive buffer size, you would use:

sysctl -w net.core.rmem_max=262144

This command sets the maximum receive buffer size to 256 KB (262144 bytes). You can make similar adjustments to the other parameters based on your system’s needs and the specific network performance issues you’re addressing.

💾 Making Changes Persistent

To ensure these changes persist across reboots, add them to the /etc/sysctl.conf file or a dedicated configuration file under /etc/sysctl.d/. For example:

net.core.rmem_max=262144 net.core.wmem_max=262144 
net.core.netdev_max_backlog=1000 net.core.somaxconn=1024

After making changes to sysctl.conf or adding a new file to sysctl.d, apply the changes with the command:

sysctl -p /path/to/your_config_file

Or simply sysctl -p to reload the default /etc/sysctl.conf.

📚 If you’re interested in more DevOps interview questions, please check out my new book “Cracking the DevOps Interview”

To learn more about AWS, check out my book “AWS for System Administrators”

--

--

Prashant Lakhera
Prashant Lakhera

Written by Prashant Lakhera

AWS Community Builder, Ex-Redhat, Author, Blogger, YouTuber, RHCA, RHCDS, RHCE, Docker Certified,4XAWS, CCNA, MCP, Certified Jenkins, Terraform Certified, 1XGCP