aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-03-06 14:47:02 +0100
committerAleksandr Nogikh <nogikh@google.com>2024-03-08 10:56:47 +0000
commit4097c8d7a8596ddbc9a9db7b7f39c5cbdb1bd742 (patch)
tree453b39ea237785218a551d24d6c474db317aa951 /sys/linux
parent6387f6b7d487e2a77d753ad28c1074e39c17c3ca (diff)
sys/linux: clone args before mutation
Not cloning the argument results in replaceArg() replacing a union argument with itself, which may lead to inconsistent resource references. Add an assertion to detect such cases in the future.
Diffstat (limited to 'sys/linux')
-rw-r--r--sys/linux/init_iptables.go4
-rw-r--r--sys/linux/init_vusb.go4
2 files changed, 4 insertions, 4 deletions
diff --git a/sys/linux/init_iptables.go b/sys/linux/init_iptables.go
index 7e96662fb..95825d33c 100644
--- a/sys/linux/init_iptables.go
+++ b/sys/linux/init_iptables.go
@@ -31,7 +31,7 @@ func (arch *arch) generateNetfilterTable(g *prog.Gen, typ prog.Type, dir prog.Di
} else {
// TODO(dvyukov): try to restore original hook order after mutation
// instead of assigning brand new offsets.
- arg = old
+ arg = prog.CloneArg(old)
calls = g.MutateArg(arg)
}
var tableArg *prog.GroupArg
@@ -113,7 +113,7 @@ func (arch *arch) generateEbtables(g *prog.Gen, typ prog.Type, dir prog.Dir, old
} else {
// TODO(dvyukov): try to restore original hook order after mutation
// instead of assigning brand new offsets.
- arg = old
+ arg = prog.CloneArg(old)
calls = g.MutateArg(arg)
}
if g.Target().ArgContainsAny(arg) {
diff --git a/sys/linux/init_vusb.go b/sys/linux/init_vusb.go
index 5e4244f6e..ca645bf45 100644
--- a/sys/linux/init_vusb.go
+++ b/sys/linux/init_vusb.go
@@ -55,7 +55,7 @@ func (arch *arch) generateUsbDeviceDescriptor(g *prog.Gen, typ0 prog.Type, dir p
if old == nil {
arg = g.GenerateSpecialArg(typ0, dir, &calls)
} else {
- arg = old
+ arg = prog.CloneArg(old)
calls = g.MutateArg(arg)
}
if g.Target().ArgContainsAny(arg) {
@@ -144,7 +144,7 @@ func (arch *arch) generateUsbHidDeviceDescriptor(g *prog.Gen, typ0 prog.Type, di
if old == nil {
arg = g.GenerateSpecialArg(typ0, dir, &calls)
} else {
- arg = old
+ arg = prog.CloneArg(old)
calls = g.MutateArg(arg)
}
if g.Target().ArgContainsAny(arg) {