[glibc] 01/01: debian/patches/alpha/submitted-rlimit.diff: new patch to fix getrlimit and setrlimit with RLIM_INFINITY on alpha.
This is an automated email from the git hooks/post-receive script.
aurel32 pushed a commit to branch sid
in repository glibc.
commit 85a07c27998f389564ff3a83e68bbfdae3fd3948
Author: Aurelien Jarno <aurelien@aurel32.net>
Date: Sun Dec 31 13:40:02 2017 +0100
debian/patches/alpha/submitted-rlimit.diff: new patch to fix getrlimit and setrlimit with RLIM_INFINITY on alpha.
---
debian/changelog | 2 +
debian/patches/alpha/submitted-rlimit.diff | 137 +++++++++++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 140 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 1480716..e0076c3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,8 @@ glibc (2.25-6) UNRELEASED; urgency=medium
* debian/control.in/main, debian/copyright, rules.d/tarball.mk: prefer
https for upstream links.
* debian/control.in/main: bump Standards-Version to 4.1.3.
+ * debian/patches/alpha/submitted-rlimit.diff: new patch to fix getrlimit
+ and setrlimit with RLIM_INFINITY on alpha.
-- Aurelien Jarno <aurel32@debian.org> Wed, 20 Dec 2017 22:29:01 +0100
diff --git a/debian/patches/alpha/submitted-rlimit.diff b/debian/patches/alpha/submitted-rlimit.diff
new file mode 100644
index 0000000..bedda31
--- /dev/null
+++ b/debian/patches/alpha/submitted-rlimit.diff
@@ -0,0 +1,137 @@
+2017-12-30 Aurelien Jarno <aurelien@aurel32.net>
+
+ [BZ #22648]
+ * sysdeps/unix/sysv/linux/alpha/getrlimit64.c: New file.
+ * sysdeps/unix/sysv/linux/alpha/setrlimit64.c: Ditto.
+
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/alpha/getrlimit64.c
+@@ -0,0 +1,64 @@
++/* Copyright (C) 2017 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <sys/types.h>
++
++/* Add this redirection so the strong_alias linking getrlimit64 to
++ {__}getrlimit does not throw a type error. */
++#undef getrlimit
++#undef __getrlimit
++#define getrlimit getrlimit_redirect
++#define __getrlimit __getrlimit_redirect
++#include <sys/resource.h>
++#undef getrlimit
++#undef __getrlimit
++
++/* RLIM64_INFINITY was supposed to be a glibc convention rather than
++ anything seen by the kernel, but it ended being passed to the kernel
++ through the prlimit64 syscall. Given that a lot of binaries with
++ the wrong constant value are in the wild, provide a wrapper function
++ fixing the value after the syscall. */
++#define KERNEL_RLIM64_INFINITY 0xffffffffffffffffULL
++
++int
++__getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
++{
++ struct rlimit64 krlimits;
++
++ if (INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, &krlimits) < 0)
++ return -1;
++
++ if (krlimits.rlim_cur == KERNEL_RLIM64_INFINITY)
++ rlimits->rlim_cur = RLIM64_INFINITY;
++ else
++ rlimits->rlim_cur = krlimits.rlim_cur;
++ if (krlimits.rlim_max == KERNEL_RLIM64_INFINITY)
++ rlimits->rlim_max = RLIM64_INFINITY;
++ else
++ rlimits->rlim_max = krlimits.rlim_max;
++
++ return 0;
++}
++libc_hidden_def (__getrlimit64)
++strong_alias (__getrlimit64, __GI_getrlimit)
++strong_alias (__getrlimit64, __GI___getrlimit)
++strong_alias (__getrlimit64, __getrlimit)
++weak_alias (__getrlimit64, getrlimit)
++
++weak_alias (__getrlimit64, getrlimit64)
++libc_hidden_weak (getrlimit64)
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/alpha/setrlimit64.c
+@@ -0,0 +1,61 @@
++/* Copyright (C) 2013-2017 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <sys/types.h>
++
++/* Add this redirection so the strong_alias linking setrlimit64 to
++ {__}setrlimit does not throw a type error. */
++#undef setrlimit
++#undef __setrlimit
++#define setrlimit setrlimit_redirect
++#define __setrlimit __setrlimit_redirect
++#include <sys/resource.h>
++#undef setrlimit
++#undef __setrlimit
++
++/* RLIM64_INFINITY was supposed to be a glibc convention rather than
++ anything seen by the kernel, but it ended being passed to the kernel
++ through the prlimit64 syscall. Given that a lot of binaries with
++ the wrong constant value are in the wild, provide a wrapper function
++ fixing the value before the syscall. */
++#define KERNEL_RLIM64_INFINITY 0xffffffffffffffffULL
++
++int
++__setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
++{
++ struct rlimit64 krlimits;
++
++ if (rlimits->rlim_cur == RLIM64_INFINITY)
++ krlimits.rlim_cur = KERNEL_RLIM64_INFINITY;
++ else
++ krlimits.rlim_cur = rlimits->rlim_cur;
++ if (rlimits->rlim_max == RLIM64_INFINITY)
++ krlimits.rlim_max = KERNEL_RLIM64_INFINITY;
++ else
++ krlimits.rlim_max = rlimits->rlim_max;
++
++ return INLINE_SYSCALL_CALL (prlimit64, 0, resource, &krlimits, NULL);
++}
++
++weak_alias (__setrlimit64, setrlimit64)
++
++strong_alias (__setrlimit64, __setrlimit)
++weak_alias (__setrlimit64, setrlimit)
++#ifdef SHARED
++__hidden_ver1 (__setrlimit64, __GI___setrlimit, __setrlimit64);
++#endif
diff --git a/debian/patches/series b/debian/patches/series
index 8c63151..f526d89 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -35,6 +35,7 @@ alpha/submitted-dl-support.diff
alpha/local-string-functions.diff
alpha/submitted-termios_h.diff
alpha/submitted-fts64.diff
+alpha/submitted-rlimit.diff
arm/local-sigaction.diff
arm/unsubmitted-ldconfig-cache-abi.diff
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git
Reply to: