On Tue, Feb 14, 2023 at 08:02:59PM +0200, Yonatan Shtarkman wrote:
The attached code snippet reproduces the issue when running:
python3 libugestfs_segfault_repro.py
With:
guestfs version: 1.48.6
guestfs-python version: 1.48.6
Can confirm with {python3-,}libguestfs-1.51.1-1.fc39.x86_64
The stack trace is roughly the same as yours.
Rich.
Stacktrace:
#0 0x00007f6dd17b4701 in _Py_INCREF (op=<optimized out>) at /usr/include/
python3.9/object.h:408
408 op->ob_refcnt++;
(gdb) bt
#0 0x00007f6dd17b4701 in _Py_INCREF (op=<optimized out>) at /usr/include/
python3.9/object.h:408
#1 guestfs_int_py_event_callback_wrapper
(g=<optimized out>, flags=<optimized out>, array_len=0, array=0x0,
buf_len=
43, buf=0xd1dc90 "commandrvf: udevadm --debug settle -E /\347\232\204\303
available\r\ned7
#2 guestfs_int_py_event_callback_wrapper
(g=<optimized out>, callback=0x7f6dd19ec040, event=16, event_handle=0,
flags=<optimized out>, buf=0xd1dc90 "commandrvf: udevadm --debug settle -E /\
347\232\204\303 4
#3 0x00007f6dd166f9aa in guestfs_int_call_callbacks_message
(g=0xae06f0, event=16, buf=0xd1dc90 "commandrvf: udevadm --debug settle -E
/\347\232\204\303 available\r\ned to rvf:e run in, ignor data av", buf_len=43)
at events.c:117
#4 0x00007f6dd168560e in guestfs_int_log_message_callback
(g=g@entry=0xae06f0, buf=0xd1dc90 "commandrvf: udevadm --debug settle -E /\
347\232\204\303 available\r\ned to rvf:e run in, ignor data av", len=len@entry
=43)
at proto.c:145
#5 0x00007f6dd166ac29 in handle_log_message (g=g@entry=0xae06f0, conn=
conn@entry=0xd19570) at conn-socket.c:395
#6 0x00007f6dd166b233 in read_data (len=4, bufv=<optimized out>, connv=
<optimized out>, g=<optimized out>) at conn-socket.c:179
#7 read_data (g=0xae06f0, connv=0xd19570, bufv=<optimized out>, len=4) at
conn-socket.c:142
#8 0x00007f6dd1685c2a in recv_from_daemon (buf_rtn=0x7fffa95cc548, size_rtn=
0x7fffa95cc544, g=0xae06f0) at proto.c:545
#9 guestfs_int_recv_from_daemon (g=g@entry=0xae06f0, size_rtn=size_rtn@entry=
0x7fffa95cc544, buf_rtn=buf_rtn@entry=0x7fffa95cc548) at proto.c:623
#10 0x00007f6dd168603a in guestfs_int_recv
(g=g@entry=0xae06f0, fn=fn@entry=0x7f6dd16aa308 "download", hdr=hdr@entry=
0x7fffa95cc610, err=err@entry=0x7fffa95cc5e0, xdrp=xdrp@entry=0x0, ret=
ret@entry=0x0)
at proto.c:668
#11 0x00007f6dd163825e in guestfs_download (g=g@entry=0xae06f0, remotefilename=
<optimized out>, filename=0x7f6dd17edea0 "/tmp/1") at actions-5.c:2984
#12 0x00007f6dd17ab01a in guestfs_int_py_download (self=<optimized out>, args=
<optimized out>) at actions-5.c:794
On Mon, Feb 13, 2023 at 10:16 PM Richard W.M. Jones <rjones(a)redhat.com> wrote:
On Mon, Feb 13, 2023 at 09:38:50PM +0200, Yonatan Shtarkman wrote:
> Also, as a workaround, I avoided calling the event callback if null is
returned
> by Py_BuildValue (still print the error and release the thread).
> This seems to work for our usage (we only use the event callbacks for
logging),
> any potential issues I'm missing?
Oh I see so the issue is actually when logging and not in the download
call? That's strange that it should be happening intermittently. I'd
expect a UTF-8 encoding error would happen every time not sometimes.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/
~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top
import guestfs
from guestfs import GuestFS
g = GuestFS(python_return_dict=True)
def callback(event, _event_handle, buf: str, array):
pass
g.set_event_callback(callback, guestfs.EVENT_ALL)
g.set_verbose(True)
path = '/tmp/tmp_disk'
g.disk_create(path, format='raw', size=32*1024*1024)
g.add_drive(path)
g.launch()
g.mkfs('ext4', '/dev/sda')
g.mount('/dev/sda', '/')
for _ in range(20000):
try:
g.download ('/的ó', '/tmp/1')
except:
pass
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html