0001-Linux-Add-ppoll-fortify-symbol-for-64-bit-time_t-BZ-.patch 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. From 69318192d16adc7d57adcd69fbbb1e3e107b2783 Mon Sep 17 00:00:00 2001
  2. From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
  3. Date: Fri, 4 Nov 2022 16:02:52 -0300
  4. Subject: [PATCH] Linux: Add ppoll fortify symbol for 64 bit time_t (BZ# 29746)
  5. Similar to ppoll, the poll.h header needs to redirect the poll call
  6. to a proper fortified ppoll with 64 bit time_t support.
  7. The implementation is straightforward, just need to add a similar
  8. check as __poll_chk and call the 64 bit time_t ppoll version. The
  9. debug fortify tests are also extended to cover 64 bit time_t for
  10. affected ABIs.
  11. Unfortunately it requires an aditional symbol, which makes backport
  12. tricky. One possibility is to add a static inline version if compiler
  13. supports is and call abort instead of __chk_fail, so fortified version
  14. will call __poll64 in the end.
  15. Another possibility is to just remove the fortify support for
  16. _TIME_BITS=64.
  17. Checked on i686-linux-gnu.
  18. Upstream-Status: Backport
  19. Signed-off-by: Ola Nilsson <olani@axis.com>
  20. ---
  21. debug/Makefile | 41 ++++++++++++------
  22. include/sys/poll.h | 5 ++-
  23. io/bits/poll2.h | 25 +++++++++++
  24. sysdeps/unix/sysv/linux/Versions | 5 +++
  25. sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 +
  26. sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 +
  27. sysdeps/unix/sysv/linux/csky/libc.abilist | 1 +
  28. sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 +
  29. sysdeps/unix/sysv/linux/i386/libc.abilist | 1 +
  30. .../sysv/linux/m68k/coldfire/libc.abilist | 1 +
  31. .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
  32. .../sysv/linux/microblaze/be/libc.abilist | 1 +
  33. .../sysv/linux/microblaze/le/libc.abilist | 1 +
  34. .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
  35. .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
  36. .../sysv/linux/mips/mips64/n32/libc.abilist | 1 +
  37. sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 +
  38. .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
  39. .../powerpc/powerpc32/nofpu/libc.abilist | 1 +
  40. sysdeps/unix/sysv/linux/ppoll.c | 3 +-
  41. sysdeps/unix/sysv/linux/ppoll_chk.c | 42 +++++++++++++++++++
  42. .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
  43. sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 +
  44. sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 +
  45. .../sysv/linux/sparc/sparc32/libc.abilist | 1 +
  46. 25 files changed, 125 insertions(+), 15 deletions(-)
  47. create mode 100644 sysdeps/unix/sysv/linux/ppoll_chk.c
  48. diff --git a/debug/Makefile b/debug/Makefile
  49. index 456b349c4d..075a135a2b 100644
  50. --- a/debug/Makefile
  51. +++ b/debug/Makefile
  52. @@ -120,8 +120,10 @@ CPPFLAGS-tst-read-chk-cancel.c += -D_FORTIFY_SOURCE=2
  53. # CFLAGS for the file.
  54. tests-all-chk = tst-fortify
  55. -tests-c-chk =
  56. -tests-cc-chk =
  57. +tests-c-def-chk =
  58. +tests-cc-def-chk =
  59. +tests-c-time64-chk =
  60. +tests-cc-time64-chk =
  61. CFLAGS-tst-fortify.c += -Wno-format -Wno-deprecated-declarations -Wno-error
  62. @@ -130,11 +132,11 @@ define cflags-default
  63. endef
  64. define cflags-lfs
  65. -CFLAGS-tst-fortify-$(1)-lfs-$(2).$(1) += -D_FILE_OFFSET_BITS=64
  66. +CFLAGS-tst-fortify-$(1)-lfs-$(2)-$(3).$(1) += -D_FILE_OFFSET_BITS=64
  67. endef
  68. define cflags-nongnu
  69. -CFLAGS-tst-fortify-$(1)-nongnu-$(2).$(1) += -D_LARGEFILE64_SOURCE=1
  70. +CFLAGS-tst-fortify-$(1)-nongnu-$(2)-$(3).$(1) += -D_LARGEFILE64_SOURCE=1
  71. endef
  72. src-chk-nongnu = \#undef _GNU_SOURCE
  73. @@ -145,12 +147,12 @@ src-chk-nongnu = \#undef _GNU_SOURCE
  74. # And they also generate warnings from warning attributes, which
  75. # cannot be disabled via pragmas, so require -Wno-error to be used.
  76. define gen-chk-test
  77. -tests-$(1)-chk += tst-fortify-$(1)-$(2)-$(3)
  78. -CFLAGS-tst-fortify-$(1)-$(2)-$(3).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \
  79. +tests-$(1)-$(4)-chk += tst-fortify-$(1)-$(2)-$(3)-$(4)
  80. +CFLAGS-tst-fortify-$(1)-$(2)-$(3)-$(4).$(1) += -D_FORTIFY_SOURCE=$(3) -Wno-format \
  81. -Wno-deprecated-declarations \
  82. -Wno-error
  83. -$(eval $(call cflags-$(2),$(1),$(3)))
  84. -$(objpfx)tst-fortify-$(1)-$(2)-$(3).$(1): tst-fortify.c Makefile
  85. +$(eval $(call cflags-$(2),$(1),$(3),$(4)))
  86. +$(objpfx)tst-fortify-$(1)-$(2)-$(3)-$(4).$(1): tst-fortify.c Makefile
  87. ( echo "/* Autogenerated from Makefile. */"; \
  88. echo "$(src-chk-$(2))"; \
  89. echo "#include \"tst-fortify.c\"" ) > $$@.tmp
  90. @@ -159,19 +161,29 @@ endef
  91. chk-extensions = c cc
  92. chk-types = default lfs nongnu
  93. +# 64 bit time_t implies LFS.
  94. +chk-types-time64 = default nongnu
  95. chk-levels = 1 2 3
  96. $(foreach e,$(chk-extensions), \
  97. $(foreach t,$(chk-types), \
  98. $(foreach l,$(chk-levels), \
  99. - $(eval $(call gen-chk-test,$(e),$(t),$(l))))))
  100. + $(eval $(call gen-chk-test,$(e),$(t),$(l),def)))))
  101. -tests-all-chk += $(tests-c-chk) $(tests-cc-chk)
  102. +tests-all-chk += $(tests-c-def-chk) $(tests-cc-def-chk)
  103. +
  104. +$(foreach e,$(chk-extensions), \
  105. + $(foreach t,$(chk-types-time64), \
  106. + $(foreach l,$(chk-levels), \
  107. + $(eval $(call gen-chk-test,$(e),$(t),$(l),time64)))))
  108. +
  109. +tests-all-time64-chk += $(tests-c-time64-chk) $(tests-cc-time64-chk)
  110. define link-cc
  111. LDLIBS-$(1) = -lstdc++
  112. endef
  113. -$(foreach t,$(tests-cc-chk), $(eval $(call link-cc,$(t))))
  114. +$(foreach t,$(tests-cc-def-chk), $(eval $(call link-cc,$(t))))
  115. +$(foreach t,$(tests-cc-time64-chk), $(eval $(call link-cc,$(t))))
  116. # backtrace_symbols only works if we link with -rdynamic. backtrace
  117. # requires unwind tables on most architectures.
  118. @@ -201,6 +213,10 @@ tests = backtrace-tst \
  119. tst-realpath-chk \
  120. $(tests-all-chk)
  121. +tests-time64 += \
  122. + $(tests-all-time64-chk) \
  123. + # tests-time64
  124. +
  125. ifeq ($(have-ssp),yes)
  126. tests += tst-ssp-1
  127. endif
  128. @@ -210,7 +226,7 @@ tests += tst-read-chk-cancel
  129. endif
  130. ifeq (,$(CXX))
  131. -tests-unsupported = $(tests-cc-chk)
  132. +tests-unsupported = $(tests-cc-def-chk) $(test-cc-time64-chk)
  133. endif
  134. extra-libs = libpcprofile
  135. @@ -235,6 +251,7 @@ define chk-gen-locales
  136. $(objpfx)$(1).out: $(gen-locales)
  137. endef
  138. $(foreach t, $(tests-all-chk), $(eval $(call chk-gen-locales,$(t))))
  139. +$(foreach t, $(tests-all-time64-chk), $(eval $(call chk-gen-locales,$(t))))
  140. endif
  141. sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
  142. diff --git a/include/sys/poll.h b/include/sys/poll.h
  143. index f904e21f89..228704fe79 100644
  144. --- a/include/sys/poll.h
  145. +++ b/include/sys/poll.h
  146. @@ -2,13 +2,16 @@
  147. # include <io/sys/poll.h>
  148. #ifndef _ISOMAC
  149. +#include <include/struct___timespec64.h>
  150. +
  151. extern int __poll (struct pollfd *__fds, unsigned long int __nfds,
  152. int __timeout);
  153. libc_hidden_proto (__poll)
  154. libc_hidden_proto (ppoll)
  155. # if __TIMESIZE == 64
  156. -# define __ppoll64 __ppoll
  157. +# define __ppoll64 ppoll
  158. +# define __ppoll64_chk __ppoll_chk
  159. # else
  160. # include <time.h>
  161. # include <signal.h>
  162. diff --git a/io/bits/poll2.h b/io/bits/poll2.h
  163. index 3679d8451a..90f5574969 100644
  164. --- a/io/bits/poll2.h
  165. +++ b/io/bits/poll2.h
  166. @@ -43,6 +43,30 @@ poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
  167. #ifdef __USE_GNU
  168. +# ifdef __USE_TIME_BITS64
  169. +extern int __REDIRECT (__ppoll64_alias, (struct pollfd *__fds, nfds_t __nfds,
  170. + const struct timespec *__timeout,
  171. + const __sigset_t *__ss), __ppoll64);
  172. +extern int __ppoll64_chk (struct pollfd *__fds, nfds_t __nfds,
  173. + const struct timespec *__timeout,
  174. + const __sigset_t *__ss, __SIZE_TYPE__ __fdslen)
  175. + __attr_access ((__write_only__, 1, 2));
  176. +extern int __REDIRECT (__ppoll64_chk_warn, (struct pollfd *__fds, nfds_t __n,
  177. + const struct timespec *__timeout,
  178. + const __sigset_t *__ss,
  179. + __SIZE_TYPE__ __fdslen),
  180. + __ppoll64_chk)
  181. + __warnattr ("ppoll called with fds buffer too small file nfds entries");
  182. +
  183. +__fortify_function __fortified_attr_access (__write_only__, 1, 2) int
  184. +ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout,
  185. + const __sigset_t *__ss)
  186. +{
  187. + return __glibc_fortify (ppoll64, __nfds, sizeof (*__fds),
  188. + __glibc_objsize (__fds),
  189. + __fds, __nfds, __timeout, __ss);
  190. +}
  191. +# else
  192. extern int __REDIRECT (__ppoll_alias, (struct pollfd *__fds, nfds_t __nfds,
  193. const struct timespec *__timeout,
  194. const __sigset_t *__ss), ppoll);
  195. @@ -65,6 +89,7 @@ ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout,
  196. __glibc_objsize (__fds),
  197. __fds, __nfds, __timeout, __ss);
  198. }
  199. +# endif
  200. #endif
  201. __END_DECLS
  202. diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
  203. index 65d2ceda2c..ca6eb1a49e 100644
  204. --- a/sysdeps/unix/sysv/linux/Versions
  205. +++ b/sysdeps/unix/sysv/linux/Versions
  206. @@ -313,6 +313,11 @@ libc {
  207. process_madvise;
  208. process_mrelease;
  209. }
  210. + GLIBC_2.37 {
  211. +%ifdef TIME64_NON_DEFAULT
  212. + __ppoll64_chk;
  213. +%endif
  214. + }
  215. GLIBC_PRIVATE {
  216. # functions used in other libraries
  217. __syscall_rt_sigqueueinfo;
  218. diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
  219. index e0668a80cf..f28402fe03 100644
  220. --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
  221. +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
  222. @@ -513,6 +513,7 @@ GLIBC_2.36 pidfd_open F
  223. GLIBC_2.36 pidfd_send_signal F
  224. GLIBC_2.36 process_madvise F
  225. GLIBC_2.36 process_mrelease F
  226. +GLIBC_2.37 __ppoll64_chk F
  227. GLIBC_2.4 _Exit F
  228. GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
  229. GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
  230. diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
  231. index d28e7c60b7..e2f56880ed 100644
  232. --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
  233. +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
  234. @@ -510,6 +510,7 @@ GLIBC_2.36 pidfd_open F
  235. GLIBC_2.36 pidfd_send_signal F
  236. GLIBC_2.36 process_madvise F
  237. GLIBC_2.36 process_mrelease F
  238. +GLIBC_2.37 __ppoll64_chk F
  239. GLIBC_2.4 _Exit F
  240. GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
  241. GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
  242. diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
  243. index 922b05062f..319d92356e 100644
  244. --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
  245. +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
  246. @@ -2669,3 +2669,4 @@ GLIBC_2.36 pidfd_open F
  247. GLIBC_2.36 pidfd_send_signal F
  248. GLIBC_2.36 process_madvise F
  249. GLIBC_2.36 process_mrelease F
  250. +GLIBC_2.37 __ppoll64_chk F
  251. diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
  252. index 412144f94c..6450e17ebe 100644
  253. --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
  254. +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
  255. @@ -2618,6 +2618,7 @@ GLIBC_2.36 pidfd_open F
  256. GLIBC_2.36 pidfd_send_signal F
  257. GLIBC_2.36 process_madvise F
  258. GLIBC_2.36 process_mrelease F
  259. +GLIBC_2.37 __ppoll64_chk F
  260. GLIBC_2.4 __confstr_chk F
  261. GLIBC_2.4 __fgets_chk F
  262. GLIBC_2.4 __fgets_unlocked_chk F
  263. diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
  264. index 134393900a..0a24ec9afd 100644
  265. --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
  266. +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
  267. @@ -2802,6 +2802,7 @@ GLIBC_2.36 pidfd_open F
  268. GLIBC_2.36 pidfd_send_signal F
  269. GLIBC_2.36 process_madvise F
  270. GLIBC_2.36 process_mrelease F
  271. +GLIBC_2.37 __ppoll64_chk F
  272. GLIBC_2.4 __confstr_chk F
  273. GLIBC_2.4 __fgets_chk F
  274. GLIBC_2.4 __fgets_unlocked_chk F
  275. diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
  276. index 0604029c68..16243a7a92 100644
  277. --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
  278. +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
  279. @@ -514,6 +514,7 @@ GLIBC_2.36 pidfd_open F
  280. GLIBC_2.36 pidfd_send_signal F
  281. GLIBC_2.36 process_madvise F
  282. GLIBC_2.36 process_mrelease F
  283. +GLIBC_2.37 __ppoll64_chk F
  284. GLIBC_2.4 _Exit F
  285. GLIBC_2.4 _IO_2_1_stderr_ D 0x98
  286. GLIBC_2.4 _IO_2_1_stdin_ D 0x98
  287. diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
  288. index af2be5c80d..564a553b27 100644
  289. --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
  290. +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
  291. @@ -2745,6 +2745,7 @@ GLIBC_2.36 pidfd_open F
  292. GLIBC_2.36 pidfd_send_signal F
  293. GLIBC_2.36 process_madvise F
  294. GLIBC_2.36 process_mrelease F
  295. +GLIBC_2.37 __ppoll64_chk F
  296. GLIBC_2.4 __confstr_chk F
  297. GLIBC_2.4 __fgets_chk F
  298. GLIBC_2.4 __fgets_unlocked_chk F
  299. diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
  300. index e090b8d48f..e850f47b21 100644
  301. --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
  302. +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
  303. @@ -2718,3 +2718,4 @@ GLIBC_2.36 pidfd_open F
  304. GLIBC_2.36 pidfd_send_signal F
  305. GLIBC_2.36 process_madvise F
  306. GLIBC_2.36 process_mrelease F
  307. +GLIBC_2.37 __ppoll64_chk F
  308. diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
  309. index 8c5b2db243..37178c503f 100644
  310. --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
  311. +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
  312. @@ -2715,3 +2715,4 @@ GLIBC_2.36 pidfd_open F
  313. GLIBC_2.36 pidfd_send_signal F
  314. GLIBC_2.36 process_madvise F
  315. GLIBC_2.36 process_mrelease F
  316. +GLIBC_2.37 __ppoll64_chk F
  317. diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
  318. index 68847134a2..3b30b31466 100644
  319. --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
  320. +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
  321. @@ -2710,6 +2710,7 @@ GLIBC_2.36 pidfd_open F
  322. GLIBC_2.36 pidfd_send_signal F
  323. GLIBC_2.36 process_madvise F
  324. GLIBC_2.36 process_mrelease F
  325. +GLIBC_2.37 __ppoll64_chk F
  326. GLIBC_2.4 __confstr_chk F
  327. GLIBC_2.4 __fgets_chk F
  328. GLIBC_2.4 __fgets_unlocked_chk F
  329. diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
  330. index daa44e64fa..0e358570a2 100644
  331. --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
  332. +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
  333. @@ -2708,6 +2708,7 @@ GLIBC_2.36 pidfd_open F
  334. GLIBC_2.36 pidfd_send_signal F
  335. GLIBC_2.36 process_madvise F
  336. GLIBC_2.36 process_mrelease F
  337. +GLIBC_2.37 __ppoll64_chk F
  338. GLIBC_2.4 __confstr_chk F
  339. GLIBC_2.4 __fgets_chk F
  340. GLIBC_2.4 __fgets_unlocked_chk F
  341. diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
  342. index 6169188c96..59c598b98f 100644
  343. --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
  344. +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
  345. @@ -2716,6 +2716,7 @@ GLIBC_2.36 pidfd_open F
  346. GLIBC_2.36 pidfd_send_signal F
  347. GLIBC_2.36 process_madvise F
  348. GLIBC_2.36 process_mrelease F
  349. +GLIBC_2.37 __ppoll64_chk F
  350. GLIBC_2.4 __confstr_chk F
  351. GLIBC_2.4 __fgets_chk F
  352. GLIBC_2.4 __fgets_unlocked_chk F
  353. diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
  354. index 58e9b486b0..463e01ab84 100644
  355. --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
  356. +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
  357. @@ -2757,3 +2757,4 @@ GLIBC_2.36 pidfd_open F
  358. GLIBC_2.36 pidfd_send_signal F
  359. GLIBC_2.36 process_madvise F
  360. GLIBC_2.36 process_mrelease F
  361. +GLIBC_2.37 __ppoll64_chk F
  362. diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
  363. index 8c9ca32cbe..405d40d11c 100644
  364. --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
  365. +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
  366. @@ -2772,6 +2772,7 @@ GLIBC_2.36 pidfd_open F
  367. GLIBC_2.36 pidfd_send_signal F
  368. GLIBC_2.36 process_madvise F
  369. GLIBC_2.36 process_mrelease F
  370. +GLIBC_2.37 __ppoll64_chk F
  371. GLIBC_2.4 _IO_fprintf F
  372. GLIBC_2.4 _IO_printf F
  373. GLIBC_2.4 _IO_sprintf F
  374. diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
  375. index 08a6604aab..ce89602b93 100644
  376. --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
  377. +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
  378. @@ -2805,6 +2805,7 @@ GLIBC_2.36 pidfd_open F
  379. GLIBC_2.36 pidfd_send_signal F
  380. GLIBC_2.36 process_madvise F
  381. GLIBC_2.36 process_mrelease F
  382. +GLIBC_2.37 __ppoll64_chk F
  383. GLIBC_2.4 _IO_fprintf F
  384. GLIBC_2.4 _IO_printf F
  385. GLIBC_2.4 _IO_sprintf F
  386. diff --git a/sysdeps/unix/sysv/linux/ppoll.c b/sysdeps/unix/sysv/linux/ppoll.c
  387. index 1105e29b00..2e173b931d 100644
  388. --- a/sysdeps/unix/sysv/linux/ppoll.c
  389. +++ b/sysdeps/unix/sysv/linux/ppoll.c
  390. @@ -67,7 +67,7 @@ __ppoll64 (struct pollfd *fds, nfds_t nfds, const struct __timespec64 *timeout,
  391. libc_hidden_def (__ppoll64)
  392. int
  393. -__ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
  394. +ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
  395. const sigset_t *sigmask)
  396. {
  397. struct __timespec64 ts64;
  398. @@ -77,5 +77,4 @@ __ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout,
  399. return __ppoll64 (fds, nfds, timeout ? &ts64 : NULL, sigmask);
  400. }
  401. #endif
  402. -strong_alias (__ppoll, ppoll)
  403. libc_hidden_def (ppoll)
  404. diff --git a/sysdeps/unix/sysv/linux/ppoll_chk.c b/sysdeps/unix/sysv/linux/ppoll_chk.c
  405. new file mode 100644
  406. index 0000000000..65c4b56671
  407. --- /dev/null
  408. +++ b/sysdeps/unix/sysv/linux/ppoll_chk.c
  409. @@ -0,0 +1,42 @@
  410. +/* Fortify ppoll implementation. Linux version.
  411. + Copyright (C) 2022 Free Software Foundation, Inc.
  412. + This file is part of the GNU C Library.
  413. +
  414. + The GNU C Library is free software; you can redistribute it and/or
  415. + modify it under the terms of the GNU Lesser General Public
  416. + License as published by the Free Software Foundation; either
  417. + version 2.1 of the License, or (at your option) any later version.
  418. +
  419. + The GNU C Library is distributed in the hope that it will be useful,
  420. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  421. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  422. + Lesser General Public License for more details.
  423. +
  424. + You should have received a copy of the GNU Lesser General Public
  425. + License along with the GNU C Library; if not, see
  426. + <https://www.gnu.org/licenses/>. */
  427. +
  428. +#include <poll.h>
  429. +
  430. +int
  431. +__ppoll64_chk (struct pollfd *fds, nfds_t nfds,
  432. + const struct __timespec64 *tmo, const __sigset_t *ss,
  433. + __SIZE_TYPE__ fdslen)
  434. +{
  435. + if (fdslen / sizeof (*fds) < nfds)
  436. + __chk_fail ();
  437. +
  438. + return __ppoll64 (fds, nfds, tmo, ss);
  439. +}
  440. +
  441. +#if __TIMESIZE != 64
  442. +int
  443. +__ppoll_chk (struct pollfd *fds, nfds_t nfds, const struct timespec *tmo,
  444. + const __sigset_t *ss, __SIZE_TYPE__ fdslen)
  445. +{
  446. + if (fdslen / sizeof (*fds) < nfds)
  447. + __chk_fail ();
  448. +
  449. + return ppoll (fds, nfds, tmo, ss);
  450. +}
  451. +#endif
  452. diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
  453. index 009f22931e..5ca051a9eb 100644
  454. --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
  455. +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
  456. @@ -2770,6 +2770,7 @@ GLIBC_2.36 pidfd_open F
  457. GLIBC_2.36 pidfd_send_signal F
  458. GLIBC_2.36 process_madvise F
  459. GLIBC_2.36 process_mrelease F
  460. +GLIBC_2.37 __ppoll64_chk F
  461. GLIBC_2.4 _IO_fprintf F
  462. GLIBC_2.4 _IO_printf F
  463. GLIBC_2.4 _IO_sprintf F
  464. diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
  465. index afb5bc37b1..5b48168ec6 100644
  466. --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
  467. +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
  468. @@ -2625,6 +2625,7 @@ GLIBC_2.36 pidfd_open F
  469. GLIBC_2.36 pidfd_send_signal F
  470. GLIBC_2.36 process_madvise F
  471. GLIBC_2.36 process_mrelease F
  472. +GLIBC_2.37 __ppoll64_chk F
  473. GLIBC_2.4 __confstr_chk F
  474. GLIBC_2.4 __fgets_chk F
  475. GLIBC_2.4 __fgets_unlocked_chk F
  476. diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
  477. index 2b53a3cf92..c42b39cea8 100644
  478. --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
  479. +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
  480. @@ -2622,6 +2622,7 @@ GLIBC_2.36 pidfd_open F
  481. GLIBC_2.36 pidfd_send_signal F
  482. GLIBC_2.36 process_madvise F
  483. GLIBC_2.36 process_mrelease F
  484. +GLIBC_2.37 __ppoll64_chk F
  485. GLIBC_2.4 __confstr_chk F
  486. GLIBC_2.4 __fgets_chk F
  487. GLIBC_2.4 __fgets_unlocked_chk F
  488. diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
  489. index 43b9844a99..5a0a662dee 100644
  490. --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
  491. +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
  492. @@ -2765,6 +2765,7 @@ GLIBC_2.36 pidfd_open F
  493. GLIBC_2.36 pidfd_send_signal F
  494. GLIBC_2.36 process_madvise F
  495. GLIBC_2.36 process_mrelease F
  496. +GLIBC_2.37 __ppoll64_chk F
  497. GLIBC_2.4 _IO_fprintf F
  498. GLIBC_2.4 _IO_printf F
  499. GLIBC_2.4 _IO_sprintf F