Merge pull request #3972 from brauner/2021-09-15.fixes

build: ensure all relevant calls are checked for availability at buil…
This commit is contained in:
Stéphane Graber 2021-09-15 10:15:53 -04:00 committed by GitHub
commit cf5599324d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 58 deletions

View File

@ -4,6 +4,7 @@ project('lxc', 'c',
version : '4.0.0', version : '4.0.0',
license : 'LGPLv2+', license : 'LGPLv2+',
default_options: [ default_options: [
'b_lto=true',
'b_colorout=always', 'b_colorout=always',
'b_asneeded=true', 'b_asneeded=true',
'b_pie=true', 'b_pie=true',
@ -199,45 +200,55 @@ foreach decl : [
endforeach endforeach
foreach ident : [ foreach ident : [
['memfd_create', '''#include <sys/mman.h>'''], ['bpf', '''#include <sys/syscall.h>
['gettid', '''#include <sys/types.h> #include <unistd.h>'''],
#include <unistd.h>'''], ['close_range', '''#include <unistd.h>'''],
['pivot_root', '''#include <stdlib.h> ['execveat', '''#include <unistd.h>'''],
#include <unistd.h>'''], # no known header declares pivot_root ['faccessat', '''#include <fcntl.h>
['setns', '''#include <sched.h>'''], #include <unistd.h>'''],
['renameat2', '''#include <stdio.h> ['fexecve', '''#include <unistd.h>'''],
#include <fcntl.h>'''], ['fsconfig', '''#include <sys/mount.h>'''],
['kcmp', '''#include <linux/kcmp.h>'''], ['fsmount', '''#include <sys/mount.h>'''],
['keyctl', '''#include <sys/types.h> ['fsopen', '''#include <sys/mount.h>'''],
#include <keyutils.h>'''], ['fspick', '''#include <sys/mount.h>'''],
['bpf', '''#include <sys/syscall.h> ['gettid', '''#include <sys/types.h>
#include <unistd.h>'''], #include <unistd.h>'''],
['statx', '''#include <sys/types.h> ['kcmp', '''#include <linux/kcmp.h>'''],
#include <sys/stat.h> ['keyctl', '''#include <sys/types.h>
#include <unistd.h>'''], #include <keyutils.h>'''],
['pidfd_send_signal', '''#include <stdlib.h> ['memfd_create', '''#include <sys/mman.h>'''],
#include <unistd.h> ['mount_setattr', '''#include <sys/mount.h>'''],
#include <signal.h> ['move_mount', '''#include <sys/mount.h>'''],
#include <sys/wait.h>'''], ['openat2', '''#include <sys/types.h>
['pidfd_open', '''#include <stdlib.h> #include <sys/stat.h>
#include <unistd.h> #include <fctnl.h>'''],
#include <signal.h> ['open_tree', '''#include <sys/mount.h>'''],
#include <sys/wait.h>'''], ['personality', '''#include <sys/personality.h>'''],
['execveat', '''#include <unistd.h>'''], ['pidfd_open', '''#include <stdlib.h>
['close_range', '''#include <unistd.h>'''], #include <unistd.h>
['mount_setattr', '''#include <sys/mount.h>'''], #include <signal.h>
['move_mount', '''#include <sys/mount.h>'''], #include <sys/wait.h>'''],
['open_tree', '''#include <sys/mount.h>'''], ['pidfd_send_signal', '''#include <stdlib.h>
['strlcpy', '''#include <string.h>'''], #include <unistd.h>
['strlcat', '''#include <string.h>'''], #include <signal.h>
['sethostname', '''#include <unistd.h>'''], #include <sys/wait.h>'''],
['faccessat', '''#include <fcntl.h> ['pivot_root', '''#include <stdlib.h>
#include <unistd.h>'''], #include <unistd.h>'''], # no known header declares pivot_root
['unshare', '''#include <sched.h>'''], ['prlimit', '''#include <sys/time.h>
['prlimit', '''#include <sys/time.h> #include <sys/resource.h>'''],
#include <sys/resource.h>'''], ['prlimit64', '''#include <sys/time.h>
['prlimit64', '''#include <sys/time.h> #include <sys/resource.h>'''],
#include <sys/resource.h>'''], ['renameat2', '''#include <stdio.h>
#include <fcntl.h>'''],
['sethostname', '''#include <unistd.h>'''],
['setns', '''#include <sched.h>'''],
['signalfd', '''#include <sys/signalfd.h>'''],
['statx', '''#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>'''],
['strlcat', '''#include <string.h>'''],
['strlcpy', '''#include <string.h>'''],
['unshare', '''#include <sched.h>'''],
] ]
if cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE') if cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
@ -509,30 +520,37 @@ found_syscalls = []
missing_syscalls = [] missing_syscalls = []
foreach tuple : [ foreach tuple : [
['bpf'],
['close_range'],
['execveat'],
['faccessat'],
['fexecve'], ['fexecve'],
['memfd_create'], ['fsconfig'],
['fsmount'],
['fsopen'],
['fspick'],
['gettid'], ['gettid'],
['pivot_root'],
['setns'],
['renameat2'],
['kcmp'], ['kcmp'],
['keyctl'], ['keyctl'],
['bpf'], ['memfd_create'],
['statx'],
['pidfd_send_signal'],
['pidfd_open'],
['execveat'],
['close_range'],
['mount_setattr'], ['mount_setattr'],
['move_mount'], ['move_mount'],
['openat2'],
['open_tree'], ['open_tree'],
['strlcpy'], ['personality'],
['strlcat'], ['pidfd_open'],
['sethostname'], ['pidfd_send_signal'],
['faccessat'], ['pivot_root'],
['unshare'],
['prlimit'], ['prlimit'],
['prlimit64'], ['prlimit64'],
['renameat2'],
['sethostname'],
['setns'],
['signalfd'],
['statx'],
['strlcat'],
['strlcpy'],
['unshare'],
] ]
if tuple.length() >= 2 if tuple.length() >= 2

View File

@ -30,9 +30,9 @@
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include "cgroup.h"
#include "af_unix.h" #include "af_unix.h"
#include "caps.h" #include "caps.h"
#include "cgroup.h"
#include "cgroup2_devices.h" #include "cgroup2_devices.h"
#include "cgroup_utils.h" #include "cgroup_utils.h"
#include "commands.h" #include "commands.h"

View File

@ -313,7 +313,7 @@ static inline int cgroup_unified_fd(const struct cgroup_ops *ops)
__first, __VA_ARGS__); \ __first, __VA_ARGS__); \
}) })
static void put_cgroup_ctx(struct cgroup_ctx *ctx) static inline void put_cgroup_ctx(struct cgroup_ctx *ctx)
{ {
if (!IS_ERR_OR_NULL(ctx)) { if (!IS_ERR_OR_NULL(ctx)) {
for (__u32 idx = 0; idx < ctx->fd_len; idx++) for (__u32 idx = 0; idx < ctx->fd_len; idx++)

View File

@ -1911,7 +1911,8 @@ int netdev_get_mtu(int ifindex)
call_cleaner(nlmsg_free) struct nlmsg *answer = NULL, *nlmsg = NULL; call_cleaner(nlmsg_free) struct nlmsg *answer = NULL, *nlmsg = NULL;
struct nl_handler nlh; struct nl_handler nlh;
call_cleaner(netlink_close) struct nl_handler *nlh_ptr = &nlh; call_cleaner(netlink_close) struct nl_handler *nlh_ptr = &nlh;
int readmore = 0, recv_len = 0; int readmore = 0;
__u32 recv_len = 0;
int answer_len, err, res; int answer_len, err, res;
struct ifinfomsg *ifi; struct ifinfomsg *ifi;
struct nlmsghdr *msg; struct nlmsghdr *msg;
@ -2547,7 +2548,8 @@ static int ip_addr_get(int family, int ifindex, void **res)
int answer_len, err; int answer_len, err;
struct ifaddrmsg *ifa; struct ifaddrmsg *ifa;
struct nlmsghdr *msg; struct nlmsghdr *msg;
int readmore = 0, recv_len = 0; int readmore = 0;
__u32 recv_len = 0;
err = netlink_open(nlh_ptr, NETLINK_ROUTE); err = netlink_open(nlh_ptr, NETLINK_ROUTE);
if (err) if (err)