Can Not Send Netlink Messages with Unshare(CLONE_NEWNET)

From: Hang An
Date: Thu Nov 17 2022 - 02:55:37 EST


Hi,
A process can not send netlink messages(errno is ECONNREFUSED) after
running unshare(CLONE_NEWNET).

Part of the call stack when process failed:
netlink_sendmsg
netlink_unicast
netlink_getsockbyportid
netlink_lookup(return NULL)

The corresponding pseudocode is shown below:
unshare(CLONE_NEWNET) ;
res_socket = syscall(__NR_socket, 0x10ul, 3ul, 8);
syscall(__NR_sendmsg, res_socket, msghdr, 0ul);

I can't understand this situation. Is this a bug or special design?

Thanks.