[gdb/breakpoints] Fix segfault for catch syscall -1

Using a hello world a.out, I run into a segfault:
...
$ gcc hello.c
$ gdb -batch a.out -ex "catch syscall -1" -ex r
Catchpoint 1 (syscall -1)
Aborted (core dumped)
...

Fix this by erroring out if a negative syscall number is used in the
catch syscall command.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-02-05  Tom de Vries  <tdevries@suse.de>

	PR breakpoints/27313
	* break-catch-syscall.c (catch_syscall_split_args): Reject negative
	syscall numbers.

gdb/testsuite/ChangeLog:

2021-02-05  Tom de Vries  <tdevries@suse.de>

	PR breakpoints/27313
	* gdb.base/catch-syscall.exp: Check that "catch syscall -1" is
	rejected.
This commit is contained in:
Tom de Vries 2021-02-05 17:47:07 +01:00
parent bdfea17ea9
commit 0e857c8288
4 changed files with 17 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2021-02-05 Tom de Vries <tdevries@suse.de>
PR breakpoints/27313
* break-catch-syscall.c (catch_syscall_split_args): Reject negative
syscall numbers.
2021-02-05 Tom Tromey <tom@tromey.com> 2021-02-05 Tom Tromey <tom@tromey.com>
* compile/compile-c-support.c (get_compile_context) * compile/compile-c-support.c (get_compile_context)

View File

@ -390,6 +390,8 @@ catch_syscall_split_args (const char *arg)
syscall_number = (int) strtol (cur_name, &endptr, 0); syscall_number = (int) strtol (cur_name, &endptr, 0);
if (*endptr == '\0') if (*endptr == '\0')
{ {
if (syscall_number < 0)
error (_("Unknown syscall number '%d'."), syscall_number);
get_syscall_by_number (gdbarch, syscall_number, &s); get_syscall_by_number (gdbarch, syscall_number, &s);
result.push_back (s.number); result.push_back (s.number);
} }

View File

@ -1,3 +1,9 @@
2021-02-05 Tom de Vries <tdevries@suse.de>
PR breakpoints/27313
* gdb.base/catch-syscall.exp: Check that "catch syscall -1" is
rejected.
2021-02-05 Tom de Vries <tdevries@suse.de> 2021-02-05 Tom de Vries <tdevries@suse.de>
* gdb.dwarf2/main-subprogram.exp: Add KFAIL for PR symtab/24549. * gdb.dwarf2/main-subprogram.exp: Add KFAIL for PR symtab/24549.

View File

@ -54,6 +54,9 @@ gdb_test_multiple "continue" $test {
} }
} }
# Test-case for PR27313. Verify that negative syscall numbers are refused.
gdb_test "catch syscall -1" "Unknown syscall number '-1'\\."
# All (but the last) syscalls from the example code. It is filled in # All (but the last) syscalls from the example code. It is filled in
# proc setup_all_syscalls. # proc setup_all_syscalls.
set all_syscalls { } set all_syscalls { }