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) {
/* 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;