Skip to contentSkip to conversation

pthread_detach/4-3: workaround for segment fault

PATCH Jan Stancek 2 participants 13 messages Aug 21, 2012 – Aug 29, 2012

lore
Share & tools
lore
#0 lore raw

----- Original Message -----

Quoted 5 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Tuesday, 21 August, 2012 11:59:19 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

<snip>

Quoted 4 lines

Hi Jan,

Thanks.
I am sorry that It doesn't work and still "segment fault".

Maybe we can narrow it down by running only subset of scenarios. I would suggest trying to limit "sc" or "NSCENAR" and see which one triggers it.

Another thing that looks suspicious are scenarios with altstack, there seems to be small window where more than 1 thread can use same altstack. Can you try to reproduce it without altstack scenarios?

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +5 -0
index 5c15e93..63b6ee7 100644
@@ -162,6 +162,11 @@ static void *test(void *arg)
                output("Starting test with scenario (%i): %s\n",
                       sc, scenarii[sc].descr);
 #endif
+               if (scenarii[sc].altstack) {
+                       sc++;
+                       sc %= NSCENAR;
+                       continue;
+               }
 
                count_ope++;
 

Regards,
Jan

Quoted 4 lines

Regards,
Kai

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#1 lore raw
Quoted 26 lines · Jan Stancek

----- Original Message -----

Quoted 5 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Tuesday, 21 August, 2012 11:59:19 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

<snip>

Quoted 4 lines

Hi Jan,

Thanks.
I am sorry that It doesn't work and still "segment fault".

Maybe we can narrow it down by running only subset of scenarios. I would suggest trying to limit "sc" or "NSCENAR" and see which one triggers it.

Another thing that looks suspicious are scenarios with altstack, there seems to be small window where more than 1 thread can use same altstack. Can you try to reproduce it without altstack scenarios?

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
index 5c15e93..63b6ee7 100644

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c static void *test(void *arg) · line 164

Quoted 3 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
@@ -162,6 +162,11 @@ static void *test(void *arg)
                 output("Starting test with scenario (%i): %s\n",
                        sc, scenarii[sc].descr);
  #endif

Hi Jan,

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c static void *test(void *arg) · line 170

Quoted 6 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +5 -0
+               if (scenarii[sc].altstack) {
+                       sc++;
+                       sc %= NSCENAR;
+                       continue;
+               }
 

It fails with another error randomly, and output is:

[09:45:16]System abilities:
[09:45:16] TSA: 200809
[09:45:16] TSS: 200809
[09:45:16] TPS: 200809
[09:45:16] pagesize: 4096
[09:45:16] min stack size: 16384
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]All 33 thread attribute objects were initialized

[09:45:18]Test ../../../conformance/interfaces/pthread_detach/4-3.c
unresolved: got 12 (Cannot allocate memory) on line 179 (Failed to create this thread)

Regards,
Kai

Quoted 10 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
                 count_ope++;
 

Regards,
Jan

Quoted 3 lines

Regards,
Kai

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#2 lore raw

----- Original Message -----

Quoted 81 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Wednesday, 22 August, 2012 4:29:25 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 33 lines · Jan Stancek

----- Original Message -----

Quoted 7 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Tuesday, 21 August, 2012 11:59:19 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

<snip>

Quoted 4 lines

Hi Jan,

Thanks.
I am sorry that It doesn't work and still "segment fault".

Maybe we can narrow it down by running only subset of scenarios. I would suggest trying to limit "sc" or "NSCENAR" and see which one triggers it.

Another thing that looks suspicious are scenarios with altstack, there seems
to be small window where more than 1 thread can use same altstack. Can you try to reproduce it without altstack scenarios?

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman
index 5c15e93..63b6ee7 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c static void *test(void *arg) · line 164

Quoted 3 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
@@ -162,6 +162,11 @@ static void *test(void *arg)
                 output("Starting test with scenario (%i): %s\n",
                        sc, scenarii[sc].descr);
  #endif

Hi Jan,

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c static void *test(void *arg) · line 170

Quoted 6 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +5 -0
+               if (scenarii[sc].altstack) {
+                       sc++;
+                       sc %= NSCENAR;
+                       continue;
+               }
 

It fails with another error randomly, and output is:

[09:45:16]System abilities:
[09:45:16] TSA: 200809
[09:45:16] TSS: 200809
[09:45:16] TPS: 200809
[09:45:16] pagesize: 4096
[09:45:16] min stack size: 16384
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]All 33 thread attribute objects were initialized

Quoted 3 lines

[09:45:18]Test ../../../conformance/interfaces/pthread_detach/4-3.c
unresolved: got 12 (Cannot allocate memory) on line 179 (Failed to create this thread)

Is the above output from mips or x86_64?
Are you running it as root user?

Regards,
Jan

Quoted 17 lines

Regards,
Kai

Quoted 10 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
                 count_ope++;
 

