Skip to content

Runtime panic (invalid memory address or nil pointer dereference) when setting up registry for hidden paths in local AS #4364

@mlegner

Description

@mlegner

When trying to set up a registry for hidden segments locally (see config below), the control service has a runtime panic.

Tested version: SCIONLab package 4.6.2 on Ubuntu 22.04

Stack trace:

github.com/scionproto/scion/go/lib/log.HandlePanic
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/lib/log/log.go:132
runtime.gopanic
  /usr/local/go/src/runtime/panic.go:1038
runtime.panicmem
  /usr/local/go/src/runtime/panic.go:221
runtime.sigpanic
  /usr/local/go/src/runtime/signal_unix.go:735
github.com/scionproto/scion/go/lib/infra/messenger.AddressRewriter.buildFullAddress
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/lib/infra/messenger/addr.go:178
github.com/scionproto/scion/go/lib/infra/messenger.AddressRewriter.redirectToQUIC
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/lib/infra/messenger/addr.go:108
github.com/scionproto/scion/go/lib/infra/messenger.AddressRewriter.RedirectToQUIC
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/lib/infra/messenger/addr.go:76
github.com/scionproto/scion/go/cs/onehop.(*AddressRewriter).RedirectToQUIC
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/cs/onehop/addr.go:67
github.com/scionproto/scion/go/pkg/grpc.(*QUICDialer).Dial
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/grpc/dialer.go:159
github.com/scionproto/scion/go/pkg/hiddenpath/grpc.(*Discoverer).Discover
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/hiddenpath/grpc/discovery.go:37
github.com/scionproto/scion/go/pkg/hiddenpath.resolve
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/hiddenpath/discovery.go:96
github.com/scionproto/scion/go/pkg/hiddenpath.RegistrationResolver.Resolve
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/hiddenpath/discovery.go:55
github.com/scionproto/scion/go/pkg/hiddenpath.(*BeaconWriter).Write.func1
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/hiddenpath/beaconwriter.go:108
github.com/scionproto/scion/go/pkg/hiddenpath.(*remoteWriter).run
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/hiddenpath/beaconwriter.go:155
github.com/scionproto/scion/go/pkg/hiddenpath.(*BeaconWriter).Write.func3
  /builds/PRV-PERRIG/scionlab/scion-builder/scion/go/pkg/hiddenpath/beaconwriter.go:123

The problematic line seems to be

	if len(p.Metadata().Interfaces) == 0 { //when local AS

so I assume that for the concrete path Metadata() returns nil.

HP config:

---
groups:
  ffaa:1:1099-000a:
    owner: 17-ffaa:1:1099
    readers:
    - 17-ffaa:1:1099
    registries:
    - 17-ffaa:1:1099
    writers:
    - 17-ffaa:1:1099

registration_policy_per_interface:
  1:
    - "ffaa:1:1099-000a"

I haven't tested it with the up-to-date version in master yet, but the relevant code seems to be unchanged.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions