From patchwork Tue Nov 8 15:10:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 60209 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AD7B73858402 for ; Tue, 8 Nov 2022 15:10:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AD7B73858402 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667920254; bh=k/W3x2MQ33UifMibEte8ID7NTUAdPcT2AWJ3WyOYT5U=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=gW62hREovaLWoIdYCaYaOijCvOrIckdrjmXxog06CtDvaQROzDG7nRJJ22Do4lGu0 IEFmnyq4mptOia6QDQGXSLLqdeHm2X4nRJC/S2xVeyGquQhtT2yb9DRqOn/HPq+wdA p7N7GP/Tij/4/z4yd5mLHUaDVjJrdlBVMB89JDlk= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oa1-x2e.google.com (mail-oa1-x2e.google.com [IPv6:2001:4860:4864:20::2e]) by sourceware.org (Postfix) with ESMTPS id ACB9A3858D26 for ; Tue, 8 Nov 2022 15:10:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ACB9A3858D26 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-13c569e5ff5so16555840fac.6 for ; Tue, 08 Nov 2022 07:10:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=k/W3x2MQ33UifMibEte8ID7NTUAdPcT2AWJ3WyOYT5U=; b=71FEmtaDRKz4BrCiMt1xJgOwqOEjdBxrrhH7Gc39/hw0FEnKFCSHm4UvRZ4VdszWR+ SMFAVU1KjH/mJY/WgveHYg4PGee6jNg1NbA8H05KcKcOFkUjhFIy16XelOme5yE/hPHE SOo5Xrc+JBKhsJRdVuinp4SWqKNFdpOYlcIerlm+9hToll9zCULbG4CyZlX6w4KlYMfh tkDoUQ98LwVVQHtOYtaG0SXwxcDRsIQtxP36b2egHjK+29c3ggdgi+GyxoH5ttLxlSRG aYsKZVp9k4WybWSUCunL9z/Fwa/fByJMxqtSjV05g8TPLfTr1XaXzNHwsJNu/o4tWAps KuEg== X-Gm-Message-State: ACrzQf0CXmTZ8jbxuUxH45sMLFtQyd6xLIemNIH0LOHWHgoJT9A7AArw NqixmG6CRu6e4OmYYWg+3jsrCcFsVHtCTMpq X-Google-Smtp-Source: AMsMyM4oXo22LBlMolCP73W0shY5izdRiOBw952sM2eSrQ5gQgrvi5hB659TUn4zz0IJyj+O5tQypA== X-Received: by 2002:a05:6870:5804:b0:12b:10f5:da57 with SMTP id r4-20020a056870580400b0012b10f5da57mr41693757oap.135.1667920224421; Tue, 08 Nov 2022 07:10:24 -0800 (PST) Received: from mandiga.. ([2804:1b3:a7c0:a9f4:49db:3bde:f117:a65a]) by smtp.gmail.com with ESMTPSA id l14-20020a4ac60e000000b00499499a8e18sm3219411ooq.5.2022.11.08.07.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Nov 2022 07:10:24 -0800 (PST) To: libc-alpha@sourceware.org, Kabe , Andreas Schwab Subject: [PATCH v4] Linux: Add ppoll fortify symbol for 64 bit time_t (BZ# 29746) Date: Tue, 8 Nov 2022 12:10:19 -0300 Message-Id: <20221108151019.3956495-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Similar to ppoll, the poll.h header needs to redirect the poll call to a proper fortified ppoll with 64 bit time_t support. The implementation is straightforward, just need to add a similar check as __poll_chk and call the 64 bit time_t ppoll version. The debug fortify tests are also extended to cover 64 bit time_t for affected ABIs. Unfortunately it requires an aditional symbol, which makes backport tricky. One possibility is to add a static inline version if compiler supports is and call abort instead of __chk_fail, so fortified version will call __poll64 in the end. Another possibility is to just remove the fortify support for _TIME_BITS=64. Checked on i686-linux-gnu. --- debug/Makefile | 41 ++++++++++++------ include/sys/poll.h | 5 ++- io/bits/poll2.h | 25 +++++++++++ sysdeps/unix/sysv/linux/Versions | 5 +++ sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 + sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 + sysdeps/unix/sysv/linux/csky/libc.abilist | 1 + sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 + sysdeps/unix/sysv/linux/i386/libc.abilist | 1 + .../sysv/linux/m68k/coldfire/libc.abilist | 1 + .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 + .../sysv/linux/microblaze/be/libc.abilist | 1 + .../sysv/linux/microblaze/le/libc.abilist | 1 + .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 + .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 + .../sysv/linux/mips/mips64/n32/libc.abilist | 1 + sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 + .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 + .../powerpc/powerpc32/nofpu/libc.abilist | 1 + sysdeps/unix/sysv/linux/ppoll.c | 3 +- sysdeps/unix/sysv/linux/ppoll_chk.c | 42 +++++++++++++++++++ .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 + sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 + sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 + .../sysv/linux/sparc/sparc32/libc.abilist | 1 + 25 files changed, 125 insertions(+), 15 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/ppoll_chk.c diff --git a/debug/Makefile b/debug/Makefile index 99cdf3221b..f73c739da7 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -120,8 +120,10 @@ CPPFLAGS-tst-chk-cancel.c += -D_FORTIFY_SOURCE=2 # CFLAGS for the file. tests-all-chk = tst-fortify -tests-c-chk = -tests-cc-chk = +tests-c-def-chk = +tests-cc-def-chk = +tests-c-time64-chk = +tests-cc-time64-chk = CFLAGS-tst-fortify.c += -Wno-format -Wno-deprecated-declarations -Wno-error @@ -130,11 +132,11 @@ define cflags-default endef define cflags-lfs -CFLAGS-tst-fortify-$(1)-lfs-$(2).$(1) += -D_FILE_OFFSET_BITS=64 +CFLAGS-tst-fortify-$(1)-lfs-$(2)-$(3).$(1) += -D_FILE_OFFSET_BITS=64 endef define cflags-nongnu -CFLAGS-tst-fortify-$(1)-nongnu-$(2).$(1) += -D_LARGEFILE64_SOURCE=1 +CFLAGS-tst-fortify-$(1)-nongnu-$(2)-$(3).$(1) += -D_LARGEFILE64_SOURCE=1 endef src-chk-nongnu = \#undef _GNU_SOURCE @@ -145,12 +147,12 @@ src-chk-nongnu = \#undef _GNU_SOURCE # And they also generate warnings from warning attributes, which # cannot be disabled via pragmas, so require -Wno-error to be used. define gen-chk-test -tests-$(1)-chk += tst-fortify-$(1)-$(2)-$(3) -CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \ +tests-$(1)-$(4)-chk += tst-fortify-$(1)-$(2)-$(3)-$(4) +CFLAGS-tst-fortify-$(1)-$(2)-$(3)-$(4).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \ -Wno-deprecated-declarations \ -Wno-error -$(eval $(call cflags-$(2),$(1),$(3))) -$(objpfx)tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile +$(eval $(call cflags-$(2),$(1),$(3),$(4))) +$(objpfx)tst-fortify-$(1)-$(2)-$(3)-$(4).$(1): tst-fortify.c Makefile ( echo "/* Autogenerated from Makefile. */"; \ echo "$(src-chk-$(2))"; \ echo "#include \"tst-fortify.c\"" ) > $$@.tmp @@ -159,19 +161,29 @@ endef chk-extensions = c cc chk-types = default lfs nongnu +# 64 bit time_t implies LFS. +chk-types-time64 = default nongnu chk-levels = 1 2 3 $(foreach e,$(chk-extensions), \ $(foreach t,$(chk-types), \ $(foreach l,$(chk-levels), \ - $(eval $(call gen-chk-test,$(e),$(t),$(l)))))) + $(eval $(call gen-chk-test,$(e),$(t),$(l),def))))) -tests-all-chk += $(tests-c-chk) $(tests-cc-chk) +tests-all-chk += $(tests-c-def-chk) $(tests-cc-def-chk) + +$(foreach e,$(chk-extensions), \ + $(foreach t,$(chk-types-time64), \ + $(foreach l,$(chk-levels), \ + $(eval $(call gen-chk-test,$(e),$(t),$(l),time64))))) + +tests-all-time64-chk += $(tests-c-time64-chk) $(tests-cc-time64-chk) define link-cc LDLIBS-$(1) = -lstdc++ endef -$(foreach t,$(tests-cc-chk), $(eval $(call link-cc,$(t)))) +$(foreach t,$(tests-cc-def-chk), $(eval $(call link-cc,$(t)))) +$(foreach t,$(tests-cc-time64-chk), $(eval $(call link-cc,$(t)))) # backtrace_symbols only works if we link with -rdynamic. backtrace # requires unwind tables on most architectures. @@ -201,6 +213,10 @@ tests = backtrace-tst \ tst-realpath-chk \ $(tests-all-chk) +tests-time64 += \ + $(tests-all-time64-chk) \ + # tests-time64 + ifeq ($(have-ssp),yes) tests += tst-ssp-1 endif @@ -210,7 +226,7 @@ tests += tst-chk-cancel endif ifeq (,$(CXX)) -tests-unsupported = $(tests-cc-chk) +tests-unsupported = $(tests-cc-def-chk) $(test-cc-time64-chk) endif extra-libs = libpcprofile @@ -235,6 +251,7 @@ define chk-gen-locales $(objpfx)$(1).out: $(gen-locales) endef $(foreach t, $(tests-all-chk), $(eval $(call chk-gen-locales,$(t)))) +$(foreach t, $(tests-all-time64-chk), $(eval $(call chk-gen-locales,$(t)))) endif sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,') diff --git a/include/sys/poll.h b/include/sys/poll.h index f904e21f89..228704fe79 100644 --- a/include/sys/poll.h +++ b/include/sys/poll.h @@ -2,13 +2,16 @@ # include #ifndef _ISOMAC +#include + extern int __poll (struct pollfd *__fds, unsigned long int __nfds, int __timeout); libc_hidden_proto (__poll) libc_hidden_proto (ppoll) # if __TIMESIZE == 64 -# define __ppoll64 __ppoll +# define __ppoll64 ppoll +# define __ppoll64_chk __ppoll_chk # else # include # include diff --git a/io/bits/poll2.h b/io/bits/poll2.h index 3679d8451a..90f5574969 100644 --- a/io/bits/poll2.h +++ b/io/bits/poll2.h @@ -43,6 +43,30 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout) #ifdef __USE_GNU +# ifdef __USE_TIME_BITS64 +extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds, + const struct timespec *__timeout, + const __sigset_t *__ss), __ppoll64); +extern int __ppoll64_chk (struct pollfd *__fds, nfds_t __nfds, + const struct timespec *__timeout, + const __sigset_t *__ss, __SIZE_TYPE__ __fdslen) + __attr_access ((__write_only__, 1, 2)); +extern int __REDIRECT (__ppoll64_chk_warn, (struct pollfd *__fds, nfds_t __n, + const struct timespec *__timeout, + const __sigset_t *__ss, + __SIZE_TYPE__ __fdslen), + __ppoll64_chk) + __warnattr ("ppoll called with fds buffer too small file nfds entries"); + +__fortify_function __fortified_attr_access (__write_only__, 1, 2) int +ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout, + const __sigset_t *__ss) +{ + return __glibc_fortify (ppoll64, __nfds, sizeof (*__fds), + __glibc_objsize (__fds), + __fds, __nfds, __timeout, __ss); +} +# else extern int __REDIRECT (__ppoll_alias, (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout, const __sigset_t *__ss), ppoll); @@ -65,6 +89,7 @@ ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout, __glibc_objsize (__fds), __fds, __nfds, __timeout, __ss); } +# endif #endif __END_DECLS diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index 65d2ceda2c..ca6eb1a49e 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -313,6 +313,11 @@ libc { process_madvise; process_mrelease; } + GLIBC_2.37 { +%ifdef TIME64_NON_DEFAULT + __ppoll64_chk; +%endif + } GLIBC_PRIVATE { # functions used in other libraries __syscall_rt_sigqueueinfo; diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index e0668a80cf..f28402fe03 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -513,6 +513,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index d28e7c60b7..e2f56880ed 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -510,6 +510,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index 922b05062f..319d92356e 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2669,3 +2669,4 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 412144f94c..6450e17ebe 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2618,6 +2618,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index 134393900a..0a24ec9afd 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2802,6 +2802,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index 0604029c68..16243a7a92 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -514,6 +514,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stdin_ D 0x98 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index af2be5c80d..564a553b27 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2745,6 +2745,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index e090b8d48f..e850f47b21 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2718,3 +2718,4 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index 8c5b2db243..37178c503f 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2715,3 +2715,4 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index 68847134a2..3b30b31466 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2710,6 +2710,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index daa44e64fa..0e358570a2 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2708,6 +2708,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index 6169188c96..59c598b98f 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2716,6 +2716,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index 58e9b486b0..463e01ab84 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2757,3 +2757,4 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index 8c9ca32cbe..405d40d11c 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -2772,6 +2772,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index 08a6604aab..ce89602b93 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -2805,6 +2805,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/ppoll.c b/sysdeps/unix/sysv/linux/ppoll.c index 1105e29b00..2e173b931d 100644 --- a/sysdeps/unix/sysv/linux/ppoll.c +++ b/sysdeps/unix/sysv/linux/ppoll.c @@ -67,7 +67,7 @@ __ppoll64 (struct pollfd *fds, nfds_t nfds, const struct __timespec64 *timeout, libc_hidden_def (__ppoll64) int -__ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, +ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, const sigset_t *sigmask) { struct __timespec64 ts64; @@ -77,5 +77,4 @@ __ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, return __ppoll64 (fds, nfds, timeout ? &ts64 : NULL, sigmask); } #endif -strong_alias (__ppoll, ppoll) libc_hidden_def (ppoll) diff --git a/sysdeps/unix/sysv/linux/ppoll_chk.c b/sysdeps/unix/sysv/linux/ppoll_chk.c new file mode 100644 index 0000000000..65c4b56671 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ppoll_chk.c @@ -0,0 +1,42 @@ +/* Fortify ppoll implementation. Linux version. + Copyright (C) 2022 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 + . */ + +#include + +int +__ppoll64_chk (struct pollfd *fds, nfds_t nfds, + const struct __timespec64 *tmo, const __sigset_t *ss, + __SIZE_TYPE__ fdslen) +{ + if (fdslen / sizeof (*fds) < nfds) + __chk_fail (); + + return __ppoll64 (fds, nfds, tmo, ss); +} + +#if __TIMESIZE != 64 +int +__ppoll_chk (struct pollfd *fds, nfds_t nfds, const struct timespec *tmo, + const __sigset_t *ss, __SIZE_TYPE__ fdslen) +{ + if (fdslen / sizeof (*fds) < nfds) + __chk_fail (); + + return ppoll (fds, nfds, tmo, ss); +} +#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 009f22931e..5ca051a9eb 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2770,6 +2770,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index afb5bc37b1..5b48168ec6 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2625,6 +2625,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index 2b53a3cf92..c42b39cea8 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2622,6 +2622,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 43b9844a99..5a0a662dee 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2765,6 +2765,7 @@ GLIBC_2.36 pidfd_open F GLIBC_2.36 pidfd_send_signal F GLIBC_2.36 process_madvise F GLIBC_2.36 process_mrelease F +GLIBC_2.37 __ppoll64_chk F GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_sprintf F