From: Fabrice Fontaine Date: Thu, 2 Nov 2017 15:00:33 +0000 (+0100) Subject: Fix compilation on toolchain without prlimit X-Git-Tag: lxc-3.0.0.beta1~202^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f48b5fd8ab03c200eaf5e3a9b03bcd01b2659cf3;p=thirdparty%2Flxc.git Fix compilation on toolchain without prlimit Some toolchains which are not bionic like uclibc does not support prlimit or prlimit64. In this case, return an error. Moreover, if prlimit64 is available, use lxc implementation of prlimit. Signed-off-by: Fabrice Fontaine --- diff --git a/configure.ac b/configure.ac index 642b78e7e..63df7466c 100644 --- a/configure.ac +++ b/configure.ac @@ -671,6 +671,10 @@ AC_CHECK_FUNCS([prlimit], AM_CONDITIONAL(HAVE_PRLIMIT, true) AC_DEFINE(HAVE_PRLIMIT,1,[Have prlimit]), AM_CONDITIONAL(HAVE_PRLIMIT, false)) +AC_CHECK_FUNCS([prlimit64], + AM_CONDITIONAL(HAVE_PRLIMIT64, true) + AC_DEFINE(HAVE_PRLIMIT64,1,[Have prlimit64]), + AM_CONDITIONAL(HAVE_PRLIMIT64, false)) # Check for some libraries AC_SEARCH_LIBS(sem_open, [rt pthread]) diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am index fff32ae4f..8f0c11eca 100644 --- a/src/lxc/Makefile.am +++ b/src/lxc/Makefile.am @@ -45,7 +45,10 @@ noinst_HEADERS += \ ../include/ifaddrs.h \ ../include/openpty.h \ ../include/lxcmntent.h +endif + if !HAVE_PRLIMIT +if HAVE_PRLIMIT64 noinst_HEADERS += ../include/prlimit.h endif endif @@ -143,7 +146,10 @@ liblxc_la_SOURCES += \ ../include/ifaddrs.c ../include/ifaddrs.h \ ../include/openpty.c ../include/openpty.h \ ../include/lxcmntent.c ../include/lxcmntent.h +endif + if !HAVE_PRLIMIT +if HAVE_PRLIMIT64 liblxc_la_SOURCES += ../include/prlimit.c ../include/prlimit.h endif endif diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 44d978430..8a66f2d02 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -97,13 +97,14 @@ #if IS_BIONIC #include <../include/lxcmntent.h> -#ifndef HAVE_PRLIMIT -#include <../include/prlimit.h> -#endif #else #include #endif +#if !defined(HAVE_PRLIMIT) && defined(HAVE_PRLIMIT64) +#include <../include/prlimit.h> +#endif + lxc_log_define(lxc_conf, lxc); #if HAVE_LIBCAP @@ -2399,10 +2400,15 @@ int setup_resource_limits(struct lxc_list *limits, pid_t pid) { return -1; } +#if HAVE_PRLIMIT || HAVE_PRLIMIT64 if (prlimit(pid, resid, &lim->limit, NULL) != 0) { ERROR("failed to set limit %s: %s", lim->resource, strerror(errno)); return -1; } +#else + ERROR("Cannot set limit %s as prlimit is missing", lim->resource); + return -1; +#endif } return 0; }