nstool: Add magic number to advertized information

So that we'll probably give a better error if you point it at something
that's not an nstool hold control socket.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
David Gibson 2023-04-06 13:28:12 +10:00 committed by Stefano Brivio
parent 4311066bdb
commit f6a9ea3af5

View file

@ -12,6 +12,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <getopt.h> #include <getopt.h>
@ -45,7 +46,10 @@ const struct ns_type nstypes[] = {
{ CLONE_NEWUTS, "uts" }, { CLONE_NEWUTS, "uts" },
}; };
#define NSTOOL_MAGIC 0x7570017575601d75ULL
struct holder_info { struct holder_info {
uint64_t magic;
pid_t pid; pid_t pid;
uid_t uid; uid_t uid;
gid_t gid; gid_t gid;
@ -104,6 +108,10 @@ static int connect_ctl(const char *sockpath, bool wait,
if ((size_t)len < sizeof(*info)) if ((size_t)len < sizeof(*info))
die("short read() on control socket %s\n", sockpath); die("short read() on control socket %s\n", sockpath);
if (info->magic != NSTOOL_MAGIC)
die("Control socket %s doesn't appear to belong to nstool\n",
sockpath);
if (peercred) { if (peercred) {
socklen_t optlen = sizeof(*peercred); socklen_t optlen = sizeof(*peercred);
@ -143,6 +151,7 @@ static void cmd_hold(int argc, char *argv[])
if (rc < 0) if (rc < 0)
die("listen() on %s: %s\n", sockpath, strerror(errno)); die("listen() on %s: %s\n", sockpath, strerror(errno));
info.magic = NSTOOL_MAGIC;
info.pid = getpid(); info.pid = getpid();
info.uid = getuid(); info.uid = getuid();
info.gid = getgid(); info.gid = getgid();