Regards,
Jan

Quoted 3 lines

Regards,
Kai

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#3 lore raw
Quoted 83 lines · Jan Stancek

----- Original Message -----

Quoted 81 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Wednesday, 22 August, 2012 4:29:25 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 32 lines · Jan Stancek

----- Original Message -----

Quoted 7 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Tuesday, 21 August, 2012 11:59:19 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

<snip>

Quoted 4 lines

Hi Jan,

Thanks.
I am sorry that It doesn't work and still "segment fault".

Maybe we can narrow it down by running only subset of scenarios. I would suggest trying to limit "sc" or "NSCENAR" and see which one triggers it.

Another thing that looks suspicious are scenarios with altstack, there seems
to be small window where more than 1 thread can use same altstack. Can you try to reproduce it without altstack scenarios?

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman
index 5c15e93..63b6ee7 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c static void *test(void *arg) · line 164

Quoted 3 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
@@ -162,6 +162,11 @@ static void *test(void *arg)
                  output("Starting test with scenario (%i): %s\n",
                         sc, scenarii[sc].descr);
   #endif

Hi Jan,

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c static void *test(void *arg) · line 170

Quoted 6 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +5 -0
+               if (scenarii[sc].altstack) {
+                       sc++;
+                       sc %= NSCENAR;
+                       continue;
+               }
 

It fails with another error randomly, and output is:

[09:45:16]System abilities:
[09:45:16] TSA: 200809
[09:45:16] TSS: 200809
[09:45:16] TPS: 200809
[09:45:16] pagesize: 4096
[09:45:16] min stack size: 16384
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails
[09:45:16]All 33 thread attribute objects were initialized

[09:45:18]Test ../../../conformance/interfaces/pthread_detach/4-3.c
unresolved: got 12 (Cannot allocate memory) on line 179 (Failed to create this thread)

Hi Jan,

Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with root and test passes.
It passes on routerstation(mips) with your patch too.
So it looks like a race condition issue about stack attribute between threads, right?

Thanks a lot.
Kai

Quoted 18 lines

Regards,
Jan

Quoted 14 lines

Regards,
Kai

Quoted 9 lines
testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +0 -0
                  count_ope++;
 

Regards,
Jan

Quoted 3 lines

Regards,
Kai

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#4 lore raw

----- Original Message -----

Quoted 6 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Wednesday, 22 August, 2012 10:28:59 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 8 lines

Hi Jan,

Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with root
and test passes.

Your unprivileged user is hitting some resource limit, I'd be interested to see how many threads are actually running at the same time.

Quoted 3 lines

It passes on routerstation(mips) with your patch too.
So it looks like a race condition issue about stack attribute between threads, right?

I think so. We can try different way of signalling when threaded() is done and try it again with all scenarios.

Regards,
Jan

Quoted 4 lines

Thanks a lot.
Kai

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#5 lore raw
Quoted 21 lines · Jan Stancek

----- Original Message -----

Quoted 6 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Wednesday, 22 August, 2012 10:28:59 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 8 lines

Hi Jan,

Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with root
and test passes.

Your unprivileged user is hitting some resource limit, I'd be interested to see how many threads are actually running at the same time.

Quoted 6 lines
Quoted 3 lines

It passes on routerstation(mips) with your patch too.
So it looks like a race condition issue about stack attribute between threads, right?

I think so. We can try different way of signalling when threaded() is done and try it again with all scenarios.

I think this testcase is broken in more than 1 way. At least on my setup, I don't see a single pthread_detach() while signals are firing - which is exactly goal of this test.

With following change:

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +1 -0
index dfa6e19..48e1343 100644
@@ -277,6 +276,7 @@ int main(int argc, char *argv[])
                do_it1 = 0;
        } while (do_it1);
 
+       output("  %d thread detached while signals were firing.\n", count_ope);
        sleep(1);
 
        do {

I get:
[16:11:23] 1 thread detached while signals are firing. [16:11:24]Test executed successfully. [16:11:24] 77865 thread detached.

and that reported "1" is how many threads attempted to call pthread_detach, not how many actually succeeded. Signals are firing so frequently that threaded() can't progress at all.

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#6 lore raw
Quoted 41 lines · Jan Stancek
Quoted 14 lines · Jan Stancek

----- Original Message -----

Quoted 7 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Wednesday, 22 August, 2012 10:28:59 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault
Hi Jan,

Quoted 5 lines
Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with root
and test passes.

Quoted 8 lines

Your unprivileged user is hitting some resource limit, I'd be interested to see how many threads are actually running at the same time.

Quoted 3 lines

It passes on routerstation(mips) with your patch too.
So it looks like a race condition issue about stack attribute between threads, right?

I think so. We can try different way of signalling when threaded() is done and try it again with all scenarios.

I think this testcase is broken in more than 1 way. At least on my setup, I don't see a single pthread_detach() while signals are firing - which is exactly goal of this test.

With following change:

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +1 -0
index dfa6e19..48e1343 100644
@@ -277,6 +276,7 @@ int main(int argc, char *argv[])
                 do_it1 = 0;
         } while (do_it1);
 
