[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: