Avoid infinite loop on EBADFD
authorvolth <volth@webmaster.ms>
Thu, 27 Jul 2017 06:32:28 +0000 (06:32 +0000)
committerGitHub <noreply@github.com>
Thu, 27 Jul 2017 06:32:28 +0000 (06:32 +0000)
On Linux network restart, Tinc can get into a loop writing millions of error messages "Error while reading from Linux tun/tap device (tun mode) /dev/net/tun: File descriptor in bad state" to the log. https://github.com/NixOS/nixpkgs/pull/27675

It should be somehow aborted.
Here is my quick hack.

src/linux/device.c

index a06e6da..e273bfa 100644 (file)
@@ -139,6 +139,9 @@ static bool read_packet(vpn_packet_t *packet) {
                        if(inlen <= 0) {
                                logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s",
                                           device_info, device, strerror(errno));
+                               if (errno == EBADFD) { /* File descriptor in bad state */
+                                       event_exit();
+                               }
                                return false;
                        }