gdb: testsuite: fix wrong expected result in attach-pie-noexec.exp

Message ID 1637638746-2850-1-git-send-email-yangtiezhu@loongson.cn
State Superseded
Headers show
Series
  • gdb: testsuite: fix wrong expected result in attach-pie-noexec.exp
Related show

Commit Message

Tiezhu Yang Nov. 23, 2021, 3:39 a.m.
If /proc/sys/kernel/yama/ptrace_scope is 1, when execute attach-pie-noexec.exp
without superuser, the gdb.log shows the following info:

    (gdb) attach 6500
    Attaching to process 6500
    ptrace: Operation not permitted.
    (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach

It is obviously wrong, the expected result should be FAIL in such a case.

With this patch:

    (gdb) attach 6600
    Attaching to process 6600
    ptrace: Operation not permitted.
    (gdb) FAIL: gdb.base/attach-pie-noexec.exp: attach (please check privileges and try again)

When check this log info if failed, we can do the following processes to test:
(1) set ptrace_scope as 0
    $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"
(2) use sudo to test
    $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>

---
 gdb/testsuite/gdb.base/attach-pie-noexec.exp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

-- 
2.1.0

Comments

Mike Frysinger via Gdb-patches Nov. 23, 2021, 8:25 a.m. | #1
On 11/23/21 4:39 AM, Tiezhu Yang wrote:
> If /proc/sys/kernel/yama/ptrace_scope is 1, when execute attach-pie-noexec.exp

> without superuser, the gdb.log shows the following info:

> 

>     (gdb) attach 6500

>     Attaching to process 6500

>     ptrace: Operation not permitted.

>     (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach

> 

> It is obviously wrong, the expected result should be FAIL in such a case.

> 


Agreed, PASS is incorrect, I suppose though that UNTESTED or UNSUPPORTED
would be better than FAIL.

Anyway, looking earlier in the test-case I see:
...
if {![can_spawn_for_attach]} {
    return 0
}
...
and in gdb/testsuite/lib/gdb.exp I see:
...
# Return true if we can spawn a program on the target and attach to

# it.


proc can_spawn_for_attach { } {
...

So, is it not a more complete fix to make can_spawn_for_attach to return
false for this case?  It would have to setup a small test-case, compile
it to exec, spawn it and try to attach to it.  This is much more work
than it's currently doing, so it would have to become a
gdb_caching_proc.  For an example, look for instance at
target_supports_scheduler_locking .

Thanks,
- Tom

> With this patch:

> 

>     (gdb) attach 6600

>     Attaching to process 6600

>     ptrace: Operation not permitted.

>     (gdb) FAIL: gdb.base/attach-pie-noexec.exp: attach (please check privileges and try again)

> > When check this log info if failed, we can do the following processes

to test:
> (1) set ptrace_scope as 0

>     $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

>     $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"

> (2) use sudo to test

>     $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"

> 

> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>

> ---

>  gdb/testsuite/gdb.base/attach-pie-noexec.exp | 10 +++++++++-

>  1 file changed, 9 insertions(+), 1 deletion(-)

> 

> diff --git a/gdb/testsuite/gdb.base/attach-pie-noexec.exp b/gdb/testsuite/gdb.base/attach-pie-noexec.exp

> index 85161fa..c029003 100644

> --- a/gdb/testsuite/gdb.base/attach-pie-noexec.exp

> +++ b/gdb/testsuite/gdb.base/attach-pie-noexec.exp

> @@ -59,7 +59,15 @@ set testpid [spawn_id_get_pid $test_spawn_id]

>  

>  gdb_start

>  file delete -- $binfile

> -gdb_test "attach $testpid" "Attaching to process $testpid\r\n.*" "attach"

> +set test "attach"

> +gdb_test_multiple "attach $testpid" $test {

> +    -re "Attaching to process $testpid\r\n.*No executable file now.*\r\n$gdb_prompt $" {

> +	pass $test

> +    }

> +    -re "Attaching to process $testpid\r\n.*ptrace: Operation not permitted\\.\r\n$gdb_prompt $" {

> +	fail "$test (please check privileges and try again)"

> +    }

> +}

>  gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\."

>  gdb_test "info shared" "From\[ \t\]+To\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*"

>  

>
Tiezhu Yang Nov. 23, 2021, 10:16 a.m. | #2
On 11/23/2021 04:25 PM, Tom de Vries wrote:
> On 11/23/21 4:39 AM, Tiezhu Yang wrote:

>> If /proc/sys/kernel/yama/ptrace_scope is 1, when execute attach-pie-noexec.exp

>> without superuser, the gdb.log shows the following info:

>>

>>     (gdb) attach 6500

>>     Attaching to process 6500

>>     ptrace: Operation not permitted.

>>     (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach

>>

>> It is obviously wrong, the expected result should be FAIL in such a case.

>>

>

> Agreed, PASS is incorrect, I suppose though that UNTESTED or UNSUPPORTED

> would be better than FAIL.

>

> Anyway, looking earlier in the test-case I see:

> ...

> if {![can_spawn_for_attach]} {

>     return 0

> }

> ...

> and in gdb/testsuite/lib/gdb.exp I see:

> ...

> # Return true if we can spawn a program on the target and attach to

>

> # it.

>

>

> proc can_spawn_for_attach { } {

> ...

>

> So, is it not a more complete fix to make can_spawn_for_attach to return

> false for this case?  It would have to setup a small test-case, compile

> it to exec, spawn it and try to attach to it.  This is much more work

> than it's currently doing, so it would have to become a

> gdb_caching_proc.  For an example, look for instance at

> target_supports_scheduler_locking .


Hi Tom,

Thanks for your reply and suggestion.

Let me use UNSUPPORTED if "ptrace: Operation not permitted." at this 
moment, I will send v2 soon.

Thanks,
Tiezhu

>

> Thanks,

> - Tom

>

>> With this patch:

>>

>>     (gdb) attach 6600

>>     Attaching to process 6600

>>     ptrace: Operation not permitted.

>>     (gdb) FAIL: gdb.base/attach-pie-noexec.exp: attach (please check privileges and try again)

>>> When check this log info if failed, we can do the following processes

> to test:

>> (1) set ptrace_scope as 0

>>     $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

>>     $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"

>> (2) use sudo to test

>>     $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"

>>

>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>

>> ---

>>  gdb/testsuite/gdb.base/attach-pie-noexec.exp | 10 +++++++++-

>>  1 file changed, 9 insertions(+), 1 deletion(-)

>>

>> diff --git a/gdb/testsuite/gdb.base/attach-pie-noexec.exp b/gdb/testsuite/gdb.base/attach-pie-noexec.exp

>> index 85161fa..c029003 100644

>> --- a/gdb/testsuite/gdb.base/attach-pie-noexec.exp

>> +++ b/gdb/testsuite/gdb.base/attach-pie-noexec.exp

>> @@ -59,7 +59,15 @@ set testpid [spawn_id_get_pid $test_spawn_id]

>>

>>  gdb_start

>>  file delete -- $binfile

>> -gdb_test "attach $testpid" "Attaching to process $testpid\r\n.*" "attach"

>> +set test "attach"

>> +gdb_test_multiple "attach $testpid" $test {

>> +    -re "Attaching to process $testpid\r\n.*No executable file now.*\r\n$gdb_prompt $" {

>> +	pass $test

>> +    }

>> +    -re "Attaching to process $testpid\r\n.*ptrace: Operation not permitted\\.\r\n$gdb_prompt $" {

>> +	fail "$test (please check privileges and try again)"

>> +    }

>> +}

>>  gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\."

>>  gdb_test "info shared" "From\[ \t\]+To\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*"

>>

>>

Patch

diff --git a/gdb/testsuite/gdb.base/attach-pie-noexec.exp b/gdb/testsuite/gdb.base/attach-pie-noexec.exp
index 85161fa..c029003 100644
--- a/gdb/testsuite/gdb.base/attach-pie-noexec.exp
+++ b/gdb/testsuite/gdb.base/attach-pie-noexec.exp
@@ -59,7 +59,15 @@  set testpid [spawn_id_get_pid $test_spawn_id]
 
 gdb_start
 file delete -- $binfile
-gdb_test "attach $testpid" "Attaching to process $testpid\r\n.*" "attach"
+set test "attach"
+gdb_test_multiple "attach $testpid" $test {
+    -re "Attaching to process $testpid\r\n.*No executable file now.*\r\n$gdb_prompt $" {
+	pass $test
+    }
+    -re "Attaching to process $testpid\r\n.*ptrace: Operation not permitted\\.\r\n$gdb_prompt $" {
+	fail "$test (please check privileges and try again)"
+    }
+}
 gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\."
 gdb_test "info shared" "From\[ \t\]+To\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*"