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
9ba8130c
Commit
9ba8130c
authored
Jul 31, 2012
by
Serge Hallyn
Committed by
Daniel Lezcano
Jul 31, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
switch all sprintfs which can overrun to snprintfs
and check return values Signed-off-by:
Serge Hallyn
<
serge.hallyn@ubuntu.com
>
Signed-off-by:
Daniel Lezcano
<
dlezcano@fr.ibm.com
>
parent
a0a2066d
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
172 additions
and
35 deletions
+172
-35
cgroup.c
src/lxc/cgroup.c
+47
-8
commands.c
src/lxc/commands.c
+14
-2
conf.c
src/lxc/conf.c
+69
-16
execute.c
src/lxc/execute.c
+17
-3
freezer.c
src/lxc/freezer.c
+5
-1
lxc_monitor.c
src/lxc/lxc_monitor.c
+9
-2
network.c
src/lxc/network.c
+8
-2
state.c
src/lxc/state.c
+3
-1
No files found.
src/lxc/cgroup.c
View file @
9ba8130c
...
@@ -261,13 +261,18 @@ static int lxc_one_cgroup_attach(const char *name,
...
@@ -261,13 +261,18 @@ static int lxc_one_cgroup_attach(const char *name,
char
tasks
[
MAXPATHLEN
],
initcgroup
[
MAXPATHLEN
];
char
tasks
[
MAXPATHLEN
],
initcgroup
[
MAXPATHLEN
];
char
*
cgmnt
=
mntent
->
mnt_dir
;
char
*
cgmnt
=
mntent
->
mnt_dir
;
int
flags
,
ret
=
0
;
int
flags
,
ret
=
0
;
int
rc
;
flags
=
get_cgroup_flags
(
mntent
);
flags
=
get_cgroup_flags
(
mntent
);
snprintf
(
tasks
,
MAXPATHLEN
,
"%s%s%s/%s/tasks"
,
cgmnt
,
rc
=
snprintf
(
tasks
,
MAXPATHLEN
,
"%s%s%s/%s/tasks"
,
cgmnt
,
get_init_cgroup
(
NULL
,
mntent
,
initcgroup
),
get_init_cgroup
(
NULL
,
mntent
,
initcgroup
),
(
flags
&
CGROUP_NS_CGROUP
)
?
""
:
"/lxc"
,
(
flags
&
CGROUP_NS_CGROUP
)
?
""
:
"/lxc"
,
name
);
name
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"pathname too long"
);
return
-
1
;
}
f
=
fopen
(
tasks
,
"w"
);
f
=
fopen
(
tasks
,
"w"
);
if
(
!
f
)
{
if
(
!
f
)
{
...
@@ -500,6 +505,7 @@ int recursive_rmdir(char *dirname)
...
@@ -500,6 +505,7 @@ int recursive_rmdir(char *dirname)
while
(
!
readdir_r
(
dir
,
&
dirent
,
&
direntp
))
{
while
(
!
readdir_r
(
dir
,
&
dirent
,
&
direntp
))
{
struct
stat
mystat
;
struct
stat
mystat
;
int
rc
;
if
(
!
direntp
)
if
(
!
direntp
)
break
;
break
;
...
@@ -508,7 +514,11 @@ int recursive_rmdir(char *dirname)
...
@@ -508,7 +514,11 @@ int recursive_rmdir(char *dirname)
!
strcmp
(
direntp
->
d_name
,
".."
))
!
strcmp
(
direntp
->
d_name
,
".."
))
continue
;
continue
;
snprintf
(
pathname
,
MAXPATHLEN
,
"%s/%s"
,
dirname
,
direntp
->
d_name
);
rc
=
snprintf
(
pathname
,
MAXPATHLEN
,
"%s/%s"
,
dirname
,
direntp
->
d_name
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"pathname too long"
);
continue
;
}
ret
=
stat
(
pathname
,
&
mystat
);
ret
=
stat
(
pathname
,
&
mystat
);
if
(
ret
)
if
(
ret
)
continue
;
continue
;
...
@@ -530,10 +540,15 @@ int lxc_one_cgroup_destroy(struct mntent *mntent, const char *name)
...
@@ -530,10 +540,15 @@ int lxc_one_cgroup_destroy(struct mntent *mntent, const char *name)
char
cgname
[
MAXPATHLEN
],
initcgroup
[
MAXPATHLEN
];
char
cgname
[
MAXPATHLEN
],
initcgroup
[
MAXPATHLEN
];
char
*
cgmnt
=
mntent
->
mnt_dir
;
char
*
cgmnt
=
mntent
->
mnt_dir
;
int
flags
=
get_cgroup_flags
(
mntent
);
int
flags
=
get_cgroup_flags
(
mntent
);
int
rc
;
snprintf
(
cgname
,
MAXPATHLEN
,
"%s%s%s/%s"
,
cgmnt
,
rc
=
snprintf
(
cgname
,
MAXPATHLEN
,
"%s%s%s/%s"
,
cgmnt
,
get_init_cgroup
(
NULL
,
mntent
,
initcgroup
),
get_init_cgroup
(
NULL
,
mntent
,
initcgroup
),
(
flags
&
CGROUP_NS_CGROUP
)
?
""
:
"/lxc"
,
name
);
(
flags
&
CGROUP_NS_CGROUP
)
?
""
:
"/lxc"
,
name
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"name too long"
);
return
-
1
;
}
DEBUG
(
"destroying %s
\n
"
,
cgname
);
DEBUG
(
"destroying %s
\n
"
,
cgname
);
if
(
recursive_rmdir
(
cgname
))
{
if
(
recursive_rmdir
(
cgname
))
{
SYSERROR
(
"failed to remove cgroup '%s'"
,
cgname
);
SYSERROR
(
"failed to remove cgroup '%s'"
,
cgname
);
...
@@ -583,11 +598,16 @@ int lxc_cgroup_path_get(char **path, const char *subsystem, const char *name)
...
@@ -583,11 +598,16 @@ int lxc_cgroup_path_get(char **path, const char *subsystem, const char *name)
{
{
static
char
buf
[
MAXPATHLEN
];
static
char
buf
[
MAXPATHLEN
];
static
char
retbuf
[
MAXPATHLEN
];
static
char
retbuf
[
MAXPATHLEN
];
int
rc
;
/* lxc_cgroup_set passes a state object for the subsystem,
/* lxc_cgroup_set passes a state object for the subsystem,
* so trim it to just the subsystem part */
* so trim it to just the subsystem part */
if
(
subsystem
)
{
if
(
subsystem
)
{
snprintf
(
retbuf
,
MAXPATHLEN
,
"%s"
,
subsystem
);
rc
=
snprintf
(
retbuf
,
MAXPATHLEN
,
"%s"
,
subsystem
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"subsystem name too long"
);
return
-
1
;
}
char
*
s
=
index
(
retbuf
,
'.'
);
char
*
s
=
index
(
retbuf
,
'.'
);
if
(
s
)
if
(
s
)
*
s
=
'\0'
;
*
s
=
'\0'
;
...
@@ -598,7 +618,11 @@ int lxc_cgroup_path_get(char **path, const char *subsystem, const char *name)
...
@@ -598,7 +618,11 @@ int lxc_cgroup_path_get(char **path, const char *subsystem, const char *name)
return
-
1
;
return
-
1
;
}
}
snprintf
(
retbuf
,
MAXPATHLEN
,
"%s/%s"
,
buf
,
name
);
rc
=
snprintf
(
retbuf
,
MAXPATHLEN
,
"%s/%s"
,
buf
,
name
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"name too long"
);
return
-
1
;
}
DEBUG
(
"%s: returning %s for subsystem %s"
,
__func__
,
retbuf
,
subsystem
);
DEBUG
(
"%s: returning %s for subsystem %s"
,
__func__
,
retbuf
,
subsystem
);
...
@@ -611,12 +635,17 @@ int lxc_cgroup_set(const char *name, const char *filename, const char *value)
...
@@ -611,12 +635,17 @@ int lxc_cgroup_set(const char *name, const char *filename, const char *value)
int
fd
,
ret
;
int
fd
,
ret
;
char
*
dirpath
;
char
*
dirpath
;
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
int
rc
;
ret
=
lxc_cgroup_path_get
(
&
dirpath
,
filename
,
name
);
ret
=
lxc_cgroup_path_get
(
&
dirpath
,
filename
,
name
);
if
(
ret
)
if
(
ret
)
return
-
1
;
return
-
1
;
snprintf
(
path
,
MAXPATHLEN
,
"%s/%s"
,
dirpath
,
filename
);
rc
=
snprintf
(
path
,
MAXPATHLEN
,
"%s/%s"
,
dirpath
,
filename
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"pathname too long"
);
return
-
1
;
}
fd
=
open
(
path
,
O_WRONLY
);
fd
=
open
(
path
,
O_WRONLY
);
if
(
fd
<
0
)
{
if
(
fd
<
0
)
{
...
@@ -642,12 +671,17 @@ int lxc_cgroup_get(const char *name, const char *filename,
...
@@ -642,12 +671,17 @@ int lxc_cgroup_get(const char *name, const char *filename,
int
fd
,
ret
=
-
1
;
int
fd
,
ret
=
-
1
;
char
*
dirpath
;
char
*
dirpath
;
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
int
rc
;
ret
=
lxc_cgroup_path_get
(
&
dirpath
,
filename
,
name
);
ret
=
lxc_cgroup_path_get
(
&
dirpath
,
filename
,
name
);
if
(
ret
)
if
(
ret
)
return
-
1
;
return
-
1
;
snprintf
(
path
,
MAXPATHLEN
,
"%s/%s"
,
dirpath
,
filename
);
rc
=
snprintf
(
path
,
MAXPATHLEN
,
"%s/%s"
,
dirpath
,
filename
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"pathname too long"
);
return
-
1
;
}
fd
=
open
(
path
,
O_RDONLY
);
fd
=
open
(
path
,
O_RDONLY
);
if
(
fd
<
0
)
{
if
(
fd
<
0
)
{
...
@@ -669,12 +703,17 @@ int lxc_cgroup_nrtasks(const char *name)
...
@@ -669,12 +703,17 @@ int lxc_cgroup_nrtasks(const char *name)
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
int
pid
,
ret
,
count
=
0
;
int
pid
,
ret
,
count
=
0
;
FILE
*
file
;
FILE
*
file
;
int
rc
;
ret
=
lxc_cgroup_path_get
(
&
dpath
,
NULL
,
name
);
ret
=
lxc_cgroup_path_get
(
&
dpath
,
NULL
,
name
);
if
(
ret
)
if
(
ret
)
return
-
1
;
return
-
1
;
snprintf
(
path
,
MAXPATHLEN
,
"%s/tasks"
,
dpath
);
rc
=
snprintf
(
path
,
MAXPATHLEN
,
"%s/tasks"
,
dpath
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
{
ERROR
(
"pathname too long"
);
return
-
1
;
}
file
=
fopen
(
path
,
"r"
);
file
=
fopen
(
path
,
"r"
);
if
(
!
file
)
{
if
(
!
file
)
{
...
...
src/lxc/commands.c
View file @
9ba8130c
...
@@ -75,8 +75,14 @@ static int __lxc_command(const char *name, struct lxc_command *command,
...
@@ -75,8 +75,14 @@ static int __lxc_command(const char *name, struct lxc_command *command,
int
sock
,
ret
=
-
1
;
int
sock
,
ret
=
-
1
;
char
path
[
sizeof
(((
struct
sockaddr_un
*
)
0
)
->
sun_path
)]
=
{
0
};
char
path
[
sizeof
(((
struct
sockaddr_un
*
)
0
)
->
sun_path
)]
=
{
0
};
char
*
offset
=
&
path
[
1
];
char
*
offset
=
&
path
[
1
];
int
rc
,
len
;
sprintf
(
offset
,
abstractname
,
name
);
len
=
sizeof
(
path
)
-
1
;
rc
=
snprintf
(
offset
,
len
,
abstractname
,
name
);
if
(
rc
<
0
||
rc
>=
len
)
{
ERROR
(
"Name too long"
);
return
-
1
;
}
sock
=
lxc_af_unix_connect
(
path
);
sock
=
lxc_af_unix_connect
(
path
);
if
(
sock
<
0
&&
errno
==
ECONNREFUSED
)
{
if
(
sock
<
0
&&
errno
==
ECONNREFUSED
)
{
...
@@ -266,8 +272,14 @@ extern int lxc_command_mainloop_add(const char *name,
...
@@ -266,8 +272,14 @@ extern int lxc_command_mainloop_add(const char *name,
int
ret
,
fd
;
int
ret
,
fd
;
char
path
[
sizeof
(((
struct
sockaddr_un
*
)
0
)
->
sun_path
)]
=
{
0
};
char
path
[
sizeof
(((
struct
sockaddr_un
*
)
0
)
->
sun_path
)]
=
{
0
};
char
*
offset
=
&
path
[
1
];
char
*
offset
=
&
path
[
1
];
int
rc
,
len
;
sprintf
(
offset
,
abstractname
,
name
);
len
=
sizeof
(
path
)
-
1
;
rc
=
snprintf
(
offset
,
len
,
abstractname
,
name
);
if
(
rc
<
0
||
rc
>=
len
)
{
ERROR
(
"Name too long"
);
return
-
1
;
}
fd
=
lxc_af_unix_open
(
path
,
SOCK_STREAM
,
0
);
fd
=
lxc_af_unix_open
(
path
,
SOCK_STREAM
,
0
);
if
(
fd
<
0
)
{
if
(
fd
<
0
)
{
...
...
src/lxc/conf.c
View file @
9ba8130c
...
@@ -241,11 +241,25 @@ static int run_script(const char *name, const char *section,
...
@@ -241,11 +241,25 @@ static int run_script(const char *name, const char *section,
return
-
1
;
return
-
1
;
}
}
ret
=
sprintf
(
buffer
,
"%s %s %s"
,
script
,
name
,
section
);
ret
=
snprintf
(
buffer
,
size
,
"%s %s %s"
,
script
,
name
,
section
);
if
(
ret
<
0
||
ret
>=
size
)
{
ERROR
(
"Script name too long"
);
free
(
buffer
);
return
-
1
;
}
va_start
(
ap
,
script
);
va_start
(
ap
,
script
);
while
((
p
=
va_arg
(
ap
,
char
*
)))
while
((
p
=
va_arg
(
ap
,
char
*
)))
{
ret
+=
sprintf
(
buffer
+
ret
,
" %s"
,
p
);
int
len
=
size
-
ret
;
int
rc
;
rc
=
snprintf
(
buffer
+
ret
,
len
,
" %s"
,
p
);
if
(
rc
<
0
||
rc
>=
len
)
{
free
(
buffer
);
ERROR
(
"Script args too long"
);
return
-
1
;
}
ret
+=
rc
;
}
va_end
(
ap
);
va_end
(
ap
);
f
=
popen
(
buffer
,
"r"
);
f
=
popen
(
buffer
,
"r"
);
...
@@ -391,7 +405,7 @@ static int mount_rootfs_file(const char *rootfs, const char *target)
...
@@ -391,7 +405,7 @@ static int mount_rootfs_file(const char *rootfs, const char *target)
{
{
struct
dirent
dirent
,
*
direntp
;
struct
dirent
dirent
,
*
direntp
;
struct
loop_info64
loinfo
;
struct
loop_info64
loinfo
;
int
ret
=
-
1
,
fd
=
-
1
;
int
ret
=
-
1
,
fd
=
-
1
,
rc
;
DIR
*
dir
;
DIR
*
dir
;
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
...
@@ -415,7 +429,10 @@ static int mount_rootfs_file(const char *rootfs, const char *target)
...
@@ -415,7 +429,10 @@ static int mount_rootfs_file(const char *rootfs, const char *target)
if
(
strncmp
(
direntp
->
d_name
,
"loop"
,
4
))
if
(
strncmp
(
direntp
->
d_name
,
"loop"
,
4
))
continue
;
continue
;
sprintf
(
path
,
"/dev/%s"
,
direntp
->
d_name
);
rc
=
snprintf
(
path
,
MAXPATHLEN
,
"/dev/%s"
,
direntp
->
d_name
);
if
(
rc
<
0
||
rc
>=
MAXPATHLEN
)
continue
;
fd
=
open
(
path
,
O_RDWR
);
fd
=
open
(
path
,
O_RDWR
);
if
(
fd
<
0
)
if
(
fd
<
0
)
continue
;
continue
;
...
@@ -577,7 +594,7 @@ static int setup_tty(const struct lxc_rootfs *rootfs,
...
@@ -577,7 +594,7 @@ static int setup_tty(const struct lxc_rootfs *rootfs,
}
}
if
(
ttydir
)
{
if
(
ttydir
)
{
/* create dev/lxc/tty%d" */
/* create dev/lxc/tty%d" */
snprintf
(
lxcpath
,
sizeof
(
lxcpath
),
"%s/dev/%s/tty%d"
,
ret
=
snprintf
(
lxcpath
,
sizeof
(
lxcpath
),
"%s/dev/%s/tty%d"
,
rootfs
->
mount
,
ttydir
,
i
+
1
);
rootfs
->
mount
,
ttydir
,
i
+
1
);
if
(
ret
>=
sizeof
(
lxcpath
))
{
if
(
ret
>=
sizeof
(
lxcpath
))
{
ERROR
(
"pathname too long for ttys"
);
ERROR
(
"pathname too long for ttys"
);
...
@@ -601,7 +618,11 @@ static int setup_tty(const struct lxc_rootfs *rootfs,
...
@@ -601,7 +618,11 @@ static int setup_tty(const struct lxc_rootfs *rootfs,
continue
;
continue
;
}
}
snprintf
(
lxcpath
,
sizeof
(
lxcpath
),
"%s/tty%d"
,
ttydir
,
i
+
1
);
ret
=
snprintf
(
lxcpath
,
sizeof
(
lxcpath
),
"%s/tty%d"
,
ttydir
,
i
+
1
);
if
(
ret
>=
sizeof
(
lxcpath
))
{
ERROR
(
"tty pathname too long"
);
return
-
1
;
}
ret
=
symlink
(
lxcpath
,
path
);
ret
=
symlink
(
lxcpath
,
path
);
if
(
ret
)
{
if
(
ret
)
{
SYSERROR
(
"failed to create symlink for tty %d
\n
"
,
i
+
1
);
SYSERROR
(
"failed to create symlink for tty %d
\n
"
,
i
+
1
);
...
@@ -682,12 +703,17 @@ static int umount_oldrootfs(const char *oldrootfs)
...
@@ -682,12 +703,17 @@ static int umount_oldrootfs(const char *oldrootfs)
void
*
cbparm
[
2
];
void
*
cbparm
[
2
];
struct
lxc_list
mountlist
,
*
iterator
;
struct
lxc_list
mountlist
,
*
iterator
;
int
ok
,
still_mounted
,
last_still_mounted
;
int
ok
,
still_mounted
,
last_still_mounted
;
int
rc
;
/* read and parse /proc/mounts in old root fs */
/* read and parse /proc/mounts in old root fs */
lxc_list_init
(
&
mountlist
);
lxc_list_init
(
&
mountlist
);
/* oldrootfs is on the top tree directory now */
/* oldrootfs is on the top tree directory now */
snprintf
(
path
,
sizeof
(
path
),
"/%s"
,
oldrootfs
);
rc
=
snprintf
(
path
,
sizeof
(
path
),
"/%s"
,
oldrootfs
);
if
(
rc
>=
sizeof
(
path
))
{
ERROR
(
"rootfs name too long"
);
return
-
1
;
}
cbparm
[
0
]
=
&
mountlist
;
cbparm
[
0
]
=
&
mountlist
;
cbparm
[
1
]
=
strdup
(
path
);
cbparm
[
1
]
=
strdup
(
path
);
...
@@ -696,7 +722,11 @@ static int umount_oldrootfs(const char *oldrootfs)
...
@@ -696,7 +722,11 @@ static int umount_oldrootfs(const char *oldrootfs)
return
-
1
;
return
-
1
;
}
}
snprintf
(
path
,
sizeof
(
path
),
"%s/proc/mounts"
,
oldrootfs
);
rc
=
snprintf
(
path
,
sizeof
(
path
),
"%s/proc/mounts"
,
oldrootfs
);
if
(
rc
>=
sizeof
(
path
))
{
ERROR
(
"container proc/mounts name too long"
);
return
-
1
;
}
ok
=
lxc_file_for_each_line
(
path
,
ok
=
lxc_file_for_each_line
(
path
,
setup_rootfs_pivot_root_cb
,
&
cbparm
);
setup_rootfs_pivot_root_cb
,
&
cbparm
);
...
@@ -750,6 +780,7 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
...
@@ -750,6 +780,7 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
{
{
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
int
remove_pivotdir
=
0
;
int
remove_pivotdir
=
0
;
int
rc
;
/* change into new root fs */
/* change into new root fs */
if
(
chdir
(
rootfs
))
{
if
(
chdir
(
rootfs
))
{
...
@@ -761,7 +792,11 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
...
@@ -761,7 +792,11 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
pivotdir
=
"mnt"
;
pivotdir
=
"mnt"
;
/* compute the full path to pivotdir under rootfs */
/* compute the full path to pivotdir under rootfs */
snprintf
(
path
,
sizeof
(
path
),
"%s/%s"
,
rootfs
,
pivotdir
);
rc
=
snprintf
(
path
,
sizeof
(
path
),
"%s/%s"
,
rootfs
,
pivotdir
);
if
(
rc
>=
sizeof
(
path
))
{
ERROR
(
"pivot dir name too long"
);
return
-
1
;
}
if
(
access
(
path
,
F_OK
))
{
if
(
access
(
path
,
F_OK
))
{
...
@@ -984,7 +1019,11 @@ static int setup_ttydir_console(const struct lxc_rootfs *rootfs,
...
@@ -984,7 +1019,11 @@ static int setup_ttydir_console(const struct lxc_rootfs *rootfs,
}
}
/* create symlink from rootfs/dev/console to 'lxc/console' */
/* create symlink from rootfs/dev/console to 'lxc/console' */
snprintf
(
lxcpath
,
sizeof
(
lxcpath
),
"%s/console"
,
ttydir
);
ret
=
snprintf
(
lxcpath
,
sizeof
(
lxcpath
),
"%s/console"
,
ttydir
);
if
(
ret
>=
sizeof
(
lxcpath
))
{
ERROR
(
"lxc/console path too long"
);
return
-
1
;
}
ret
=
symlink
(
lxcpath
,
path
);
ret
=
symlink
(
lxcpath
,
path
);
if
(
ret
)
{
if
(
ret
)
{
SYSERROR
(
"failed to create symlink for console"
);
SYSERROR
(
"failed to create symlink for console"
);
...
@@ -1178,7 +1217,7 @@ skipvarlib:
...
@@ -1178,7 +1217,7 @@ skipvarlib:
skipabs:
skipabs:
snprintf
(
path
,
MAXPATHLEN
,
"%s/%s"
,
rootfs
->
mount
,
r
=
snprintf
(
path
,
MAXPATHLEN
,
"%s/%s"
,
rootfs
->
mount
,
aux
+
offset
);
aux
+
offset
);
if
(
r
<
0
||
r
>=
MAXPATHLEN
)
{
if
(
r
<
0
||
r
>=
MAXPATHLEN
)
{
WARN
(
"pathnme too long for '%s'"
,
mntent
->
mnt_dir
);
WARN
(
"pathnme too long for '%s'"
,
mntent
->
mnt_dir
);
...
@@ -1209,7 +1248,11 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent,
...
@@ -1209,7 +1248,11 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent,
}
}
/* relative to root mount point */
/* relative to root mount point */
snprintf
(
path
,
sizeof
(
path
),
"%s/%s"
,
rootfs
,
mntent
->
mnt_dir
);
ret
=
snprintf
(
path
,
sizeof
(
path
),
"%s/%s"
,
rootfs
,
mntent
->
mnt_dir
);
if
(
ret
>=
sizeof
(
path
))
{
ERROR
(
"path name too long"
);
return
-
1
;
}
ret
=
mount_entry
(
mntent
->
mnt_fsname
,
path
,
mntent
->
mnt_type
,
ret
=
mount_entry
(
mntent
->
mnt_fsname
,
path
,
mntent
->
mnt_type
,
mntflags
,
mntdata
);
mntflags
,
mntdata
);
...
@@ -1684,7 +1727,11 @@ static int instanciate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
...
@@ -1684,7 +1727,11 @@ static int instanciate_veth(struct lxc_handler *handler, struct lxc_netdev *netd
if
(
netdev
->
priv
.
veth_attr
.
pair
)
if
(
netdev
->
priv
.
veth_attr
.
pair
)
veth1
=
netdev
->
priv
.
veth_attr
.
pair
;
veth1
=
netdev
->
priv
.
veth_attr
.
pair
;
else
{
else
{
snprintf
(
veth1buf
,
sizeof
(
veth1buf
),
"vethXXXXXX"
);
err
=
snprintf
(
veth1buf
,
sizeof
(
veth1buf
),
"vethXXXXXX"
);
if
(
err
>=
sizeof
(
veth1buf
))
{
/* can't *really* happen, but... */
ERROR
(
"veth1 name too long"
);
return
-
1
;
}
veth1
=
mktemp
(
veth1buf
);
veth1
=
mktemp
(
veth1buf
);
}
}
...
@@ -1772,7 +1819,9 @@ static int instanciate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n
...
@@ -1772,7 +1819,9 @@ static int instanciate_macvlan(struct lxc_handler *handler, struct lxc_netdev *n
return
-
1
;
return
-
1
;
}
}
snprintf
(
peerbuf
,
sizeof
(
peerbuf
),
"mcXXXXXX"
);
err
=
snprintf
(
peerbuf
,
sizeof
(
peerbuf
),
"mcXXXXXX"
);
if
(
err
>=
sizeof
(
peerbuf
))
return
-
1
;
peer
=
mktemp
(
peerbuf
);
peer
=
mktemp
(
peerbuf
);
if
(
!
strlen
(
peer
))
{
if
(
!
strlen
(
peer
))
{
...
@@ -1819,7 +1868,11 @@ static int instanciate_vlan(struct lxc_handler *handler, struct lxc_netdev *netd
...
@@ -1819,7 +1868,11 @@ static int instanciate_vlan(struct lxc_handler *handler, struct lxc_netdev *netd
return
-
1
;
return
-
1
;
}
}
snprintf
(
peer
,
sizeof
(
peer
),
"vlan%d"
,
netdev
->
priv
.
vlan_attr
.
vid
);
err
=
snprintf
(
peer
,
sizeof
(
peer
),
"vlan%d"
,
netdev
->
priv
.
vlan_attr
.
vid
);
if
(
err
>=
sizeof
(
peer
))
{
ERROR
(
"peer name too long"
);
return
-
1
;
}
err
=
lxc_vlan_create
(
netdev
->
link
,
peer
,
netdev
->
priv
.
vlan_attr
.
vid
);
err
=
lxc_vlan_create
(
netdev
->
link
,
peer
,
netdev
->
priv
.
vlan_attr
.
vid
);
if
(
err
)
{
if
(
err
)
{
...
...
src/lxc/execute.c
View file @
9ba8130c
...
@@ -52,15 +52,29 @@ static char *choose_init(void)
...
@@ -52,15 +52,29 @@ static char *choose_init(void)
if
(
!
retv
)
if
(
!
retv
)
return
NULL
;
return
NULL
;
snprintf
(
retv
,
PATH_MAX
-
1
,
LXCINITDIR
"/lxc/lxc-init"
);
ret
=
snprintf
(
retv
,
PATH_MAX
,
LXCINITDIR
"/lxc/lxc-init"
);
if
(
ret
<
0
||
ret
>=
PATH_MAX
)
{
ERROR
(
"pathname too long"
);
return
NULL
;
}
ret
=
stat
(
retv
,
&
mystat
);
ret
=
stat
(
retv
,
&
mystat
);
if
(
ret
==
0
)
if
(
ret
==
0
)
return
retv
;
return
retv
;
snprintf
(
retv
,
PATH_MAX
-
1
,
"/usr/lib/lxc/lxc-init"
);
ret
=
snprintf
(
retv
,
PATH_MAX
,
"/usr/lib/lxc/lxc-init"
);
if
(
ret
<
0
||
ret
>=
PATH_MAX
)
{
ERROR
(
"pathname too long"
);
return
NULL
;
}
ret
=
stat
(
retv
,
&
mystat
);
ret
=
stat
(
retv
,
&
mystat
);
if
(
ret
==
0
)
if
(
ret
==
0
)
return
retv
;
return
retv
;
snprintf
(
retv
,
PATH_MAX
-
1
,
"/sbin/lxc-init"
);
ret
=
snprintf
(
retv
,
PATH_MAX
,
"/sbin/lxc-init"
);
if
(
ret
<
0
||
ret
>=
PATH_MAX
)
{
ERROR
(
"pathname too long"
);
return
NULL
;
}
ret
=
stat
(
retv
,
&
mystat
);
ret
=
stat
(
retv
,
&
mystat
);
if
(
ret
==
0
)
if
(
ret
==
0
)
return
retv
;
return
retv
;
...
...
src/lxc/freezer.c
View file @
9ba8130c
...
@@ -49,7 +49,11 @@ static int freeze_unfreeze(const char *name, int freeze)
...
@@ -49,7 +49,11 @@ static int freeze_unfreeze(const char *name, int freeze)
if
(
ret
)
if
(
ret
)
return
-
1
;
return
-
1
;
snprintf
(
freezer
,
MAXPATHLEN
,
"%s/freezer.state"
,
nsgroup
);
ret
=
snprintf
(
freezer
,
MAXPATHLEN
,
"%s/freezer.state"
,
nsgroup
);
if
(
ret
>=
MAXPATHLEN
)
{
ERROR
(
"freezer.state name too long"
);
return
-
1
;
}
fd
=
open
(
freezer
,
O_RDWR
);
fd
=
open
(
freezer
,
O_RDWR
);
if
(
fd
<
0
)
{
if
(
fd
<
0
)
{
...
...
src/lxc/lxc_monitor.c
View file @
9ba8130c
...
@@ -60,6 +60,7 @@ int main(int argc, char *argv[])
...
@@ -60,6 +60,7 @@ int main(int argc, char *argv[])
struct
lxc_msg
msg
;
struct
lxc_msg
msg
;
regex_t
preg
;
regex_t
preg
;
int
fd
;
int
fd
;
int
len
,
rc
;
if
(
lxc_arguments_parse
(
&
my_args
,
argc
,
argv
))
if
(
lxc_arguments_parse
(
&
my_args
,
argc
,
argv
))
return
-
1
;
return
-
1
;
...
@@ -68,12 +69,18 @@ int main(int argc, char *argv[])
...
@@ -68,12 +69,18 @@ int main(int argc, char *argv[])
my_args
.
progname
,
my_args
.
quiet
))
my_args
.
progname
,
my_args
.
quiet
))
return
-
1
;
return
-
1
;
regexp
=
malloc
(
strlen
(
my_args
.
name
)
+
3
);
len
=
strlen
(
my_args
.
name
)
+
3
;
regexp
=
malloc
(
len
+
3
);
if
(
!
regexp
)
{
if
(
!
regexp
)
{
ERROR
(
"failed to allocate memory"
);
ERROR
(
"failed to allocate memory"
);
return
-
1
;
return
-
1
;
}
}
sprintf
(
regexp
,
"^%s$"
,
my_args
.
name
);
rc
=
snprintf
(
regexp
,
len
,
"^%s$"
,
my_args
.
name
);
if
(
rc
<
0
||
rc
>=
len
)
{
ERROR
(
"Name too long"
);
free
(
regexp
);
return
-
1
;
}
if
(
regcomp
(
&
preg
,
regexp
,
REG_NOSUB
|
REG_EXTENDED
))
{
if
(
regcomp
(
&
preg
,
regexp
,
REG_NOSUB
|
REG_EXTENDED
))
{
ERROR
(
"failed to compile the regex '%s'"
,
my_args
.
name
);
ERROR
(
"failed to compile the regex '%s'"
,
my_args
.
name
);
...
...
src/lxc/network.c
View file @
9ba8130c
...
@@ -582,12 +582,15 @@ static int proc_sys_net_write(const char *path, const char *value)
...
@@ -582,12 +582,15 @@ static int proc_sys_net_write(const char *path, const char *value)
static
int
ip_forward_set
(
const
char
*
ifname
,
int
family
,
int
flag
)
static
int
ip_forward_set
(
const
char
*
ifname
,
int
family
,
int
flag
)
{
{
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
int
rc
;
if
(
family
!=
AF_INET
&&
family
!=
AF_INET6
)
if
(
family
!=
AF_INET
&&
family
!=
AF_INET6
)
return
-
EINVAL
;
return
-
EINVAL
;
snprintf
(
path
,
MAXPATHLEN
,
"/proc/sys/net/%s/conf/%s/forwarding"
,
rc
=
snprintf
(
path
,
MAXPATHLEN
,
"/proc/sys/net/%s/conf/%s/forwarding"
,
family
==
AF_INET
?
"ipv4"
:
"ipv6"
,
ifname
);
family
==
AF_INET
?
"ipv4"
:
"ipv6"
,
ifname
);
if
(
rc
>=
MAXPATHLEN
)
return
-
E2BIG
;
return
proc_sys_net_write
(
path
,
flag
?
"1"
:
"0"
);
return
proc_sys_net_write
(
path
,
flag
?
"1"
:
"0"
);
}
}
...
@@ -605,13 +608,16 @@ int lxc_ip_forward_off(const char *ifname, int family)
...
@@ -605,13 +608,16 @@ int lxc_ip_forward_off(const char *ifname, int family)
static
int
neigh_proxy_set
(
const
char
*
ifname
,
int
family
,
int
flag
)
static
int
neigh_proxy_set
(
const
char
*
ifname
,
int
family
,
int
flag
)
{
{
char
path
[
MAXPATHLEN
];
char
path
[
MAXPATHLEN
];
int
ret
;
if
(
family
!=
AF_INET
&&
family
!=
AF_INET6
)
if
(
family
!=
AF_INET
&&
family
!=
AF_INET6
)
return
-
EINVAL
;
return
-
EINVAL
;
sprintf
(
path
,
"/proc/sys/net/%s/conf/%s/%s"
,
ret
=
snprintf
(
path
,
MAXPATHLEN
,
"/proc/sys/net/%s/conf/%s/%s"
,
family
==
AF_INET
?
"ipv4"
:
"ipv6"
,
ifname
,
family
==
AF_INET
?
"ipv4"
:
"ipv6"
,
ifname
,
family
==
AF_INET
?
"proxy_arp"
:
"proxy_ndp"
);
family
==
AF_INET
?
"proxy_arp"
:
"proxy_ndp"
);
if
(
ret
<
0
||
ret
>=
MAXPATHLEN
)
return
-
E2BIG
;
return
proc_sys_net_write
(
path
,
flag
?
"1"
:
"0"
);
return
proc_sys_net_write
(
path
,
flag
?
"1"
:
"0"
);
}
}
...
...
src/lxc/state.c
View file @
9ba8130c
...
@@ -75,7 +75,9 @@ static int freezer_state(const char *name)
...
@@ -75,7 +75,9 @@ static int freezer_state(const char *name)
if
(
err
)
if
(
err
)
return
-
1
;
return
-
1
;
snprintf
(
freezer
,
MAXPATHLEN
,
"%s/freezer.state"
,
nsgroup
);
err
=
snprintf
(
freezer
,
MAXPATHLEN
,
"%s/freezer.state"
,
nsgroup
);
if
(
err
<
0
||
err
>=
MAXPATHLEN
)
return
-
1
;
file
=
fopen
(
freezer
,
"r"
);
file
=
fopen
(
freezer
,
"r"
);
if
(
!
file
)
if
(
!
file
)
...
...
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