fix: resolve deadlock in `Flush` function when handling ENOBUFS error

This commit is contained in:
psondej 2024-11-25 20:10:10 +01:00
parent 51c44dcf05
commit 4b39769321
1 changed files with 3 additions and 2 deletions

View File

@ -19,6 +19,7 @@ import (
"fmt" "fmt"
"os" "os"
"sync" "sync"
"syscall"
"github.com/google/nftables/binaryutil" "github.com/google/nftables/binaryutil"
"github.com/google/nftables/expr" "github.com/google/nftables/expr"
@ -266,8 +267,8 @@ func (cc *Conn) Flush() error {
// Fetch the requested acknowledgement for each message we sent. // Fetch the requested acknowledgement for each message we sent.
for _, msg := range cc.messages { for _, msg := range cc.messages {
if _, err := receiveAckAware(conn, msg.Header.Flags); err != nil { if _, err := receiveAckAware(conn, msg.Header.Flags); err != nil {
if errors.Is(err, os.ErrPermission) { if errors.Is(err, os.ErrPermission) || errors.Is(err, syscall.ENOBUFS) {
// Kernel will only send one permission error to user space. // Kernel will only send one error to user space.
return err return err
} }
errs = errors.Join(errs, err) errs = errors.Join(errs, err)