2.5.1 testing: gpgscm segfault
NIIBE Yutaka
gniibe at fsij.org
Fri Sep 13 03:29:18 CEST 2024
Hello,
Marcel Telka <marcel at telka.sk> wrote:
> I'm running tests for GnuPG 2.5.1 on OpenIndiana and I found that the
> gpgscm segfaults:
Thank you for your testing.
> do_process_spawn_io+0x2ff: js +0xe4 <do_process_spawn_io+0x3e9>
> do_process_spawn_io+0x305: movslq 0xffffffffffffdfa4(%rbp),%rax
> do_process_spawn_io+0x30c: movq %rax,%rdi
> do_process_spawn_io+0x30f: shrq $0x6,%rax
> do_process_spawn_io+0x313: movq 0xffffffffffffdfd0(%rbp,%rax,8),%rax
> do_process_spawn_io+0x31b: btq %rdi,%rax
> do_process_spawn_io+0x31f: jb +0x1c3 <do_process_spawn_io+0x4e8>
> do_process_spawn_io+0x325: movslq 0xffffffffffffdfa8(%rbp),%rax
> do_process_spawn_io+0x32c: movq %rax,%r8
> do_process_spawn_io+0x32f: shrq $0x6,%rax
> do_process_spawn_io+0x333: movq 0xffffffffffffdfd0(%rbp,%rax,8),%rax
> do_process_spawn_io+0x33b: btq %r8,%rax
> do_process_spawn_io+0x33f: jae -0xb5 <do_process_spawn_io+0x290>
> do_process_spawn_io+0x345: movq 0xffffffffffffdf90(%rbp),%rdx
> do_process_spawn_io+0x34c: movq 0xffffffffffffdf80(%rbp),%rax
> do_process_spawn_io+0x353: movl %r8d,%edi
> do_process_spawn_io+0x356: subq %r13,%rdx
> do_process_spawn_io+0x359: leaq (%rax,%r13),%rsi
> do_process_spawn_io+0x35d: call -0x6642 <PLT=libc.so.1`read>
> do_process_spawn_io+0x362: testq %rax,%rax
> do_process_spawn_io+0x365: je +0x265 <do_process_spawn_io+0x5d0>
It looks like access by FD_ISSET (err_fd, &read_fdset) caused SEGV
in tests/gpgscm/ffi.c:do_process_spawn_io.
Error handling is not good here.
I'm pushing the change for fix.
==========================
diff --git a/tests/gpgscm/ffi.c b/tests/gpgscm/ffi.c
index 16d9147bf..1179e01c0 100644
--- a/tests/gpgscm/ffi.c
+++ b/tests/gpgscm/ffi.c
@@ -936,10 +936,18 @@ do_process_spawn_io (scheme *sc, pointer args)
err = gpgrt_process_spawn (argv[0], (const char **) &argv[1],
flags, NULL, &proc);
- err = gpgrt_process_get_streams (proc, 0, &infp, NULL, NULL);
+ if (err)
+ {
+ xfree (argv);
+ FFI_RETURN_ERR (sc, err);
+ }
- err = es_write (infp, a_input, strlen (a_input), NULL);
- es_fclose (infp);
+ err = gpgrt_process_get_streams (proc, 0, &infp, NULL, NULL);
+ if (!err)
+ {
+ err = es_write (infp, a_input, strlen (a_input), NULL);
+ es_fclose (infp);
+ }
if (err)
{
gpgrt_process_release (proc);
@@ -1198,6 +1206,8 @@ do_process_spawn_fd (scheme *sc, pointer args)
err = gpgrt_process_spawn (argv[0], (const char **)&argv[1], 0, act, &proc);
gpgrt_spawn_actions_release (act);
xfree (argv);
+ if (err)
+ FFI_RETURN_ERR (sc, err);
FFI_RETURN_POINTER (sc, proc_wrap (sc, proc));
}
--
More information about the Gnupg-devel
mailing list