This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix tst-cancel17/tst-cancelx17, which sometimes segfaults while exiting.


On 05/17/2016 09:18 AM, Florian Weimer wrote:
On 05/17/2016 08:57 AM, Stefan Liebler wrote:
        * nptl/tst-cancel17.c (do_test): Wait for finishing aio_read(&a).

Nice analysis.  Looks good to me.

diff --git a/nptl/tst-cancel17.c b/nptl/tst-cancel17.c
index fb89292..9ff4e27 100644
--- a/nptl/tst-cancel17.c
+++ b/nptl/tst-cancel17.c
@@ -333,6 +333,22 @@ do_test (void)

   puts ("early cancellation succeeded");

+  if (ap == &a2)
+    {
+      /* The aio_read(&a) was not canceled, because the read request was
+     already in progress. In the meanwhile aio_write(ap) wrote something
+     to the pipe and the read request either has already been
finished or
+     is able to read the requested byte.
+     Wait for the read request before returning from this function,
because
+     the return value and error code from the read syscall will be
written
+     to the struct aiocb a, which lays on the stack of this function.
+     Otherwise the stack from subsequent function calls - e.g.
_dl_fini -
+     will be corrupted, which can lead to undefined behaviour like a
+     segmentation fault.  */

I think it should be âwhich *lies* on the stackâ (the intransitive
variant), and a comma before âbecauseâ is frowned upon in some circles.

Thanks,
Florian

Oops. Thanks.

Committed with your comments.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]