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
b8ab4849
Unverified
Commit
b8ab4849
authored
Oct 19, 2018
by
Christian Brauner
Committed by
GitHub
Oct 19, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2703 from 2xsec/asan1
cleanups
parents
9de79b17
47903908
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
84 additions
and
36 deletions
+84
-36
commands.c
src/lxc/commands.c
+1
-1
commands_utils.c
src/lxc/commands_utils.c
+2
-2
confile.c
src/lxc/confile.c
+80
-31
monitor.c
src/lxc/monitor.c
+1
-1
raw_syscalls.c
src/lxc/raw_syscalls.c
+0
-1
No files found.
src/lxc/commands.c
View file @
b8ab4849
...
@@ -1212,7 +1212,7 @@ static int lxc_cmd_accept(int fd, uint32_t events, void *data,
...
@@ -1212,7 +1212,7 @@ static int lxc_cmd_accept(int fd, uint32_t events, void *data,
connection
=
accept
(
fd
,
NULL
,
0
);
connection
=
accept
(
fd
,
NULL
,
0
);
if
(
connection
<
0
)
{
if
(
connection
<
0
)
{
SYSERROR
(
"Failed to accept connection to run command
.
"
);
SYSERROR
(
"Failed to accept connection to run command"
);
return
LXC_MAINLOOP_ERROR
;
return
LXC_MAINLOOP_ERROR
;
}
}
...
...
src/lxc/commands_utils.c
View file @
b8ab4849
...
@@ -120,7 +120,7 @@ int lxc_make_abstract_socket_name(char *path, size_t pathlen,
...
@@ -120,7 +120,7 @@ int lxc_make_abstract_socket_name(char *path, size_t pathlen,
* Although null termination isn't required by the API, we do it anyway
* Although null termination isn't required by the API, we do it anyway
* because we print the sockname out sometimes.
* because we print the sockname out sometimes.
*/
*/
len
=
pathlen
-
2
;
len
=
pathlen
-
2
;
name
=
lxcname
;
name
=
lxcname
;
if
(
!
name
)
if
(
!
name
)
...
@@ -220,6 +220,6 @@ int lxc_add_state_client(int state_client_fd, struct lxc_handler *handler,
...
@@ -220,6 +220,6 @@ int lxc_add_state_client(int state_client_fd, struct lxc_handler *handler,
return
state
;
return
state
;
}
}
TRACE
(
"
a
dded state client %d to state client list"
,
state_client_fd
);
TRACE
(
"
A
dded state client %d to state client list"
,
state_client_fd
);
return
MAX_STATE
;
return
MAX_STATE
;
}
}
src/lxc/confile.c
View file @
b8ab4849
...
@@ -296,7 +296,7 @@ static int set_config_net_type(const char *key, const char *value,
...
@@ -296,7 +296,7 @@ static int set_config_net_type(const char *key, const char *value,
}
else
if
(
!
strcmp
(
value
,
"none"
))
{
}
else
if
(
!
strcmp
(
value
,
"none"
))
{
netdev
->
type
=
LXC_NET_NONE
;
netdev
->
type
=
LXC_NET_NONE
;
}
else
{
}
else
{
ERROR
(
"
i
nvalid network type %s"
,
value
);
ERROR
(
"
I
nvalid network type %s"
,
value
);
return
-
1
;
return
-
1
;
}
}
...
@@ -330,13 +330,14 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf,
...
@@ -330,13 +330,14 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf,
const
char
*
tmpvalue
=
"phys"
;
const
char
*
tmpvalue
=
"phys"
;
if
(
netns_getifaddrs
(
&
ifaddr
,
-
1
,
&
(
bool
){
false
})
<
0
)
{
if
(
netns_getifaddrs
(
&
ifaddr
,
-
1
,
&
(
bool
){
false
})
<
0
)
{
SYSERROR
(
"
Get network interfaces failed
"
);
SYSERROR
(
"
Failed to get network interfaces
"
);
return
-
1
;
return
-
1
;
}
}
for
(
ifa
=
ifaddr
,
n
=
0
;
ifa
!=
NULL
;
ifa
=
ifa
->
ifa_next
,
n
++
)
{
for
(
ifa
=
ifaddr
,
n
=
0
;
ifa
!=
NULL
;
ifa
=
ifa
->
ifa_next
,
n
++
)
{
if
(
!
ifa
->
ifa_addr
)
if
(
!
ifa
->
ifa_addr
)
continue
;
continue
;
if
(
ifa
->
ifa_addr
->
sa_family
!=
AF_PACKET
)
if
(
ifa
->
ifa_addr
->
sa_family
!=
AF_PACKET
)
continue
;
continue
;
...
@@ -347,11 +348,11 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf,
...
@@ -347,11 +348,11 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf,
ret
=
set_config_net_link
(
ret
=
set_config_net_link
(
link_key
,
ifa
->
ifa_name
,
lxc_conf
,
netdev
);
link_key
,
ifa
->
ifa_name
,
lxc_conf
,
netdev
);
if
(
ret
)
{
if
(
ret
)
{
ERROR
(
"
f
ailed to create matched ifnames"
);
ERROR
(
"
F
ailed to create matched ifnames"
);
break
;
break
;
}
}
}
else
{
}
else
{
ERROR
(
"
f
ailed to create matched ifnames"
);
ERROR
(
"
F
ailed to create matched ifnames"
);
break
;
break
;
}
}
}
}
...
@@ -450,6 +451,7 @@ static int set_config_net_hwaddr(const char *key, const char *value,
...
@@ -450,6 +451,7 @@ static int set_config_net_hwaddr(const char *key, const char *value,
}
}
netdev
->
hwaddr
=
new_value
;
netdev
->
hwaddr
=
new_value
;
return
0
;
return
0
;
}
}
...
@@ -505,7 +507,6 @@ static int set_config_net_ipv4_address(const char *key, const char *value,
...
@@ -505,7 +507,6 @@ static int set_config_net_ipv4_address(const char *key, const char *value,
inetdev
=
malloc
(
sizeof
(
*
inetdev
));
inetdev
=
malloc
(
sizeof
(
*
inetdev
));
if
(
!
inetdev
)
if
(
!
inetdev
)
return
-
1
;
return
-
1
;
memset
(
inetdev
,
0
,
sizeof
(
*
inetdev
));
memset
(
inetdev
,
0
,
sizeof
(
*
inetdev
));
list
=
malloc
(
sizeof
(
*
list
));
list
=
malloc
(
sizeof
(
*
list
));
...
@@ -579,8 +580,8 @@ static int set_config_net_ipv4_address(const char *key, const char *value,
...
@@ -579,8 +580,8 @@ static int set_config_net_ipv4_address(const char *key, const char *value,
}
}
lxc_list_add_tail
(
&
netdev
->
ipv4
,
list
);
lxc_list_add_tail
(
&
netdev
->
ipv4
,
list
);
free
(
addr
);
free
(
addr
);
return
0
;
return
0
;
}
}
...
@@ -640,7 +641,6 @@ static int set_config_net_ipv6_address(const char *key, const char *value,
...
@@ -640,7 +641,6 @@ static int set_config_net_ipv6_address(const char *key, const char *value,
inet6dev
=
malloc
(
sizeof
(
*
inet6dev
));
inet6dev
=
malloc
(
sizeof
(
*
inet6dev
));
if
(
!
inet6dev
)
if
(
!
inet6dev
)
return
-
1
;
return
-
1
;
memset
(
inet6dev
,
0
,
sizeof
(
*
inet6dev
));
memset
(
inet6dev
,
0
,
sizeof
(
*
inet6dev
));
list
=
malloc
(
sizeof
(
*
list
));
list
=
malloc
(
sizeof
(
*
list
));
...
@@ -664,6 +664,7 @@ static int set_config_net_ipv6_address(const char *key, const char *value,
...
@@ -664,6 +664,7 @@ static int set_config_net_ipv6_address(const char *key, const char *value,
if
(
slash
)
{
if
(
slash
)
{
*
slash
=
'\0'
;
*
slash
=
'\0'
;
netmask
=
slash
+
1
;
netmask
=
slash
+
1
;
ret
=
lxc_safe_uint
(
netmask
,
&
inet6dev
->
prefix
);
ret
=
lxc_safe_uint
(
netmask
,
&
inet6dev
->
prefix
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
free
(
list
);
free
(
list
);
...
@@ -683,8 +684,8 @@ static int set_config_net_ipv6_address(const char *key, const char *value,
...
@@ -683,8 +684,8 @@ static int set_config_net_ipv6_address(const char *key, const char *value,
}
}
lxc_list_add_tail
(
&
netdev
->
ipv6
,
list
);
lxc_list_add_tail
(
&
netdev
->
ipv6
,
list
);
free
(
valdup
);
free
(
valdup
);
return
0
;
return
0
;
}
}
...
@@ -766,6 +767,7 @@ static int add_hook(struct lxc_conf *lxc_conf, int which, char *hook)
...
@@ -766,6 +767,7 @@ static int add_hook(struct lxc_conf *lxc_conf, int which, char *hook)
hooklist
->
elem
=
hook
;
hooklist
->
elem
=
hook
;
lxc_list_add_tail
(
&
lxc_conf
->
hooks
[
which
],
hooklist
);
lxc_list_add_tail
(
&
lxc_conf
->
hooks
[
which
],
hooklist
);
return
0
;
return
0
;
}
}
...
@@ -868,6 +870,7 @@ static int set_config_hooks(const char *key, const char *value,
...
@@ -868,6 +870,7 @@ static int set_config_hooks(const char *key, const char *value,
return
add_hook
(
lxc_conf
,
LXCHOOK_DESTROY
,
copy
);
return
add_hook
(
lxc_conf
,
LXCHOOK_DESTROY
,
copy
);
free
(
copy
);
free
(
copy
);
return
-
1
;
return
-
1
;
}
}
...
@@ -891,6 +894,7 @@ static int set_config_hooks_version(const char *key, const char *value,
...
@@ -891,6 +894,7 @@ static int set_config_hooks_version(const char *key, const char *value,
}
}
lxc_conf
->
hooks_version
=
tmp
;
lxc_conf
->
hooks_version
=
tmp
;
return
0
;
return
0
;
}
}
...
@@ -923,6 +927,7 @@ static int set_config_pty_max(const char *key, const char *value,
...
@@ -923,6 +927,7 @@ static int set_config_pty_max(const char *key, const char *value,
return
-
1
;
return
-
1
;
lxc_conf
->
pty_max
=
max
;
lxc_conf
->
pty_max
=
max
;
return
0
;
return
0
;
}
}
...
@@ -1041,6 +1046,7 @@ static int set_config_group(const char *key, const char *value,
...
@@ -1041,6 +1046,7 @@ static int set_config_group(const char *key, const char *value,
}
}
free
(
groups
);
free
(
groups
);
return
ret
;
return
ret
;
}
}
...
@@ -1081,6 +1087,7 @@ static int set_config_environment(const char *key, const char *value,
...
@@ -1081,6 +1087,7 @@ static int set_config_environment(const char *key, const char *value,
on_error:
on_error:
free
(
list_item
);
free
(
list_item
);
return
-
1
;
return
-
1
;
}
}
...
@@ -1100,6 +1107,7 @@ static int set_config_tty_max(const char *key, const char *value,
...
@@ -1100,6 +1107,7 @@ static int set_config_tty_max(const char *key, const char *value,
return
-
1
;
return
-
1
;
lxc_conf
->
ttys
.
max
=
nbtty
;
lxc_conf
->
ttys
.
max
=
nbtty
;
return
0
;
return
0
;
}
}
...
@@ -1229,6 +1237,7 @@ static int set_config_log_level(const char *key, const char *value,
...
@@ -1229,6 +1237,7 @@ static int set_config_log_level(const char *key, const char *value,
* current logging.
* current logging.
*/
*/
lxc_conf
->
loglevel
=
newlevel
;
lxc_conf
->
loglevel
=
newlevel
;
return
lxc_log_set_level
(
&
lxc_conf
->
loglevel
,
newlevel
);
return
lxc_log_set_level
(
&
lxc_conf
->
loglevel
,
newlevel
);
}
}
...
@@ -1443,6 +1452,7 @@ static int set_config_prlimit(const char *key, const char *value,
...
@@ -1443,6 +1452,7 @@ static int set_config_prlimit(const char *key, const char *value,
/* soft limit comes first in the value */
/* soft limit comes first in the value */
if
(
!
parse_limit_value
(
&
value
,
&
limit_value
))
if
(
!
parse_limit_value
(
&
value
,
&
limit_value
))
return
-
1
;
return
-
1
;
limit
.
rlim_cur
=
limit_value
;
limit
.
rlim_cur
=
limit_value
;
/* skip spaces and a colon */
/* skip spaces and a colon */
...
@@ -1461,6 +1471,7 @@ static int set_config_prlimit(const char *key, const char *value,
...
@@ -1461,6 +1471,7 @@ static int set_config_prlimit(const char *key, const char *value,
if
(
*
value
)
{
if
(
*
value
)
{
if
(
!
parse_limit_value
(
&
value
,
&
limit_value
))
if
(
!
parse_limit_value
(
&
value
,
&
limit_value
))
return
-
1
;
return
-
1
;
limit
.
rlim_max
=
limit_value
;
limit
.
rlim_max
=
limit_value
;
/* check for trailing garbage */
/* check for trailing garbage */
...
@@ -1496,20 +1507,21 @@ static int set_config_prlimit(const char *key, const char *value,
...
@@ -1496,20 +1507,21 @@ static int set_config_prlimit(const char *key, const char *value,
limelem
->
resource
=
strdup
(
key
);
limelem
->
resource
=
strdup
(
key
);
if
(
!
limelem
->
resource
)
if
(
!
limelem
->
resource
)
goto
on_error
;
goto
on_error
;
limelem
->
limit
=
limit
;
limelem
->
limit
=
limit
;
lxc_list_add_elem
(
limlist
,
limelem
);;
lxc_list_add_elem
(
limlist
,
limelem
);;
lxc_list_add_tail
(
&
lxc_conf
->
limits
,
limlist
);
lxc_list_add_tail
(
&
lxc_conf
->
limits
,
limlist
);
return
0
;
return
0
;
on_error:
on_error:
free
(
limlist
);
free
(
limlist
);
if
(
limelem
)
{
if
(
limelem
)
{
free
(
limelem
->
resource
);
free
(
limelem
->
resource
);
free
(
limelem
);
free
(
limelem
);
}
}
return
-
1
;
return
-
1
;
}
}
...
@@ -1542,6 +1554,7 @@ static int set_config_sysctl(const char *key, const char *value,
...
@@ -1542,6 +1554,7 @@ static int set_config_sysctl(const char *key, const char *value,
free
(
sysctl_elem
->
value
);
free
(
sysctl_elem
->
value
);
sysctl_elem
->
value
=
replace_value
;
sysctl_elem
->
value
=
replace_value
;
return
0
;
return
0
;
}
}
...
@@ -1564,18 +1577,19 @@ static int set_config_sysctl(const char *key, const char *value,
...
@@ -1564,18 +1577,19 @@ static int set_config_sysctl(const char *key, const char *value,
goto
on_error
;
goto
on_error
;
lxc_list_add_elem
(
sysctl_list
,
sysctl_elem
);
lxc_list_add_elem
(
sysctl_list
,
sysctl_elem
);
lxc_list_add_tail
(
&
lxc_conf
->
sysctls
,
sysctl_list
);
lxc_list_add_tail
(
&
lxc_conf
->
sysctls
,
sysctl_list
);
return
0
;
return
0
;
on_error:
on_error:
free
(
sysctl_list
);
free
(
sysctl_list
);
if
(
sysctl_elem
)
{
if
(
sysctl_elem
)
{
free
(
sysctl_elem
->
key
);
free
(
sysctl_elem
->
key
);
free
(
sysctl_elem
->
value
);
free
(
sysctl_elem
->
value
);
free
(
sysctl_elem
);
free
(
sysctl_elem
);
}
}
return
-
1
;
return
-
1
;
}
}
...
@@ -1619,6 +1633,7 @@ static int set_config_proc(const char *key, const char *value,
...
@@ -1619,6 +1633,7 @@ static int set_config_proc(const char *key, const char *value,
on_error:
on_error:
free
(
proclist
);
free
(
proclist
);
if
(
procelem
)
{
if
(
procelem
)
{
free
(
procelem
->
filename
);
free
(
procelem
->
filename
);
free
(
procelem
->
value
);
free
(
procelem
->
value
);
...
@@ -1673,7 +1688,6 @@ static int set_config_idmaps(const char *key, const char *value,
...
@@ -1673,7 +1688,6 @@ static int set_config_idmaps(const char *key, const char *value,
if
(
idmap
->
nsid
==
0
)
if
(
idmap
->
nsid
==
0
)
lxc_conf
->
root_nsuid_map
=
idmap
;
lxc_conf
->
root_nsuid_map
=
idmap
;
if
(
!
lxc_conf
->
root_nsgid_map
&&
idmap
->
idtype
==
ID_TYPE_GID
)
if
(
!
lxc_conf
->
root_nsgid_map
&&
idmap
->
idtype
==
ID_TYPE_GID
)
if
(
idmap
->
nsid
==
0
)
if
(
idmap
->
nsid
==
0
)
lxc_conf
->
root_nsgid_map
=
idmap
;
lxc_conf
->
root_nsgid_map
=
idmap
;
...
@@ -1772,6 +1786,7 @@ static int set_config_mount_auto(const char *key, const char *value,
...
@@ -1772,6 +1786,7 @@ static int set_config_mount_auto(const char *key, const char *value,
lxc_conf
->
auto_mounts
&=
~
allowed_auto_mounts
[
i
].
mask
;
lxc_conf
->
auto_mounts
&=
~
allowed_auto_mounts
[
i
].
mask
;
lxc_conf
->
auto_mounts
|=
allowed_auto_mounts
[
i
].
flag
;
lxc_conf
->
auto_mounts
|=
allowed_auto_mounts
[
i
].
flag
;
if
(
is_shmounts
)
{
if
(
is_shmounts
)
{
lxc_conf
->
shmount
.
path_host
=
strdup
(
token
+
STRLITERALLEN
(
"shmounts:"
));
lxc_conf
->
shmount
.
path_host
=
strdup
(
token
+
STRLITERALLEN
(
"shmounts:"
));
if
(
!
lxc_conf
->
shmount
.
path_host
)
{
if
(
!
lxc_conf
->
shmount
.
path_host
)
{
...
@@ -1986,6 +2001,7 @@ static int set_config_console_buffer_size(const char *key, const char *value,
...
@@ -1986,6 +2001,7 @@ static int set_config_console_buffer_size(const char *key, const char *value,
"next power of two: %"
PRIu64
" bytes"
,
buffer_size
);
"next power of two: %"
PRIu64
" bytes"
,
buffer_size
);
lxc_conf
->
console
.
buffer_size
=
buffer_size
;
lxc_conf
->
console
.
buffer_size
=
buffer_size
;
return
0
;
return
0
;
}
}
...
@@ -2033,6 +2049,7 @@ static int set_config_console_size(const char *key, const char *value,
...
@@ -2033,6 +2049,7 @@ static int set_config_console_size(const char *key, const char *value,
"next power of two: %"
PRIu64
" bytes"
,
log_size
);
"next power of two: %"
PRIu64
" bytes"
,
log_size
);
lxc_conf
->
console
.
log_size
=
log_size
;
lxc_conf
->
console
.
log_size
=
log_size
;
return
0
;
return
0
;
}
}
...
@@ -2148,11 +2165,13 @@ static int set_config_rootfs_path(const char *key, const char *value,
...
@@ -2148,11 +2165,13 @@ static int set_config_rootfs_path(const char *key, const char *value,
tmp
=
strchr
(
dup
,
':'
);
tmp
=
strchr
(
dup
,
':'
);
if
(
tmp
)
{
if
(
tmp
)
{
*
tmp
=
'\0'
;
*
tmp
=
'\0'
;
ret
=
set_config_path_item
(
&
lxc_conf
->
rootfs
.
bdev_type
,
dup
);
ret
=
set_config_path_item
(
&
lxc_conf
->
rootfs
.
bdev_type
,
dup
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
free
(
dup
);
free
(
dup
);
return
-
1
;
return
-
1
;
}
}
tmp
++
;
tmp
++
;
container_path
=
tmp
;
container_path
=
tmp
;
}
else
{
}
else
{
...
@@ -2161,6 +2180,7 @@ static int set_config_rootfs_path(const char *key, const char *value,
...
@@ -2161,6 +2180,7 @@ static int set_config_rootfs_path(const char *key, const char *value,
ret
=
set_config_path_item
(
&
lxc_conf
->
rootfs
.
path
,
container_path
);
ret
=
set_config_path_item
(
&
lxc_conf
->
rootfs
.
path
,
container_path
);
free
(
dup
);
free
(
dup
);
return
ret
;
return
ret
;
}
}
...
@@ -2422,6 +2442,7 @@ static int parse_line(char *buffer, void *data)
...
@@ -2422,6 +2442,7 @@ static int parse_line(char *buffer, void *data)
on_error:
on_error:
free
(
linep
);
free
(
linep
);
return
ret
;
return
ret
;
}
}
...
@@ -2522,6 +2543,7 @@ int lxc_config_define_add(struct lxc_list *defines, char *arg)
...
@@ -2522,6 +2543,7 @@ int lxc_config_define_add(struct lxc_list *defines, char *arg)
}
}
lxc_list_add_tail
(
defines
,
dent
);
lxc_list_add_tail
(
defines
,
dent
);
return
0
;
return
0
;
}
}
...
@@ -2538,6 +2560,7 @@ bool lxc_config_define_load(struct lxc_list *defines, struct lxc_container *c)
...
@@ -2538,6 +2560,7 @@ bool lxc_config_define_load(struct lxc_list *defines, struct lxc_container *c)
}
}
lxc_config_define_free
(
defines
);
lxc_config_define_free
(
defines
);
return
bret
;
return
bret
;
}
}
...
@@ -2693,14 +2716,17 @@ void clear_unexp_config_line(struct lxc_conf *conf, const char *key,
...
@@ -2693,14 +2716,17 @@ void clear_unexp_config_line(struct lxc_conf *conf, const char *key,
while
(
*
lstart
)
{
while
(
*
lstart
)
{
lend
=
strchr
(
lstart
,
'\n'
);
lend
=
strchr
(
lstart
,
'\n'
);
char
v
;
char
v
;
if
(
!
lend
)
if
(
!
lend
)
lend
=
lstart
+
strlen
(
lstart
);
lend
=
lstart
+
strlen
(
lstart
);
else
else
lend
++
;
lend
++
;
if
(
strncmp
(
lstart
,
key
,
strlen
(
key
))
!=
0
)
{
if
(
strncmp
(
lstart
,
key
,
strlen
(
key
))
!=
0
)
{
lstart
=
lend
;
lstart
=
lend
;
continue
;
continue
;
}
}
if
(
!
rm_subkeys
)
{
if
(
!
rm_subkeys
)
{
v
=
lstart
[
strlen
(
key
)];
v
=
lstart
[
strlen
(
key
)];
if
(
!
isspace
(
v
)
&&
v
!=
'='
)
{
if
(
!
isspace
(
v
)
&&
v
!=
'='
)
{
...
@@ -2708,11 +2734,14 @@ void clear_unexp_config_line(struct lxc_conf *conf, const char *key,
...
@@ -2708,11 +2734,14 @@ void clear_unexp_config_line(struct lxc_conf *conf, const char *key,
continue
;
continue
;
}
}
}
}
conf
->
unexpanded_len
-=
(
lend
-
lstart
);
conf
->
unexpanded_len
-=
(
lend
-
lstart
);
if
(
*
lend
==
'\0'
)
{
if
(
*
lend
==
'\0'
)
{
*
lstart
=
'\0'
;
*
lstart
=
'\0'
;
return
;
return
;
}
}
memmove
(
lstart
,
lend
,
strlen
(
lend
)
+
1
);
memmove
(
lstart
,
lend
,
strlen
(
lend
)
+
1
);
}
}
}
}
...
@@ -2784,9 +2813,10 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath,
...
@@ -2784,9 +2813,10 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath,
if
(
olddirlen
>=
newdirlen
)
{
if
(
olddirlen
>=
newdirlen
)
{
size_t
diff
=
olddirlen
-
newdirlen
;
size_t
diff
=
olddirlen
-
newdirlen
;
memcpy
(
q
,
newdir
,
newdirlen
);
memcpy
(
q
,
newdir
,
newdirlen
);
if
(
olddirlen
!=
newdirlen
)
{
if
(
olddirlen
!=
newdirlen
)
{
memmove
(
q
+
newdirlen
,
q
+
newdirlen
+
diff
,
memmove
(
q
+
newdirlen
,
q
+
newdirlen
+
diff
,
strlen
(
q
)
-
newdirlen
-
diff
+
1
);
strlen
(
q
)
-
newdirlen
-
diff
+
1
);
lend
-=
diff
;
lend
-=
diff
;
conf
->
unexpanded_len
-=
diff
;
conf
->
unexpanded_len
-=
diff
;
}
}
...
@@ -2805,15 +2835,18 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath,
...
@@ -2805,15 +2835,18 @@ bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char *oldpath,
conf
->
unexpanded_alloced
=
newlen
+
1
;
conf
->
unexpanded_alloced
=
newlen
+
1
;
new
[
newlen
-
1
]
=
'\0'
;
new
[
newlen
-
1
]
=
'\0'
;
lend
=
new
+
(
lend
-
conf
->
unexpanded_config
);
lend
=
new
+
(
lend
-
conf
->
unexpanded_config
);
/* Move over the remainder to make room for the newdir.
/* Move over the remainder to make room for the newdir.
*/
*/
memmove
(
new
+
poffset
+
newdirlen
,
memmove
(
new
+
poffset
+
newdirlen
,
new
+
poffset
+
olddirlen
,
new
+
poffset
+
olddirlen
,
oldlen
-
poffset
-
olddirlen
+
1
);
oldlen
-
poffset
-
olddirlen
+
1
);
conf
->
unexpanded_config
=
new
;
conf
->
unexpanded_config
=
new
;
memcpy
(
new
+
poffset
,
newdir
,
newdirlen
);
memcpy
(
new
+
poffset
,
newdir
,
newdirlen
);
lend
+=
diff
;
lend
+=
diff
;
}
}
next:
next:
lstart
=
lend
;
lstart
=
lend
;
}
}
...
@@ -2874,9 +2907,10 @@ bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath,
...
@@ -2874,9 +2907,10 @@ bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath,
if
(
olddirlen
>=
newdirlen
)
{
if
(
olddirlen
>=
newdirlen
)
{
size_t
diff
=
olddirlen
-
newdirlen
;
size_t
diff
=
olddirlen
-
newdirlen
;
memcpy
(
p
,
newdir
,
newdirlen
);
memcpy
(
p
,
newdir
,
newdirlen
);
if
(
olddirlen
!=
newdirlen
)
{
if
(
olddirlen
!=
newdirlen
)
{
memmove
(
p
+
newdirlen
,
p
+
newdirlen
+
diff
,
memmove
(
p
+
newdirlen
,
p
+
newdirlen
+
diff
,
strlen
(
p
)
-
newdirlen
-
diff
+
1
);
strlen
(
p
)
-
newdirlen
-
diff
+
1
);
lend
-=
diff
;
lend
-=
diff
;
conf
->
unexpanded_len
-=
diff
;
conf
->
unexpanded_len
-=
diff
;
}
}
...
@@ -2895,15 +2929,18 @@ bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath,
...
@@ -2895,15 +2929,18 @@ bool clone_update_unexp_hooks(struct lxc_conf *conf, const char *oldpath,
conf
->
unexpanded_alloced
=
newlen
+
1
;
conf
->
unexpanded_alloced
=
newlen
+
1
;
new
[
newlen
-
1
]
=
'\0'
;
new
[
newlen
-
1
]
=
'\0'
;
lend
=
new
+
(
lend
-
conf
->
unexpanded_config
);
lend
=
new
+
(
lend
-
conf
->
unexpanded_config
);
/* Move over the remainder to make room for the newdir.
/* Move over the remainder to make room for the newdir.
*/
*/
memmove
(
new
+
poffset
+
newdirlen
,
memmove
(
new
+
poffset
+
newdirlen
,
new
+
poffset
+
olddirlen
,
new
+
poffset
+
olddirlen
,
oldlen
-
poffset
-
olddirlen
+
1
);
oldlen
-
poffset
-
olddirlen
+
1
);
conf
->
unexpanded_config
=
new
;
conf
->
unexpanded_config
=
new
;
memcpy
(
new
+
poffset
,
newdir
,
newdirlen
);
memcpy
(
new
+
poffset
,
newdir
,
newdirlen
);
lend
+=
diff
;
lend
+=
diff
;
}
}
next:
next:
lstart
=
lend
;
lstart
=
lend
;
}
}
...
@@ -3026,6 +3063,7 @@ static int set_config_log_syslog(const char *key, const char *value,
...
@@ -3026,6 +3063,7 @@ static int set_config_log_syslog(const char *key, const char *value,
return
-
1
;
return
-
1
;
lxc_log_syslog
(
facility
);
lxc_log_syslog
(
facility
);
return
set_config_string_item
(
&
lxc_conf
->
syslog
,
value
);
return
set_config_string_item
(
&
lxc_conf
->
syslog
,
value
);
}
}
...
@@ -3195,9 +3233,9 @@ static int __get_config_cgroup_controller(const char *key, char *retv,
...
@@ -3195,9 +3233,9 @@ static int __get_config_cgroup_controller(const char *key, char *retv,
if
(
version
!=
cg
->
version
)
if
(
version
!=
cg
->
version
)
continue
;
continue
;
strprint
(
retv
,
inlen
,
"%s.%s = %s
\n
"
,
strprint
(
retv
,
inlen
,
"%s.%s = %s
\n
"
,
global_token
,
global_token
,
cg
->
subsystem
,
cg
->
value
);
cg
->
subsystem
,
cg
->
value
);
}
else
if
(
!
strcmp
(
cg
->
subsystem
,
key
)
)
{
}
else
if
(
strcmp
(
cg
->
subsystem
,
key
)
==
0
)
{
strprint
(
retv
,
inlen
,
"%s
\n
"
,
cg
->
value
);
strprint
(
retv
,
inlen
,
"%s
\n
"
,
cg
->
value
);
}
}
}
}
...
@@ -3288,6 +3326,7 @@ static int get_config_idmaps(const char *key, char *retv, int inlen,
...
@@ -3288,6 +3326,7 @@ static int get_config_idmaps(const char *key, char *retv, int inlen,
strprint
(
retv
,
inlen
,
"%s%s"
,
buf
,
(
listlen
--
>
1
)
?
"
\n
"
:
""
);
strprint
(
retv
,
inlen
,
"%s%s"
,
buf
,
(
listlen
--
>
1
)
?
"
\n
"
:
""
);
}
}
return
fulllen
;
return
fulllen
;
}
}
...
@@ -3446,19 +3485,21 @@ static int get_config_hooks(const char *key, char *retv, int inlen,
...
@@ -3446,19 +3485,21 @@ static int get_config_hooks(const char *key, char *retv, int inlen,
int
i
;
int
i
;
subkey
=
strchr
(
key
,
'.'
);
subkey
=
strchr
(
key
,
'.'
);
if
(
subkey
)
subkey
=
strchr
(
subkey
+
1
,
'.'
);
if
(
!
subkey
)
if
(
!
subkey
)
return
-
1
;
return
-
1
;
subkey
=
strchr
(
subkey
+
1
,
'.'
);
subkey
++
;
subkey
++
;
if
(
!*
subkey
)
if
(
!*
subkey
)
return
-
1
;
return
-
1
;
for
(
i
=
0
;
i
<
NUM_LXC_HOOKS
;
i
++
)
{
for
(
i
=
0
;
i
<
NUM_LXC_HOOKS
;
i
++
)
{
if
(
strcmp
(
lxchook_names
[
i
],
subkey
)
==
0
)
{
if
(
strcmp
(
lxchook_names
[
i
],
subkey
)
==
0
)
{
found
=
i
;
found
=
i
;
break
;
break
;
}
}
}
}
if
(
found
==
-
1
)
if
(
found
==
-
1
)
return
-
1
;
return
-
1
;
...
@@ -3470,6 +3511,7 @@ static int get_config_hooks(const char *key, char *retv, int inlen,
...
@@ -3470,6 +3511,7 @@ static int get_config_hooks(const char *key, char *retv, int inlen,
lxc_list_for_each
(
it
,
&
c
->
hooks
[
found
])
{
lxc_list_for_each
(
it
,
&
c
->
hooks
[
found
])
{
strprint
(
retv
,
inlen
,
"%s
\n
"
,
(
char
*
)
it
->
elem
);
strprint
(
retv
,
inlen
,
"%s
\n
"
,
(
char
*
)
it
->
elem
);
}
}
return
fulllen
;
return
fulllen
;
}
}
...
@@ -3713,7 +3755,7 @@ static int get_config_no_new_privs(const char *key, char *retv, int inlen,
...
@@ -3713,7 +3755,7 @@ static int get_config_no_new_privs(const char *key, char *retv, int inlen,
* printed, in 'lxc.prlimit.resource = value' format.
* printed, in 'lxc.prlimit.resource = value' format.
*/
*/
static
int
get_config_prlimit
(
const
char
*
key
,
char
*
retv
,
int
inlen
,
static
int
get_config_prlimit
(
const
char
*
key
,
char
*
retv
,
int
inlen
,
struct
lxc_conf
*
c
,
void
*
data
)
struct
lxc_conf
*
c
,
void
*
data
)
{
{
int
fulllen
=
0
,
len
;
int
fulllen
=
0
,
len
;
bool
get_all
=
false
;
bool
get_all
=
false
;
...
@@ -3744,6 +3786,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen,
...
@@ -3744,6 +3786,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen,
partlen
=
sprintf
(
buf
,
"%"
PRIu64
,
partlen
=
sprintf
(
buf
,
"%"
PRIu64
,
(
uint64_t
)
lim
->
limit
.
rlim_cur
);
(
uint64_t
)
lim
->
limit
.
rlim_cur
);
}
}
if
(
lim
->
limit
.
rlim_cur
!=
lim
->
limit
.
rlim_max
)
{
if
(
lim
->
limit
.
rlim_cur
!=
lim
->
limit
.
rlim_max
)
{
if
(
lim
->
limit
.
rlim_max
==
RLIM_INFINITY
)
if
(
lim
->
limit
.
rlim_max
==
RLIM_INFINITY
)
memcpy
(
buf
+
partlen
,
":unlimited"
,
memcpy
(
buf
+
partlen
,
":unlimited"
,
...
@@ -3756,7 +3799,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen,
...
@@ -3756,7 +3799,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen,
if
(
get_all
)
{
if
(
get_all
)
{
strprint
(
retv
,
inlen
,
"lxc.prlimit.%s = %s
\n
"
,
strprint
(
retv
,
inlen
,
"lxc.prlimit.%s = %s
\n
"
,
lim
->
resource
,
buf
);
lim
->
resource
,
buf
);
}
else
if
(
!
strcmp
(
lim
->
resource
,
key
)
)
{
}
else
if
(
strcmp
(
lim
->
resource
,
key
)
==
0
)
{
strprint
(
retv
,
inlen
,
"%s"
,
buf
);
strprint
(
retv
,
inlen
,
"%s"
,
buf
);
}
}
}
}
...
@@ -3769,7 +3812,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen,
...
@@ -3769,7 +3812,7 @@ static int get_config_prlimit(const char *key, char *retv, int inlen,
* entries will be printed, in 'lxc.sysctl.key = value' format.
* entries will be printed, in 'lxc.sysctl.key = value' format.
*/
*/
static
int
get_config_sysctl
(
const
char
*
key
,
char
*
retv
,
int
inlen
,
static
int
get_config_sysctl
(
const
char
*
key
,
char
*
retv
,
int
inlen
,
struct
lxc_conf
*
c
,
void
*
data
)
struct
lxc_conf
*
c
,
void
*
data
)
{
{
int
len
;
int
len
;
struct
lxc_list
*
it
;
struct
lxc_list
*
it
;
...
@@ -3791,8 +3834,8 @@ static int get_config_sysctl(const char *key, char *retv, int inlen,
...
@@ -3791,8 +3834,8 @@ static int get_config_sysctl(const char *key, char *retv, int inlen,
lxc_list_for_each
(
it
,
&
c
->
sysctls
)
{
lxc_list_for_each
(
it
,
&
c
->
sysctls
)
{
struct
lxc_sysctl
*
elem
=
it
->
elem
;
struct
lxc_sysctl
*
elem
=
it
->
elem
;
if
(
get_all
)
{
if
(
get_all
)
{
strprint
(
retv
,
inlen
,
"lxc.sysctl.%s = %s
\n
"
,
strprint
(
retv
,
inlen
,
"lxc.sysctl.%s = %s
\n
"
,
elem
->
key
,
elem
->
key
,
elem
->
value
);
elem
->
value
);
}
else
if
(
strcmp
(
elem
->
key
,
key
)
==
0
)
{
}
else
if
(
strcmp
(
elem
->
key
,
key
)
==
0
)
{
strprint
(
retv
,
inlen
,
"%s"
,
elem
->
value
);
strprint
(
retv
,
inlen
,
"%s"
,
elem
->
value
);
}
}
...
@@ -3802,7 +3845,7 @@ static int get_config_sysctl(const char *key, char *retv, int inlen,
...
@@ -3802,7 +3845,7 @@ static int get_config_sysctl(const char *key, char *retv, int inlen,
}
}
static
int
get_config_proc
(
const
char
*
key
,
char
*
retv
,
int
inlen
,
static
int
get_config_proc
(
const
char
*
key
,
char
*
retv
,
int
inlen
,
struct
lxc_conf
*
c
,
void
*
data
)
struct
lxc_conf
*
c
,
void
*
data
)
{
{
struct
lxc_list
*
it
;
struct
lxc_list
*
it
;
int
len
;
int
len
;
...
@@ -3826,7 +3869,7 @@ static int get_config_proc(const char *key, char *retv, int inlen,
...
@@ -3826,7 +3869,7 @@ static int get_config_proc(const char *key, char *retv, int inlen,
if
(
get_all
)
{
if
(
get_all
)
{
strprint
(
retv
,
inlen
,
"lxc.proc.%s = %s
\n
"
,
strprint
(
retv
,
inlen
,
"lxc.proc.%s = %s
\n
"
,
proc
->
filename
,
proc
->
value
);
proc
->
filename
,
proc
->
value
);
}
else
if
(
strcmp
(
proc
->
filename
,
key
)
==
0
)
{
}
else
if
(
strcmp
(
proc
->
filename
,
key
)
==
0
)
{
strprint
(
retv
,
inlen
,
"%s"
,
proc
->
value
);
strprint
(
retv
,
inlen
,
"%s"
,
proc
->
value
);
}
}
...
@@ -4401,7 +4444,7 @@ static struct lxc_config_t *get_network_config_ops(const char *key,
...
@@ -4401,7 +4444,7 @@ static struct lxc_config_t *get_network_config_ops(const char *key,
*/
*/
if
(
tmpidx
==
INT_MAX
)
{
if
(
tmpidx
==
INT_MAX
)
{
SYSERROR
(
"Number of configured networks would overflow the "
SYSERROR
(
"Number of configured networks would overflow the "
"counter"
);
"counter"
);
goto
on_error
;
goto
on_error
;
}
}
*
idx
=
tmpidx
;
*
idx
=
tmpidx
;
...
@@ -4472,6 +4515,7 @@ static int set_config_net_nic(const char *key, const char *value,
...
@@ -4472,6 +4515,7 @@ static int set_config_net_nic(const char *key, const char *value,
ret
=
config
->
set
(
deindexed_key
,
value
,
lxc_conf
,
netdev
);
ret
=
config
->
set
(
deindexed_key
,
value
,
lxc_conf
,
netdev
);
free
(
deindexed_key
);
free
(
deindexed_key
);
return
ret
;
return
ret
;
}
}
...
@@ -4517,6 +4561,7 @@ static int clr_config_net_nic(const char *key, struct lxc_conf *lxc_conf,
...
@@ -4517,6 +4561,7 @@ static int clr_config_net_nic(const char *key, struct lxc_conf *lxc_conf,
ret
=
config
->
clr
(
deindexed_key
,
lxc_conf
,
netdev
);
ret
=
config
->
clr
(
deindexed_key
,
lxc_conf
,
netdev
);
free
(
deindexed_key
);
free
(
deindexed_key
);
return
ret
;
return
ret
;
}
}
...
@@ -4760,6 +4805,7 @@ static int get_config_net_nic(const char *key, char *retv, int inlen,
...
@@ -4760,6 +4805,7 @@ static int get_config_net_nic(const char *key, char *retv, int inlen,
ret
=
config
->
get
(
deindexed_key
,
retv
,
inlen
,
c
,
netdev
);
ret
=
config
->
get
(
deindexed_key
,
retv
,
inlen
,
c
,
netdev
);
free
(
deindexed_key
);
free
(
deindexed_key
);
return
ret
;
return
ret
;
}
}
...
@@ -5066,6 +5112,7 @@ static int get_config_net_ipv4_address(const char *key, char *retv, int inlen,
...
@@ -5066,6 +5112,7 @@ static int get_config_net_ipv4_address(const char *key, char *retv, int inlen,
return
-
1
;
return
-
1
;
listlen
=
lxc_list_len
(
&
netdev
->
ipv4
);
listlen
=
lxc_list_len
(
&
netdev
->
ipv4
);
lxc_list_for_each
(
it
,
&
netdev
->
ipv4
)
{
lxc_list_for_each
(
it
,
&
netdev
->
ipv4
)
{
struct
lxc_inetdev
*
i
=
it
->
elem
;
struct
lxc_inetdev
*
i
=
it
->
elem
;
inet_ntop
(
AF_INET
,
&
i
->
addr
,
buf
,
sizeof
(
buf
));
inet_ntop
(
AF_INET
,
&
i
->
addr
,
buf
,
sizeof
(
buf
));
...
@@ -5121,6 +5168,7 @@ static int get_config_net_ipv6_address(const char *key, char *retv, int inlen,
...
@@ -5121,6 +5168,7 @@ static int get_config_net_ipv6_address(const char *key, char *retv, int inlen,
return
-
1
;
return
-
1
;
listlen
=
lxc_list_len
(
&
netdev
->
ipv6
);
listlen
=
lxc_list_len
(
&
netdev
->
ipv6
);
lxc_list_for_each
(
it
,
&
netdev
->
ipv6
)
{
lxc_list_for_each
(
it
,
&
netdev
->
ipv6
)
{
struct
lxc_inet6dev
*
i
=
it
->
elem
;
struct
lxc_inet6dev
*
i
=
it
->
elem
;
inet_ntop
(
AF_INET6
,
&
i
->
addr
,
buf
,
sizeof
(
buf
));
inet_ntop
(
AF_INET6
,
&
i
->
addr
,
buf
,
sizeof
(
buf
));
...
@@ -5248,6 +5296,7 @@ int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen)
...
@@ -5248,6 +5296,7 @@ int lxc_list_net(struct lxc_conf *c, const char *key, char *retv, int inlen)
strprint
(
retv
,
inlen
,
"type
\n
"
);
strprint
(
retv
,
inlen
,
"type
\n
"
);
strprint
(
retv
,
inlen
,
"script.up
\n
"
);
strprint
(
retv
,
inlen
,
"script.up
\n
"
);
strprint
(
retv
,
inlen
,
"script.down
\n
"
);
strprint
(
retv
,
inlen
,
"script.down
\n
"
);
if
(
netdev
->
type
!=
LXC_NET_EMPTY
)
{
if
(
netdev
->
type
!=
LXC_NET_EMPTY
)
{
strprint
(
retv
,
inlen
,
"flags
\n
"
);
strprint
(
retv
,
inlen
,
"flags
\n
"
);
strprint
(
retv
,
inlen
,
"link
\n
"
);
strprint
(
retv
,
inlen
,
"link
\n
"
);
...
...
src/lxc/monitor.c
View file @
b8ab4849
...
@@ -79,7 +79,7 @@ int lxc_monitor_fifo_name(const char *lxcpath, char *fifo_path, size_t fifo_path
...
@@ -79,7 +79,7 @@ int lxc_monitor_fifo_name(const char *lxcpath, char *fifo_path, size_t fifo_path
}
}
ret
=
mkdir_p
(
fifo_path
,
0755
);
ret
=
mkdir_p
(
fifo_path
,
0755
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
ERROR
(
"Unable to create monitor fifo directory %s
.
"
,
fifo_path
);
ERROR
(
"Unable to create monitor fifo directory %s"
,
fifo_path
);
free
(
rundir
);
free
(
rundir
);
return
ret
;
return
ret
;
}
}
...
...
src/lxc/raw_syscalls.c
View file @
b8ab4849
...
@@ -34,7 +34,6 @@ int lxc_raw_execveat(int dirfd, const char *pathname, char *const argv[],
...
@@ -34,7 +34,6 @@ int lxc_raw_execveat(int dirfd, const char *pathname, char *const argv[],
*/
*/
pid_t
lxc_raw_clone
(
unsigned
long
flags
)
pid_t
lxc_raw_clone
(
unsigned
long
flags
)
{
{
/*
/*
* These flags don't interest at all so we don't jump through any hoopes
* These flags don't interest at all so we don't jump through any hoopes
* of retrieving them and passing them to the kernel.
* of retrieving them and passing them to the kernel.
...
...
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