]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Fix compilation on toolchain without prlimit 1896/head
authorFabrice Fontaine <fontaine.fabrice@gmail.com>
Thu, 2 Nov 2017 15:00:33 +0000 (16:00 +0100)
committerFabrice Fontaine <fontaine.fabrice@gmail.com>
Thu, 2 Nov 2017 17:36:00 +0000 (18:36 +0100)
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
src/lxc/Makefile.am
src/lxc/conf.c

index 642b78e7e1308a91b62abb57dc04d7beec8c2956..63df7466cb879a0b2f6e2666d48aaa276bcd2731 100644 (file)
@@ -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])
index fff32ae4f3196337c4eb60d873deb2513703a9aa..8f0c11ecae56c68664a00e26370a85236465342e 100644 (file)
@@ -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
index 44d9784303084e42be618e42dd4ed0f2b5dd9c9a..8a66f2d02ca50a9a212faca9383633855fb7d768 100644 (file)
 
 #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;
 }