Subject: Re: bug#40572: installer networking: Connman detects no technologies on Acer Aspire

From: Danny Milosavljevic <[email-masked]>
Date: Sun, 12 Apr 2020 18:52:34 +0200

Hi Florian,

could you check 

  strace -s 0 -p 301

?

It should attach to the running connman-vpnd and you'll get which command it's
currently in.  If it's idle, it should be some "accept" call.

If strace is not available, install package "strace" (if that's possible
without networking :P).

>Can't load /gnu/store/vclzrvbxac8ipc8g1ncq5gjjj8gdvxw3-connman-1.38/lib/connman/plugins-vpn/wireguard.so: /gnu/store/vclzrvbxac8ipc8g1ncq5gjjj8gdvxw3-connman-1.38/lib/connman/plugins-vpn/wireguard.so: undefined symbol: __vpn_ipconfig_foreach

No idea how that can happen...

I've checked guix master connman and there,

$ objdump -t /gnu/store/k6iw9mhqjkhq7626a7sgfn0qpg9m73qh-connman-1.38/sbin/connman-vpnd |grep __vpn_ipconfig_foreach
0000000000418480 l     F .text  000000000000006b              __vpn_ipconfig_foreach

... so that symbol is indeed defined.

And wireguard.so has:
0000000000000000         *UND*  0000000000000000              __vpn_ipconfig_foreach

But that should be resolved by the loader since wireguard.so is loaded by
connman-vpnd--which has the definition of the symbol.

And I've checked the same from the installer iso image:

connman-vpnd:
0000000000418480 l     F .text  000000000000006b              __vpn_ipconfig_foreach

wireguard.so:
0000000000000000         *UND*  0000000000000000              __vpn_ipconfig_foreach

The small "l" means "local".  That's probably not good.

I've also tried a small program of my own:

$ cat a1.c 
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

void foo(void) {
        exit(1);
}
int main() {
        if (dlopen("li.so", RTLD_NOW))
                return 0;
        else {
                fprintf(stderr, "error: %s\n", dlerror());
                return 1;
        }
}

$ cat li.c 
void foo(void);

void bar(void) {
        foo();
}
$ gcc -fPIC -shared -o li.so li.c
$ gcc -o a1 -Wl,--export-dynamic a1.c -ldl
$ objdump -t a.out |grep foo
00000000004011a0 g     F .text  000000000000000e              foo
$ objdump -t li.so |grep foo
0000000000000000         *UND*  0000000000000000              foo
$ ./a.out && echo ok
ok

So it should work?!

Since you didn't try to use wireguard, it's probably unrelated--but maybe it's
a follow-up error to that one.