mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-06 20:10:11 +02:00
fix(firewall/iptables): shared mutex for both iptables and ip6tables
This commit is contained in:
@@ -11,9 +11,7 @@ import (
|
|||||||
// returns a restore function that can be called to restore the saved rules.
|
// returns a restore function that can be called to restore the saved rules.
|
||||||
func (c *Config) SaveAndRestore(ctx context.Context) (restore func(context.Context), err error) {
|
func (c *Config) SaveAndRestore(ctx context.Context) (restore func(context.Context), err error) {
|
||||||
c.iptablesMutex.Lock()
|
c.iptablesMutex.Lock()
|
||||||
c.ip6tablesMutex.Lock()
|
|
||||||
defer c.iptablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
defer c.ip6tablesMutex.Unlock()
|
|
||||||
|
|
||||||
return c.saveAndRestore(ctx)
|
return c.saveAndRestore(ctx)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
runner CmdRunner
|
runner CmdRunner
|
||||||
logger Logger
|
logger Logger
|
||||||
iptablesMutex sync.Mutex
|
iptablesMutex sync.Mutex
|
||||||
ip6tablesMutex sync.Mutex
|
|
||||||
|
|
||||||
// Fixed state
|
// Fixed state
|
||||||
ipTables string
|
ipTables string
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ func findIP6tablesSupported(ctx context.Context, runner CmdRunner) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Config) runIP6tablesInstructions(ctx context.Context, instructions []string) error {
|
func (c *Config) runIP6tablesInstructions(ctx context.Context, instructions []string) error {
|
||||||
c.ip6tablesMutex.Lock() // only one ip6tables command at once
|
c.iptablesMutex.Lock() // only one iptables command at once
|
||||||
defer c.ip6tablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
|
|
||||||
restore, err := c.saveAndRestoreIPv6(ctx)
|
restore, err := c.saveAndRestoreIPv6(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -48,8 +48,8 @@ func (c *Config) runIP6tablesInstructionsNoSave(ctx context.Context, instruction
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Config) runIP6tablesInstruction(ctx context.Context, instruction string) error {
|
func (c *Config) runIP6tablesInstruction(ctx context.Context, instruction string) error {
|
||||||
c.ip6tablesMutex.Lock() // only one ip6tables command at once
|
c.iptablesMutex.Lock() // only one iptables command at once
|
||||||
defer c.ip6tablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
|
|
||||||
restore, err := c.saveAndRestoreIPv6(ctx)
|
restore, err := c.saveAndRestoreIPv6(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -229,9 +229,7 @@ func (c *Config) RedirectPort(ctx context.Context, intf string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.iptablesMutex.Lock()
|
c.iptablesMutex.Lock()
|
||||||
c.ip6tablesMutex.Lock()
|
|
||||||
defer c.iptablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
defer c.ip6tablesMutex.Unlock()
|
|
||||||
|
|
||||||
restore, err := c.saveAndRestore(ctx)
|
restore, err := c.saveAndRestore(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -297,9 +295,7 @@ func (c *Config) RunUserPostRules(ctx context.Context, filepath string) error {
|
|||||||
lines := strings.Split(string(b), "\n")
|
lines := strings.Split(string(b), "\n")
|
||||||
|
|
||||||
c.iptablesMutex.Lock()
|
c.iptablesMutex.Lock()
|
||||||
c.ip6tablesMutex.Lock()
|
|
||||||
defer c.iptablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
defer c.ip6tablesMutex.Unlock()
|
|
||||||
|
|
||||||
restore, err := c.saveAndRestore(ctx)
|
restore, err := c.saveAndRestore(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ import (
|
|||||||
|
|
||||||
func (c *Config) runMixedIptablesInstructions(ctx context.Context, instructions []string) error {
|
func (c *Config) runMixedIptablesInstructions(ctx context.Context, instructions []string) error {
|
||||||
c.iptablesMutex.Lock()
|
c.iptablesMutex.Lock()
|
||||||
c.ip6tablesMutex.Lock()
|
|
||||||
defer c.iptablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
defer c.ip6tablesMutex.Unlock()
|
|
||||||
|
|
||||||
restore, err := c.saveAndRestore(ctx)
|
restore, err := c.saveAndRestore(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -26,9 +24,7 @@ func (c *Config) runMixedIptablesInstructions(ctx context.Context, instructions
|
|||||||
|
|
||||||
func (c *Config) runMixedIptablesInstruction(ctx context.Context, instruction string) error {
|
func (c *Config) runMixedIptablesInstruction(ctx context.Context, instruction string) error {
|
||||||
c.iptablesMutex.Lock()
|
c.iptablesMutex.Lock()
|
||||||
c.ip6tablesMutex.Lock()
|
|
||||||
defer c.iptablesMutex.Unlock()
|
defer c.iptablesMutex.Unlock()
|
||||||
defer c.ip6tablesMutex.Unlock()
|
|
||||||
|
|
||||||
restore, err := c.saveAndRestore(ctx)
|
restore, err := c.saveAndRestore(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user