| From f48b5fd8ab03c200eaf5e3a9b03bcd01b2659cf3 Mon Sep 17 00:00:00 2001 |
| From: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| Date: Thu, 2 Nov 2017 16:00:33 +0100 |
| Subject: [PATCH] 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 <fontaine.fabrice@gmail.com> |
| --- |
| configure.ac | 4 ++++ |
| src/lxc/Makefile.am | 6 ++++++ |
| src/lxc/conf.c | 12 +++++++++--- |
| 3 files changed, 19 insertions(+), 3 deletions(-) |
| |
| diff --git a/configure.ac b/configure.ac |
| index 642b78e7..63df7466 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 fff32ae4..8f0c11ec 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 44d97843..8a66f2d0 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 <mntent.h> |
| #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; |
| } |
| -- |
| 2.14.1 |
| |