conf: mount devpts without "max" on EINVAL

The "max" option to devpts got introduced in kernel 3.4. Closes #2490. Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent 84a00bd6
......@@ -1598,7 +1598,7 @@ static const struct id_map *find_mapped_nsid_entry(struct lxc_conf *conf,
static int lxc_setup_devpts(struct lxc_conf *conf)
{
int ret;
const char *default_devpts_mntopts = "gid=5,newinstance,ptmxmode=0666,mode=0620";
char default_devpts_mntopts[] = "gid=5,newinstance,ptmxmode=0666,mode=0620";
char devpts_mntopts[256];
if (conf->pty_max <= 0) {
......@@ -1628,9 +1628,20 @@ static int lxc_setup_devpts(struct lxc_conf *conf)
/* mount new devpts instance */
ret = mount("devpts", "/dev/pts", "devpts", MS_NOSUID | MS_NOEXEC, devpts_mntopts);
if (ret < 0) {
/* try mounting without "max" */
if (errno == EINVAL) {
devpts_mntopts[sizeof(default_devpts_mntopts) - 1] = '\0';
ret = mount("devpts", "/dev/pts", "devpts",
MS_NOSUID | MS_NOEXEC, devpts_mntopts);
if (ret < 0) {
SYSERROR("Failed to mount new devpts instance");
return -1;
}
}
/* try mounting without gid=5 */
ret = mount("devpts", "/dev/pts", "devpts",
MS_NOSUID | MS_NOEXEC, devpts_mntopts + sizeof("gid=5"));
ret = mount("devpts", "/dev/pts", "devpts", MS_NOSUID | MS_NOEXEC,
devpts_mntopts + sizeof("gid=5"));
if (ret < 0) {
SYSERROR("Failed to mount new devpts instance");
return -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment