kubefwd icon indicating copy to clipboard operation
kubefwd copied to clipboard

SIGSEGV when kubefwd is provided with malformed reserve parameter

Open mccaig opened this issue 2 years ago • 1 comments

When using the -r command line option, kubefwd will SIGSEGV if the reserve string is malformed - specifically if a parameter is provided, but the colon is omitted. It fails gracefully if the parameter is not provided, or if it is provided, but with an invalid ip address.

Reproduce with: kubefwd svc -r foo

INFO[18:28:52]  _          _           __             _
INFO[18:28:52] | | ___   _| |__   ___ / _|_      ____| |
INFO[18:28:52] | |/ / | | | '_ \ / _ \ |_\ \ /\ / / _  |
INFO[18:28:52] |   <| |_| | |_) |  __/  _|\ V  V / (_| |
INFO[18:28:52] |_|\_\\__,_|_.__/ \___|_|   \_/\_/ \__,_|
INFO[18:28:52]
INFO[18:28:52] Version 1.22.0
INFO[18:28:52] https://github.com/txn2/kubefwd
INFO[18:28:52]
INFO[18:28:52] Press [Ctrl-C] to stop forwarding.
INFO[18:28:52] 'cat /etc/hosts' to see all host entries.
INFO[18:28:52] Loaded hosts file /etc/hosts
INFO[18:28:52] HostFile management: Original hosts backup already exists at /Users/<snip>/hosts.original
INFO[18:28:52] Using namespace <...snip> from current context <...snip>.
INFO[18:28:52] Successfully connected context: <...snip>
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x1dbb177]

goroutine 97 [running]:
github.com/txn2/kubefwd/pkg/fwdIp.blockNonLoopbackIPs(0x2c894c0)
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:197 +0x97
github.com/txn2/kubefwd/pkg/fwdIp.validateForwardConfiguration(0x1f27880)
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:215 +0x1e
github.com/txn2/kubefwd/pkg/fwdIp.applyCLIPassedReservations({{0xc0008654d4, 0x9}, {0xc000d426c0, 0x2e}, {0xc000615a30, 0xf}, 0x0, 0x0, {0xc0000419c0, 0x1c}, ...}, ...)
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:235 +0x53
github.com/txn2/kubefwd/pkg/fwdIp.getForwardConfiguration({{0xc0008654d4, 0x9}, {0xc000d426c0, 0x2e}, {0xc000615a30, 0xf}, 0x0, 0x0, {0xc0000419c0, 0x1c}, ...})
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:246 +0xa5
github.com/txn2/kubefwd/pkg/fwdIp.getBaseUnreservedIP({{0xc0008654d4, 0x9}, {0xc000d426c0, 0x2e}, {0xc000615a30, 0xf}, 0x0, 0x0, {0xc0000419c0, 0x1c}, ...})
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:174 +0x58
github.com/txn2/kubefwd/pkg/fwdIp.determineIP({0xc00038a380, 0x3c}, {{0xc0008654d4, 0x9}, {0xc000d426c0, 0x2e}, {0xc000615a30, 0xf}, 0x0, 0x0, ...})
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:76 +0x78
github.com/txn2/kubefwd/pkg/fwdIp.GetIp({{0xc0008654d4, 0x9}, {0xc000d426c0, 0x2e}, {0xc000615a30, 0xf}, 0x0, 0x0, {0xc0000419c0, 0x1c}, ...})
	github.com/txn2/kubefwd/pkg/fwdIp/fwdIp.go:72 +0x2ab
github.com/txn2/kubefwd/pkg/fwdnet.ReadyInterface({{0xc0008654d4, 0x9}, {0xc000d426c0, 0x2e}, {0xc000615a30, 0xf}, 0x0, 0x0, {0xc0000419c0, 0x1c}, ...})
	github.com/txn2/kubefwd/pkg/fwdnet/fwdnet.go:18 +0x5a
github.com/txn2/kubefwd/pkg/fwdservice.(*ServiceFWD).LoopPodsToForward(0xc0002d3180, {0xc00052db90, 0x1, 0x2133920}, 0x0)
	github.com/txn2/kubefwd/pkg/fwdservice/fwdservice.go:250 +0x3f8
github.com/txn2/kubefwd/pkg/fwdservice.(*ServiceFWD).SyncPodForwards.func1()
	github.com/txn2/kubefwd/pkg/fwdservice/fwdservice.go:190 +0x312
github.com/txn2/kubefwd/pkg/fwdservice.(*ServiceFWD).SyncPodForwards(0xc0002d3180, 0x0)
	github.com/txn2/kubefwd/pkg/fwdservice/fwdservice.go:203 +0xb6
created by github.com/txn2/kubefwd/pkg/fwdsvcregistry.Add
	github.com/txn2/kubefwd/pkg/fwdsvcregistry/fwdsvcregistry.go:71 +0x285

kubefwd svc -r and kubefwd svc -r foo: will both fail gracefully.

mccaig avatar Nov 23 '21 02:11 mccaig

@mccaig looks like it needs a little more validation. Thanks for the report

cjimti avatar Nov 24 '21 07:11 cjimti