+       output("  %d thread detached while signals were firing.\n", count_ope);
         sleep(1);
 
         do {
Quoted 7 lines

I get:
[16:11:23] 1 thread detached while signals are firing. [16:11:24]Test executed successfully. [16:11:24] 77865 thread detached.

and that reported "1" is how many threads attempted to call pthread_detach, not how many actually succeeded. Signals are firing so frequently that threaded() can't progress at all.

Then how do we fix this case? sync sending the signals with pthread_detach?

Wanlong, any comments?

Thanks,
Kai

Quoted 4 lines

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#7 lore raw

----- Original Message -----

Quoted 66 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>, [email protected]
Cc: [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Thursday, 23 August, 2012 8:21:43 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 59 lines · Jan Stancek
Quoted 21 lines · Jan Stancek

----- Original Message -----

Quoted 9 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Wednesday, 22 August, 2012 10:28:59 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault
Hi Jan,

Quoted 6 lines
Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with
root
and test passes.

Your unprivileged user is hitting some resource limit, I'd be interested
to see how many threads are actually running at the same time.

Quoted 7 lines
Quoted 4 lines

It passes on routerstation(mips) with your patch too. So it looks like a race condition issue about stack attribute between
threads, right?

I think so. We can try different way of signalling when threaded() is done
and try it again with all scenarios.

I think this testcase is broken in more than 1 way. At least on my setup, I don't see
a single pthread_detach() while signals are firing - which is exactly goal of this test.

With following change:

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman
index dfa6e19..48e1343 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +1 -0
@@ -277,6 +276,7 @@ int main(int argc, char *argv[])
                 do_it1 = 0;
         } while (do_it1);
 
+       output("  %d thread detached while signals were firing.\n",
 count_ope);
         sleep(1);
 
         do {

I get:
[16:11:23] 1 thread detached while signals are firing. [16:11:24]Test executed successfully. [16:11:24] 77865 thread detached.

Quoted 7 lines
Quoted 4 lines

and that reported "1" is how many threads attempted to call pthread_detach, not how many actually
succeeded. Signals are firing so frequently that threaded() can't progress at all.

Then how do we fix this case? sync sending the signals with pthread_detach?

I was thinking usleep(sleep_time) that progressively increases. So it starts firing signals as quickly as it can and slows down over time. Each pthread_detach() would reset the sleep_time.

As for our original issue, idea I'm playing with is:

main (procA) - do_child (procB) - send_sig (thread)
\
test (thread) - threaded (detached thread)

- turn 'while' in test() to single 'for' loop
- loop in main, fork and call do_child, wait for child to finish

This way we can be sure, that we don't reuse same stack for multiple threads, and we can also be sure, there won't be more than NSCENAR threads, so unprivileged user should not run out of resources.

Regards,
Jan

Quoted 12 lines

Wanlong, any comments?

Thanks,
Kai

Quoted 4 lines

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#8 lore raw
Quoted 81 lines · Jan Stancek

----- Original Message -----

Quoted 66 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>, [email protected]
Cc: [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Thursday, 23 August, 2012 8:21:43 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 59 lines · Jan Stancek
Quoted 21 lines · Jan Stancek

----- Original Message -----

Quoted 9 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Wednesday, 22 August, 2012 10:28:59 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault
Hi Jan,

Quoted 6 lines
Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with
root
and test passes.

Your unprivileged user is hitting some resource limit, I'd be interested
to see how many threads are actually running at the same time.

Quoted 7 lines
Quoted 4 lines

It passes on routerstation(mips) with your patch too. So it looks like a race condition issue about stack attribute between
threads, right?

I think so. We can try different way of signalling when threaded() is done
and try it again with all scenarios.

I think this testcase is broken in more than 1 way. At least on my setup, I don't see
a single pthread_detach() while signals are firing - which is exactly goal of this test.

With following change:

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman
index dfa6e19..48e1343 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +1 -0
@@ -277,6 +276,7 @@ int main(int argc, char *argv[])
                 do_it1 = 0;
         } while (do_it1);
 
+       output("  %d thread detached while signals were firing.\n",
 count_ope);
         sleep(1);
 
         do {

I get:
[16:11:23] 1 thread detached while signals are firing. [16:11:24]Test executed successfully. [16:11:24] 77865 thread detached.

Quoted 7 lines
Quoted 4 lines

and that reported "1" is how many threads attempted to call pthread_detach, not how many actually
succeeded. Signals are firing so frequently that threaded() can't progress at all.

Then how do we fix this case? sync sending the signals with pthread_detach?

I was thinking usleep(sleep_time) that progressively increases. So it starts firing signals as quickly as it can and slows down over time. Each pthread_detach() would reset the sleep_time.

Quoted 8 lines

As for our original issue, idea I'm playing with is:

main (procA) - do_child (procB) - send_sig (thread)
\
test (thread) - threaded (detached thread)

- turn 'while' in test() to single 'for' loop
- loop in main, fork and call do_child, wait for child to finish

Hi,

attached is v1 of the idea above. I ran it 100x times on various setups as root and unprivileged user.

Kai, would you like to give a try?

Regards,
Jan

Quoted 21 lines

This way we can be sure, that we don't reuse same stack for multiple threads, and we can also be sure, there won't be more than NSCENAR threads, so unprivileged user should not run out of resources.

Regards,
Jan

Quoted 12 lines

Wanlong, any comments?

Thanks,
Kai

Quoted 4 lines

Regards,
Jan

Quoted 10 lines

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

/*
* Copyright (c) 2004, Bull S.A.. All rights reserved.
* Created by: Sebastien Decugis
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it would be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write the Free Software Foundation, Inc., 59
* Temple Place - Suite 330, Boston MA 02111-1307, USA.
*
* This sample test aims to check the following assertion:
*
* The function does not return EINTR
*
* The steps are:
* -> kill a thread which calls pthread_detach()
* -> check that EINTR is never returned
*
*/

#define _POSIX_C_SOURCE 200112L

/* Some routines are part of the XSI Extensions */ #ifndef WITHOUT_XOPEN
#define _XOPEN_SOURCE 600
#endif

#include <sys/time.h>
#include <sys/wait.h>
#include <assert.h>
#include <errno.h>
#include <pthread.h>
#include <sched.h>
#include <semaphore.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "../testfrmw/testfrmw.h"
#include "../testfrmw/testfrmw.c"

#define SAFE(op) if ((op) == -1) UNRESOLVED(errno, "unexpected failure");

#define SIGNALS_WITHOUT_DELAY 100
#ifndef VERBOSE
#define VERBOSE 1
#endif
#define WITH_SYNCHRO
#define RUN_TIME_USEC 2*1000*1000

#include "../testfrmw/threads_scenarii.c"

#ifdef WITH_SYNCHRO
static sem_t semsig1;
#endif
static unsigned long count_sig;
static volatile int do_it1 = 1;
static unsigned long sleep_time;
static unsigned long count_ope;
static sigset_t usersigs;

struct thestruct {
	int	sig;
#ifdef WITH_SYNCHRO
	sem_t	*sem;

#endif
};

unsigned long current_time_usec()

{
	struct timeval now;
	SAFE(gettimeofday(&now, NULL));
	return now.tv_sec * 1000000 + now.tv_usec;
}

/* the following function keeps on sending the signal to the process */ static void *sendsig(void *arg)

{
	struct thestruct *thearg = (struct thestruct *)arg;
	int ret;
	pid_t process;

	process = getpid();

	/* We block the signals SIGUSR1 and SIGUSR2 for this THREAD */
	ret = pthread_sigmask(SIG_BLOCK, &usersigs, NULL);
	if (ret != 0)
		UNRESOLVED(ret, "Unable to block SIGUSR1 and SIGUSR2"
			   " in signal thread");

	while (do_it1) {
#ifdef WITH_SYNCHRO
		ret = sem_wait(thearg->sem);
		if (ret)
			UNRESOLVED(errno, "Sem_wait in sendsig");
		if (!do_it1)
			break;

		count_sig++;
#endif
		/* keep increasing sleeptime to make sure we progress
		 * allow SIGNALS_WITHOUT_DELAY signals without any pause,
		 * then start increasing sleep_time to make sure all threads
		 * can progress */
		sleep_time++;
		if (sleep_time / SIGNALS_WITHOUT_DELAY > 0)
			usleep(sleep_time / SIGNALS_WITHOUT_DELAY);

		ret = kill(process, thearg->sig);
		if (ret != 0)
			UNRESOLVED(errno, "Kill in sendsig");
	}
	return NULL;
}

static void sighdl1(int sig)
{

#ifdef WITH_SYNCHRO
	if (sem_post(&semsig1))
		UNRESOLVED(errno, "Sem_post in signal handler 1");

#endif
}

static void *threaded(void *arg)

{
	int ret;

	/* We don't block the signals SIGUSR1 and SIGUSR2 for this THREAD */
	ret = pthread_sigmask(SIG_UNBLOCK, &usersigs, NULL);
	if (ret != 0)
		UNRESOLVED(ret, "Unable to unblock SIGUSR1 and SIGUSR2"
			   " in worker thread");

	ret = pthread_detach(pthread_self());
	if (ret == EINTR)
		FAILED("pthread_detach() returned EINTR");

	/* Signal we're done */
	do {
		ret = sem_post(&scenarii[sc].sem);
	} while ((ret == -1) && (errno == EINTR));
	if (ret == -1)
		UNRESOLVED(errno, "Failed to wait for the semaphore");

	return arg;
}

static void *test(void *arg)

{
	int ret = 0;
	pthread_t child;

	/* We block the signals SIGUSR1 and SIGUSR2 for this THREAD */
	ret = pthread_sigmask(SIG_BLOCK, &usersigs, NULL);
	if (ret != 0)
		UNRESOLVED(ret, "Unable to block SIGUSR1 and SIGUSR2"
			   " in signal thread");

	for (sc = 0; sc < NSCENAR; sc++) {
#if VERBOSE > 5
		output("-----\n");
		output("Starting test with scenario (%i): %s\n",
			sc, scenarii[sc].descr);
#endif
		/* reset sleep time for signal thread */
		sleep_time = 0;

		/* thread which is already detached is not interesting
		 * for this test, skip it */
		if (scenarii[sc].detached == 1)
			continue;

		ret = pthread_create(&child, &scenarii[sc].ta, threaded, NULL);
		switch (scenarii[sc].result) {
		case 0: /* Operation was expected to succeed */
			if (ret != 0)
				UNRESOLVED(ret, "Failed to create this thread");
			break;

		case 1: /* Operation was expected to fail */
			if (ret == 0)
				UNRESOLVED(-1, "An error was expected but the"
					   " thread creation succeeded");
			break;

		case 2: /* We did not know the expected result */
		default:
#if VERBOSE > 5
			if (ret == 0)
				output("Thread has been created successfully"
					" for this scenario\n");
			else
				output("Thread creation failed with the error:"
					" %s\n", strerror(ret));
#endif
			break;
		}
		if (ret == 0) {
			/* Just wait for the thread to terminate */
			do {
				ret = sem_wait(&scenarii[sc].sem);
			} while ((ret == -1) && (errno == EINTR));
			if (ret == -1)
				UNRESOLVED(errno, "Failed to wait for the"
					   " semaphore");
		}
	}

	return NULL;
}

void do_child()

{
	struct thestruct arg1;
	pthread_t th_work, th_sig1;
	struct sigaction sa;
	int ret;

	/* We prepare a signal set which includes SIGUSR1 and SIGUSR2 */
	sigemptyset(&usersigs);
	ret = sigaddset(&usersigs, SIGUSR1);
	/* ret |= sigaddset(&usersigs, SIGUSR2); */
	if (ret != 0)
		UNRESOLVED(ret, "Unable to add SIGUSR1 or 2 to a signal set");

	/* We now block the signals SIGUSR1 and SIGUSR2 for this THREAD */
	ret = pthread_sigmask(SIG_BLOCK, &usersigs, NULL);
	if (ret != 0)
		UNRESOLVED(ret, "Unable to block SIGUSR1 and SIGUSR2"
			   " in main thread");

	/* We need to register the signal handlers for the PROCESS */
	sigemptyset(&sa.sa_mask);
	sa.sa_flags = 0;
	sa.sa_handler = sighdl1;

	ret = sigaction(SIGUSR1, &sa, NULL);
	if (ret)
		UNRESOLVED(ret, "Unable to register signal handler1");

	arg1.sig = SIGUSR1;
#ifdef WITH_SYNCHRO
	if (sem_init(&semsig1, 0, 1))
		UNRESOLVED(errno, "Semsig1  init");
	arg1.sem = &semsig1;

#endif

	count_sig = 0;
	ret = pthread_create(&th_sig1, NULL, sendsig, &arg1);
	if (ret)
		UNRESOLVED(ret, "Signal 1 sender thread creation failed");

	ret = pthread_create(&th_work, NULL, test, NULL);
	if (ret)
		UNRESOLVED(ret, "Worker thread creation failed");

	ret = pthread_join(th_work, NULL);
	if (ret)
		UNRESOLVED(ret, "Worker thread join failed");

	/* to be extra safe unblock signals in this thread,
	 * so signal thread won't get stuck on sem_wait */
	ret = pthread_sigmask(SIG_UNBLOCK, &usersigs, NULL);
	if (ret != 0)
		UNRESOLVED(ret, "Failed to unblock signals");
	do_it1 = 0;
#ifdef WITH_SYNCHRO
	/* if it's already stuck on sem_wait, up the semaphore */
	if (sem_post(&semsig1))
		UNRESOLVED(errno, "Sem_post in do_child");
#endif
	ret = pthread_join(th_sig1, NULL);
	if (ret)
		UNRESOLVED(ret, "Worker thread join failed");
}

void main_loop()

{
	int child_count = 0;
	int stat_pipe[2];
	int ret;
	int status;
	pid_t child;
	unsigned long usec_start, usec;
	unsigned long child_count_sig;

	usec_start = current_time_usec();
	do {
		SAFE(pipe(stat_pipe));

		child_count++;
		count_ope += NSCENAR;
		child = fork();
		if (child == 0) {
			close(stat_pipe[0]);
			do_child();
			SAFE(write(stat_pipe[1], &count_sig, sizeof(count_sig)));
			close(stat_pipe[1]);
			pthread_exit(0);
			UNRESOLVED(0, "Should not be reached");
			exit(0);
		}
		close(stat_pipe[1]);
		SAFE(read(stat_pipe[0], &child_count_sig, sizeof(count_sig)));
		close(stat_pipe[0]);
		count_sig += child_count_sig;

		ret = waitpid(child, &status, 0);
		if (ret != child)
			UNRESOLVED(errno, "Waitpid returned the wrong PID");

		if (!WIFEXITED(status)) {
			output("status: %d\n", status);
			FAILED("Child exited abnormally");
		}

		if (WEXITSTATUS(status) != 0) {
			output("exit status: %d\n", WEXITSTATUS(status));
			FAILED("An error occured in child");
		}

		usec = current_time_usec();
	} while ((usec - usec_start) < RUN_TIME_USEC);
	output("Test spawned %d child processes.\n", child_count);
	output("Test finished after %lu usec.\n", usec - usec_start);
}

int main(int argc, char *argv[])

{
	int ret;

	output_init();
	scenar_init();
	main_loop();
	scenar_fini();
#if VERBOSE > 0
	output("Test executed successfully.\n");
	output("  %d threads detached.\n", count_ope);
#ifdef WITH_SYNCHRO
	output("  %d signals were sent meanwhile.\n", count_sig);
#endif
#endif
	PASSED;
}

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/

_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#9 lore raw
Quoted 84 lines · Jan Stancek
Quoted 83 lines · Jan Stancek

----- Original Message -----

Quoted 65 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>, [email protected]
Cc: [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Thursday, 23 August, 2012 8:21:43 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 58 lines · Jan Stancek
Quoted 20 lines · Jan Stancek

----- Original Message -----

Quoted 9 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Wednesday, 22 August, 2012 10:28:59 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault
Hi Jan,

Quoted 6 lines
Quoted 2 lines

Is the above output from mips or x86_64?
Are you running it as root user?

This was tested on x86_64 with unprivileged user. I retest it with
root
and test passes.

Your unprivileged user is hitting some resource limit, I'd be interested
to see how many threads are actually running at the same time.

Quoted 7 lines
Quoted 4 lines

It passes on routerstation(mips) with your patch too. So it looks like a race condition issue about stack attribute between
threads, right?

I think so. We can try different way of signalling when threaded() is done
and try it again with all scenarios.

I think this testcase is broken in more than 1 way. At least on my setup, I don't see
a single pthread_detach() while signals are firing - which is exactly goal of this test.

With following change:

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman
index dfa6e19..48e1343 100644
---
a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c
+++
b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c

testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +1 -0
@@ -277,6 +276,7 @@ int main(int argc, char *argv[])
                  do_it1 = 0;
          } while (do_it1);
 
+       output("  %d thread detached while signals were firing.\n",
 count_ope);
          sleep(1);
 
          do {

I get:
[16:11:23] 1 thread detached while signals are firing. [16:11:24]Test executed successfully. [16:11:24] 77865 thread detached.

Quoted 6 lines
Quoted 4 lines

and that reported "1" is how many threads attempted to call pthread_detach, not how many actually
succeeded. Signals are firing so frequently that threaded() can't progress at all.

Then how do we fix this case? sync sending the signals with pthread_detach?

I was thinking usleep(sleep_time) that progressively increases. So it starts firing signals as quickly as it can and slows down over time. Each pthread_detach() would reset the sleep_time.

As for our original issue, idea I'm playing with is:

main (procA) - do_child (procB) - send_sig (thread)
\
test (thread) - threaded (detached thread)

Quoted 6 lines
Quoted 2 lines

- turn 'while' in test() to single 'for' loop
- loop in main, fork and call do_child, wait for child to finish

Hi,

attached is v1 of the idea above. I ran it 100x times on various setups as root and unprivileged user.

Hi Jan,

Great!

Quoted 1 line

Kai, would you like to give a try?

I have test it on routerstation, x86_64(ubuntu11.10 & redhat 5.3) and x86(redhat 5.3) each 100+ times, and all PASS.

Regards,
Kai

Quoted 30 lines

Regards,
Jan

Quoted 26 lines

This way we can be sure, that we don't reuse same stack for multiple threads, and we can also be sure, there won't be more than NSCENAR threads, so unprivileged user should not run out of resources.

Regards,
Jan

Quoted 9 lines

Wanlong, any comments?

Thanks,
Kai

Quoted 3 lines

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#10 lore raw

----- Original Message -----

Quoted 25 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>
Cc: [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Friday, 24 August, 2012 4:46:58 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 13 lines
Quoted 13 lines

I was thinking usleep(sleep_time) that progressively increases. So it
starts firing signals as quickly as it can and slows down over time.
Each pthread_detach() would reset the sleep_time.

As for our original issue, idea I'm playing with is:

main (procA) - do_child (procB) - send_sig (thread)
\
test (thread) - threaded (detached thread)

Quoted 6 lines
Quoted 2 lines

- turn 'while' in test() to single 'for' loop
- loop in main, fork and call do_child, wait for child to finish

Hi,

attached is v1 of the idea above. I ran it 100x times on various setups as root and unprivileged user.

Quoted 7 lines

Hi Jan,

Great!

Quoted 1 line

Kai, would you like to give a try?

I have test it on routerstation, x86_64(ubuntu11.10 & redhat 5.3) and x86(redhat 5.3) each 100+ times, and all PASS.

Hi,

I'm still looking at this testcase. I have been testing v1 more on different releases and arches and I'm hitting an issue on ppc64 RHEL6.3.

I'm getting abort from gcc_assert. The most interesting thing is that thread, which aborts shouldn't exist, because for this scenario pthread_create returns 1 (EPERM).

(gdb) bt

#0  0x0000008066374e50 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x0000008066376de4 in abort () at abort.c:92
#2  0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265
#3  uw_init_context_1 (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1472
#4  0x000000806687ebe0 in _Unwind_ForcedUnwind (exc=0xfff97a0f670, stop=@0x8066560ad8: 0x8066545660 <unwind_stop>, stop_argument=0xfff97a0e880) at ../../../gcc/unwind.inc:201
#5  0x0000008066548904 in _Unwind_ForcedUnwind (exc=<value optimized out>, stop=<value optimized out>, stop_argument=<value optimized out>) at ../nptl/sysdeps/pthread/unwind-forcedunwind.c:132
#6  0x0000008066545600 in __pthread_unwind (buf=<value optimized out>) at unwind.c:130
#7  0x0000008066545bac in __do_cancel () at pthreadP.h:265
#8  __pthread_enable_asynccancel () at cancellation.c:49
#9  0x000000806653c568 in start_thread (arg=0xfff97a0f200) at pthread_create.c:289

#10 0x000000806643a32c in .__clone () from /lib64/libc-2.12.so

(gdb) frame 2
#2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265
1265 gcc_assert (size == sizeof(_Unwind_Word));

The arg in threaded() is not used for anything, so I passed scenario number as parameter. (gdb) p/x ((struct pthread *) 0xfff97a0f200)->arg
$1 = 0x12

So it's thread for scenario 0x12. This scenario tries to set explicit scheduling with max priority. When you run this as unprivileged user, pthread_create gives you EPERM.

This comment is interesting, same gcc_assert(), also power7:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#11 lore raw
Quoted 59 lines · Jan Stancek

----- Original Message -----

Quoted 22 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Friday, 24 August, 2012 4:46:58 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 17 lines
Quoted 8 lines

I was thinking usleep(sleep_time) that progressively increases. So it
starts firing signals as quickly as it can and slows down over time.
Each pthread_detach() would reset the sleep_time.

As for our original issue, idea I'm playing with is:

Quoted 7 lines

main (procA) - do_child (procB) - send_sig (thread)
\
test (thread) - threaded (detached thread)

- turn 'while' in test() to single 'for' loop
- loop in main, fork and call do_child, wait for child to finish

Hi,

Quoted 9 lines
Quoted 2 lines

attached is v1 of the idea above. I ran it 100x times on various setups as root and unprivileged user.

Hi Jan,

Great!

Quoted 1 line

Kai, would you like to give a try?

I have test it on routerstation, x86_64(ubuntu11.10& redhat 5.3) and x86(redhat 5.3) each 100+ times, and all PASS.

Hi,

I'm still looking at this testcase. I have been testing v1 more on different releases and arches and I'm hitting an issue on ppc64 RHEL6.3.

I'm getting abort from gcc_assert. The most interesting thing is that thread, which aborts shouldn't exist, because for this scenario pthread_create returns 1 (EPERM).

(gdb) bt

#0  0x0000008066374e50 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x0000008066376de4 in abort () at abort.c:92
#2  0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265
#3  uw_init_context_1 (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1472
#4  0x000000806687ebe0 in _Unwind_ForcedUnwind (exc=0xfff97a0f670, stop=@0x8066560ad8: 0x8066545660<unwind_stop>, stop_argument=0xfff97a0e880) at ../../../gcc/unwind.inc:201
#5  0x0000008066548904 in _Unwind_ForcedUnwind (exc=<value optimized out>, stop=<value optimized out>, stop_argument=<value optimized out>) at ../nptl/sysdeps/pthread/unwind-forcedunwind.c:132
#6  0x0000008066545600 in __pthread_unwind (buf=<value optimized out>) at unwind.c:130
#7  0x0000008066545bac in __do_cancel () at pthreadP.h:265
#8  __pthread_enable_asynccancel () at cancellation.c:49
#9  0x000000806653c568 in start_thread (arg=0xfff97a0f200) at pthread_create.c:289

#10 0x000000806643a32c in .__clone () from /lib64/libc-2.12.so

(gdb) frame 2
#2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265
1265 gcc_assert (size == sizeof(_Unwind_Word));

Quoted 6 lines

The arg in threaded() is not used for anything, so I passed scenario number as parameter. (gdb) p/x ((struct pthread *) 0xfff97a0f200)->arg
$1 = 0x12

So it's thread for scenario 0x12. This scenario tries to set explicit scheduling with max priority. When you run this as unprivileged user, pthread_create gives you EPERM.

Is it proper for this case that limit only root can run?

Regards,
Kai

Quoted 7 lines

This comment is interesting, same gcc_assert(), also power7:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

#12 lore raw

----- Original Message -----

Quoted 92 lines

From: "Kang Kai" <[email protected]>
To: "Jan Stancek" <[email protected]>
Cc: [email protected], "Zhenfeng Zhao" <[email protected]>
Sent: Wednesday, 29 August, 2012 10:57:39 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 85 lines · Jan Stancek

----- Original Message -----

Quoted 27 lines

From: "Kang Kai"<[email protected]>
To: "Jan Stancek"<[email protected]>
Cc: [email protected], "Zhenfeng Zhao"<[email protected]>
Sent: Friday, 24 August, 2012 4:46:58 AM
Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault

Quoted 14 lines
Quoted 14 lines

I was thinking usleep(sleep_time) that progressively increases. So
it
starts firing signals as quickly as it can and slows down over time.
Each pthread_detach() would reset the sleep_time.

As for our original issue, idea I'm playing with is:

main (procA) - do_child (procB) - send_sig (thread)
\
test (thread) - threaded (detached thread)

Quoted 6 lines
Quoted 2 lines

- turn 'while' in test() to single 'for' loop
- loop in main, fork and call do_child, wait for child to finish

Hi,

attached is v1 of the idea above. I ran it 100x times on various setups as root and unprivileged user.

Quoted 8 lines

Hi Jan,

Great!

Quoted 1 line

Kai, would you like to give a try?

I have test it on routerstation, x86_64(ubuntu11.10& redhat 5.3) and
x86(redhat 5.3) each 100+ times, and all PASS.

Hi,

I'm still looking at this testcase. I have been testing v1 more on different
releases and arches and I'm hitting an issue on ppc64 RHEL6.3.

I'm getting abort from gcc_assert. The most interesting thing is that
thread, which aborts shouldn't exist, because for this scenario pthread_create
returns 1 (EPERM).

(gdb) bt
#0 0x0000008066374e50 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x0000008066376de4 in abort () at abort.c:92
#2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 #3 uw_init_context_1 (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1472
#4 0x000000806687ebe0 in _Unwind_ForcedUnwind (exc=0xfff97a0f670, stop=@0x8066560ad8: 0x8066545660<unwind_stop>, stop_argument=0xfff97a0e880) at ../../../gcc/unwind.inc:201 #5 0x0000008066548904 in _Unwind_ForcedUnwind (exc=<value optimized out>, stop=<value optimized out>, stop_argument=<value optimized out>) at ../nptl/sysdeps/pthread/unwind-forcedunwind.c:132
#6 0x0000008066545600 in __pthread_unwind (buf=<value optimized out>) at unwind.c:130

#7  0x0000008066545bac in __do_cancel () at pthreadP.h:265
#8  __pthread_enable_asynccancel () at cancellation.c:49
#9  0x000000806653c568 in start_thread (arg=0xfff97a0f200) at

pthread_create.c:289
#10 0x000000806643a32c in .__clone () from /lib64/libc-2.12.so

(gdb) frame 2
#2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265
1265 gcc_assert (size == sizeof(_Unwind_Word));

The arg in threaded() is not used for anything, so I passed scenario number as parameter.
(gdb) p/x ((struct pthread *) 0xfff97a0f200)->arg $1 = 0x12

Quoted 5 lines
Quoted 4 lines

So it's thread for scenario 0x12. This scenario tries to set explicit scheduling with max
priority. When you run this as unprivileged user, pthread_create gives you EPERM.

Is it proper for this case that limit only root can run?

We could skip scenarios we know are going to fail for unprivileged user, it will likely avoid hitting that gcc_assert.

Anyway, so far this looks like gcc/glibc issue, I created bug for it:
Bug 852445 - gcc_assert failure in _Unwind_SetSpColumn() on ppc64
https://bugzilla.redhat.com/show_bug.cgi?id=852445

Regards,
Jan

Quoted 13 lines

Regards,
Kai

Quoted 7 lines

This comment is interesting, same gcc_assert(), also power7:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10

Regards,
Jan

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list