// SPDX-License-Identifier: GPL-2.0
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
#include <limits.h>
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <linux/unistd.h>
#include "kselftest_harness.h"
#ifndef FD_NSFS_ROOT
#define FD_NSFS_ROOT -10003 /* Root of the nsfs filesystem */
#endif
TEST(nsfs_net_handle)
{
struct file_handle *handle;
int mount_id;
int ret;
int fd;
int ns_fd;
struct stat st1, st2;
/* Drop to unprivileged uid/gid */
ASSERT_EQ(setresgid(65534, 65534, 65534), 0); /* nogroup */
ASSERT_EQ(setresuid(65534, 65534, 65534), 0); /* nobody */
handle = malloc(sizeof(*handle) + MAX_HANDLE_SZ);
ASSERT_NE(handle, NULL);
/* Open a namespace file descriptor */
ns_fd = open("/proc/self/ns/net", O_RDONLY);
ASSERT_GE(ns_fd, 0);
/* Get handle for the namespace */
handle->handle_bytes = MAX_HANDLE_SZ;
ret = name_to_handle_at(ns_fd, "", handle, &mount_id, AT_EMPTY_PATH