Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
6d829cd2
Unverified
Commit
6d829cd2
authored
Feb 26, 2021
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commands: unify fd retrieval commands
Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
89d51b22
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
75 additions
and
34 deletions
+75
-34
commands.c
src/lxc/commands.c
+75
-34
No files found.
src/lxc/commands.c
View file @
6d829cd2
...
@@ -622,23 +622,27 @@ static int lxc_cmd_get_init_pid_callback(int fd, struct lxc_cmd_req *req,
...
@@ -622,23 +622,27 @@ static int lxc_cmd_get_init_pid_callback(int fd, struct lxc_cmd_req *req,
int
lxc_cmd_get_init_pidfd
(
const
char
*
name
,
const
char
*
lxcpath
)
int
lxc_cmd_get_init_pidfd
(
const
char
*
name
,
const
char
*
lxcpath
)
{
{
bool
stopped
=
false
;
bool
stopped
=
false
;
int
pidfd
,
ret
;
int
fd
;
ssize_t
ret
;
struct
lxc_cmd_rr
cmd
;
struct
lxc_cmd_rr
cmd
;
lxc_cmd_init
(
&
cmd
,
LXC_CMD_GET_INIT_PIDFD
);
lxc_cmd_init
(
&
cmd
,
LXC_CMD_GET_INIT_PIDFD
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
sysdebug
(
"Failed to process init pidfd command"
);
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_INIT_PIDFD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive init pidfd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_INIT_PIDFD
));
pidfd
=
PTR_TO_INT
(
cmd
.
rsp
.
data
);
fd
=
PTR_TO_INT
(
cmd
.
rsp
.
data
);
if
(
pidfd
<
0
)
if
(
fd
<
0
)
return
sysdebug_set
(
pidfd
,
"Failed to receive init pidfd"
);
return
sysdebug_set
(
fd
,
"Received invalid file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_INIT_PIDFD
));
return
pid
fd
;
return
fd
;
}
}
static
int
lxc_cmd_get_init_pidfd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
static
int
lxc_cmd_get_init_pidfd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
...
@@ -659,6 +663,7 @@ static int lxc_cmd_get_init_pidfd_callback(int fd, struct lxc_cmd_req *req,
...
@@ -659,6 +663,7 @@ static int lxc_cmd_get_init_pidfd_callback(int fd, struct lxc_cmd_req *req,
int
lxc_cmd_get_devpts_fd
(
const
char
*
name
,
const
char
*
lxcpath
)
int
lxc_cmd_get_devpts_fd
(
const
char
*
name
,
const
char
*
lxcpath
)
{
{
bool
stopped
=
false
;
bool
stopped
=
false
;
int
fd
;
ssize_t
ret
;
ssize_t
ret
;
struct
lxc_cmd_rr
cmd
;
struct
lxc_cmd_rr
cmd
;
...
@@ -666,12 +671,18 @@ int lxc_cmd_get_devpts_fd(const char *name, const char *lxcpath)
...
@@ -666,12 +671,18 @@ int lxc_cmd_get_devpts_fd(const char *name, const char *lxcpath)
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
log_debug_errno
(
-
1
,
errno
,
"Failed to process devpts fd command"
);
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_DEVPTS_FD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
log_debug_errno
(
-
EBADF
,
errno
,
"Failed to receive devpts fd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_DEVPTS_FD
));
return
PTR_TO_INT
(
cmd
.
rsp
.
data
);
fd
=
PTR_TO_INT
(
cmd
.
rsp
.
data
);
if
(
fd
<
0
)
return
sysdebug_set
(
fd
,
"Received invalid file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_DEVPTS_FD
));
return
fd
;
}
}
static
int
lxc_cmd_get_devpts_fd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
static
int
lxc_cmd_get_devpts_fd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
...
@@ -682,7 +693,7 @@ static int lxc_cmd_get_devpts_fd_callback(int fd, struct lxc_cmd_req *req,
...
@@ -682,7 +693,7 @@ static int lxc_cmd_get_devpts_fd_callback(int fd, struct lxc_cmd_req *req,
.
ret
=
-
EBADF
,
.
ret
=
-
EBADF
,
};
};
if
(
!
handler
->
conf
||
handler
->
conf
->
devpts_fd
<
0
)
if
(
handler
->
conf
->
devpts_fd
<
0
)
return
lxc_cmd_rsp_send_reap
(
fd
,
&
rsp
);
return
lxc_cmd_rsp_send_reap
(
fd
,
&
rsp
);
rsp
.
ret
=
0
;
rsp
.
ret
=
0
;
...
@@ -693,6 +704,7 @@ int lxc_cmd_get_seccomp_notify_fd(const char *name, const char *lxcpath)
...
@@ -693,6 +704,7 @@ int lxc_cmd_get_seccomp_notify_fd(const char *name, const char *lxcpath)
{
{
#ifdef HAVE_SECCOMP_NOTIFY
#ifdef HAVE_SECCOMP_NOTIFY
bool
stopped
=
false
;
bool
stopped
=
false
;
int
fd
;
ssize_t
ret
;
ssize_t
ret
;
struct
lxc_cmd_rr
cmd
;
struct
lxc_cmd_rr
cmd
;
...
@@ -700,14 +712,20 @@ int lxc_cmd_get_seccomp_notify_fd(const char *name, const char *lxcpath)
...
@@ -700,14 +712,20 @@ int lxc_cmd_get_seccomp_notify_fd(const char *name, const char *lxcpath)
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
log_debug_errno
(
-
1
,
errno
,
"Failed to process seccomp notify fd command"
);
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_SECCOMP_NOTIFY_FD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
log_debug_errno
(
-
EBADF
,
errno
,
"Failed to receive seccomp notify fd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_SECCOMP_NOTIFY_FD
));
return
PTR_TO_INT
(
cmd
.
rsp
.
data
);
fd
=
PTR_TO_INT
(
cmd
.
rsp
.
data
);
if
(
fd
<
0
)
return
sysdebug_set
(
fd
,
"Received invalid file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_SECCOMP_NOTIFY_FD
));
return
fd
;
#else
#else
return
ret_errno
(
E
OPNOTSUPP
);
return
ret_errno
(
E
NOSYS
);
#endif
#endif
}
}
...
@@ -720,7 +738,7 @@ static int lxc_cmd_get_seccomp_notify_fd_callback(int fd, struct lxc_cmd_req *re
...
@@ -720,7 +738,7 @@ static int lxc_cmd_get_seccomp_notify_fd_callback(int fd, struct lxc_cmd_req *re
.
ret
=
-
EBADF
,
.
ret
=
-
EBADF
,
};
};
if
(
!
handler
->
conf
||
handler
->
conf
->
seccomp
.
notifier
.
notify_fd
<
0
)
if
(
handler
->
conf
->
seccomp
.
notifier
.
notify_fd
<
0
)
return
lxc_cmd_rsp_send_reap
(
fd
,
&
rsp
);
return
lxc_cmd_rsp_send_reap
(
fd
,
&
rsp
);
rsp
.
ret
=
0
;
rsp
.
ret
=
0
;
...
@@ -742,10 +760,12 @@ int lxc_cmd_get_cgroup_ctx(const char *name, const char *lxcpath,
...
@@ -742,10 +760,12 @@ int lxc_cmd_get_cgroup_ctx(const char *name, const char *lxcpath,
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
log_debug_errno
(
-
1
,
errno
,
"Failed to process cgroup context command"
);
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP_CTX
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
log_debug_errno
(
-
EBADF
,
errno
,
"Failed to receive cgroup fds"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP_CTX
));
return
0
;
return
0
;
}
}
...
@@ -1140,7 +1160,7 @@ static int lxc_cmd_terminal_winch_callback(int fd, struct lxc_cmd_req *req,
...
@@ -1140,7 +1160,7 @@ static int lxc_cmd_terminal_winch_callback(int fd, struct lxc_cmd_req *req,
struct
lxc_epoll_descr
*
descr
)
struct
lxc_epoll_descr
*
descr
)
{
{
/* should never be called */
/* should never be called */
return
log_error_errno
(
-
1
,
ENOSYS
,
"Called lxc_cmd_terminal_winch_callback()"
);
return
syserror_set
(
-
ENOSYS
,
"Called lxc_cmd_terminal_winch_callback()"
);
}
}
/*
/*
...
@@ -1166,7 +1186,8 @@ int lxc_cmd_get_tty_fd(const char *name, int *ttynum, int *fd, const char *lxcpa
...
@@ -1166,7 +1186,8 @@ int lxc_cmd_get_tty_fd(const char *name, int *ttynum, int *fd, const char *lxcpa
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_TTY_FD
));
rspdata
=
cmd
.
rsp
.
data
;
rspdata
=
cmd
.
rsp
.
data
;
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
...
@@ -1182,7 +1203,8 @@ int lxc_cmd_get_tty_fd(const char *name, int *ttynum, int *fd, const char *lxcpa
...
@@ -1182,7 +1203,8 @@ int lxc_cmd_get_tty_fd(const char *name, int *ttynum, int *fd, const char *lxcpa
*
fd
=
rspdata
->
ptxfd
;
*
fd
=
rspdata
->
ptxfd
;
*
ttynum
=
rspdata
->
ttynum
;
*
ttynum
=
rspdata
->
ttynum
;
return
log_info
(
ret
,
"Alloced fd %d for tty %d via socket %zd"
,
*
fd
,
rspdata
->
ttynum
,
ret
);
INFO
(
"Alloced fd %d for tty %d via socket %zd"
,
*
fd
,
rspdata
->
ttynum
,
ret
);
return
ret
;
}
}
static
int
lxc_cmd_get_tty_fd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
static
int
lxc_cmd_get_tty_fd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
...
@@ -1207,7 +1229,8 @@ static int lxc_cmd_get_tty_fd_callback(int fd, struct lxc_cmd_req *req,
...
@@ -1207,7 +1229,8 @@ static int lxc_cmd_get_tty_fd_callback(int fd, struct lxc_cmd_req *req,
return
ret
;
return
ret
;
}
}
return
log_debug
(
ret
,
"Send tty to client"
);
DEBUG
(
"Send tty to client"
);
return
ret
;
}
}
/*
/*
...
@@ -1658,10 +1681,12 @@ int lxc_cmd_get_cgroup_fd(const char *name, const char *lxcpath,
...
@@ -1658,10 +1681,12 @@ int lxc_cmd_get_cgroup_fd(const char *name, const char *lxcpath,
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
log_debug_errno
(
-
1
,
errno
,
"Failed to process cgroup fd command"
);
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP_FD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
log_debug_errno
(
-
EBADF
,
errno
,
"Failed to receive cgroup fd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP_FD
));
return
0
;
return
0
;
}
}
...
@@ -1678,10 +1703,12 @@ int lxc_cmd_get_limit_cgroup_fd(const char *name, const char *lxcpath,
...
@@ -1678,10 +1703,12 @@ int lxc_cmd_get_limit_cgroup_fd(const char *name, const char *lxcpath,
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
log_debug_errno
(
-
1
,
errno
,
"Failed to process limit cgroup fd command"
);
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP_FD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
log_debug_errno
(
-
EBADF
,
errno
,
"Failed to receive limit cgroup fd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP_FD
));
return
0
;
return
0
;
}
}
...
@@ -1735,6 +1762,7 @@ static int lxc_cmd_get_limit_cgroup_fd_callback(int fd, struct lxc_cmd_req *req,
...
@@ -1735,6 +1762,7 @@ static int lxc_cmd_get_limit_cgroup_fd_callback(int fd, struct lxc_cmd_req *req,
int
lxc_cmd_get_cgroup2_fd
(
const
char
*
name
,
const
char
*
lxcpath
)
int
lxc_cmd_get_cgroup2_fd
(
const
char
*
name
,
const
char
*
lxcpath
)
{
{
bool
stopped
=
false
;
bool
stopped
=
false
;
int
fd
;
ssize_t
ret
;
ssize_t
ret
;
struct
lxc_cmd_rr
cmd
;
struct
lxc_cmd_rr
cmd
;
...
@@ -1742,17 +1770,24 @@ int lxc_cmd_get_cgroup2_fd(const char *name, const char *lxcpath)
...
@@ -1742,17 +1770,24 @@ int lxc_cmd_get_cgroup2_fd(const char *name, const char *lxcpath)
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
-
1
;
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP2_FD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
log_debug_errno
(
cmd
.
rsp
.
ret
,
-
cmd
.
rsp
.
ret
,
"Failed to receive cgroup2 fd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP2_FD
));
return
PTR_TO_INT
(
cmd
.
rsp
.
data
);
fd
=
PTR_TO_INT
(
cmd
.
rsp
.
data
);
if
(
fd
<
0
)
return
sysdebug_set
(
fd
,
"Received invalid file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP2_FD
));
return
fd
;
}
}
int
lxc_cmd_get_limit_cgroup2_fd
(
const
char
*
name
,
const
char
*
lxcpath
)
int
lxc_cmd_get_limit_cgroup2_fd
(
const
char
*
name
,
const
char
*
lxcpath
)
{
{
bool
stopped
=
false
;
bool
stopped
=
false
;
int
fd
;
ssize_t
ret
;
ssize_t
ret
;
struct
lxc_cmd_rr
cmd
;
struct
lxc_cmd_rr
cmd
;
...
@@ -1760,12 +1795,18 @@ int lxc_cmd_get_limit_cgroup2_fd(const char *name, const char *lxcpath)
...
@@ -1760,12 +1795,18 @@ int lxc_cmd_get_limit_cgroup2_fd(const char *name, const char *lxcpath)
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
ret
=
lxc_cmd
(
name
,
&
cmd
,
&
stopped
,
lxcpath
,
NULL
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
-
1
;
return
sysdebug
(
"Failed to process
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP2_FD
));
if
(
cmd
.
rsp
.
ret
<
0
)
if
(
cmd
.
rsp
.
ret
<
0
)
return
syswarn_set
(
cmd
.
rsp
.
ret
,
"Failed to receive cgroup2 limit fd"
);
return
sysdebug_set
(
cmd
.
rsp
.
ret
,
"Failed to receive file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP2_FD
));
return
PTR_TO_INT
(
cmd
.
rsp
.
data
);
fd
=
PTR_TO_INT
(
cmd
.
rsp
.
data
);
if
(
fd
<
0
)
return
sysdebug_set
(
fd
,
"Received invalid file descriptor for
\"
%s
\"
"
,
lxc_cmd_str
(
LXC_CMD_GET_CGROUP2_FD
));
return
fd
;
}
}
static
int
__lxc_cmd_get_cgroup2_fd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
static
int
__lxc_cmd_get_cgroup2_fd_callback
(
int
fd
,
struct
lxc_cmd_req
*
req
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment