[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#911495: x-tile 2.5-3 fails to launch with Segmentation fault error message (Bug #911495)



Hello,
I just tried to reproduce the crash.

As far as I see the interface glue between python and x11 is not prepared for 64 bit pointers.
Without being explicit python assumes here just 32 bits and therefore truncates the pointers.
This probably worked in older 64 bit releases because there pointers did not grow that large.

Saw too late that the package is not in testing and unstable anymore.
Nevertheless attached patch makes at least the application window appear.
(Nothing more tested, also not if it will break 32 bits.)

Kind regards,
Bernhard


Breakpoint 8, XOpenDisplay (display=0x0) at ../../src/OpenDis.c:66
(gdb) print/d dpy
$27 = 93825002153648
(gdb) print/x dpy
$28 = 0x555555eca6b0
(gdb) cont
Continuing.

Program received signal SIGSEGV, Segmentation fault.
XDefaultRootWindow (dpy=0x55eca6b0) at ../../src/Macros.c:52
52          return (RootWindow(dpy,DefaultScreen(dpy)));

(gdb) py-bt
Traceback (most recent call first):
  File "/usr/share/x-tile/modules/globs.py", line 104, in __init__
    self.root = self.x11.XDefaultRootWindow(self.disp)
  File "/usr/bin/x-tile", line 54, in <module>
    __builtin__.glob = globs.GlobalsObject()

(gdb) py-print self
local 'self' = <GlobalsObject(disp=1441572528, ...

(gdb) print/d dpy
$29 = 1441572528
(gdb) print/x dpy
$30 = 0x55eca6b0
--- globs.py.orig	2012-09-10 16:23:08.000000000 +0200
+++ globs.py	2018-10-21 14:50:18.430315883 +0200
@@ -100,6 +100,15 @@ class GlobalsObject(object):
         support.glob = self
         # x11 reference to xlib library display and root window globals
         self.x11 = ctypes.CDLL(ctypes.util.find_library("X11"))
+        self.x11.XOpenDisplay.restype = ctypes.c_void_p
+        self.x11.XDefaultRootWindow.argtypes = [ctypes.c_void_p]
+        self.x11.XInternAtom.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_int]
+        self.x11.XGetWindowAttributes.argtypes = [ctypes.c_void_p, ctypes.c_long, ctypes.c_void_p]
+        self.x11.XScreenNumberOfScreen.argtypes = [ctypes.c_void_p]
+        #                                       dpy,             w,             property,      offset,        length,        delete,       req_type,      actual_type,     actual_format,   nitems,          bytesafter,      prop
+        self.x11.XGetWindowProperty.argtypes = [ctypes.c_void_p, ctypes.c_long, ctypes.c_long, ctypes.c_long, ctypes.c_long, ctypes.c_int, ctypes.c_long, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
+        #                               dpy,             w,             root,            parent,          children,        nchildren
+        self.x11.XQueryTree.argtypes = [ctypes.c_void_p, ctypes.c_long, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
         self.disp = self.x11.XOpenDisplay(0)
         self.root = self.x11.XDefaultRootWindow(self.disp)
         # property atoms for moveresize
apt install mc devscripts dpkg-dev xserver-xorg lightdm openbox xterm dbus-x11 systemd-coredump gdb x-tile libx11-6-dbgsym libffi6-dbg libpython2.7-dbg python-dbg


systemctl start lightdm
# login


mkdir libx11-6/orig -p
cd    libx11-6/orig
apt source libx11-6
cd ../..

mkdir x-tile/orig -p
cd    x-tile/orig
apt source x-tile
cd ../..


benutzer@debian:~$ export DISPLAY=:0
benutzer@debian:~$ x-tile 
Speicherzugriffsfehler (Speicherabzug geschrieben)





directory /home/benutzer/libx11-6/orig/libx11-1.6.4/src/util


root@debian:~# coredumpctl gdb
           PID: 8019 (x-tile)
           UID: 1000 (benutzer)
           GID: 1000 (benutzer)
        Signal: 11 (SEGV)
     Timestamp: Sun 2018-10-21 11:51:42 CEST (4min 28s ago)
  Command Line: /usr/bin/python /usr/bin/x-tile
    Executable: /usr/bin/python2.7
 Control Group: /user.slice/user-1000.slice/session-5.scope
          Unit: session-5.scope
         Slice: user-1000.slice
       Session: 5
     Owner UID: 1000 (benutzer)
       Boot ID: 1671e7394781478a89715aba6ef16d5d
    Machine ID: 9e5901179cfe4b73bc18669e6a6e0ab9
      Hostname: debian
       Storage: /var/lib/systemd/coredump/core.x-tile.1000.1671e7394781478a89715aba6ef16d5d.8019.1540115502000000000000.lz4
       Message: Process 8019 (x-tile) of user 1000 dumped core.
                
                Stack trace of thread 8019:
                #0  0x00007fdba42f91e0 XDefaultRootWindow (libX11.so.6)
                #1  0x00007fdba8661038 ffi_call_unix64 (libffi.so.6)
                #2  0x00007fdba8660a9a ffi_call (libffi.so.6)
                #3  0x00007fdba8875224 _ctypes_callproc (_ctypes.x86_64-linux-gnu.so)
                #4  0x00007fdba8874be5 n/a (_ctypes.x86_64-linux-gnu.so)
                #5  0x000055f87dd7c0c3 PyObject_Call (python2.7)
                #6  0x000055f87dd9535f PyEval_EvalFrameEx (python2.7)
                #7  0x000055f87dd8d9f5 PyEval_EvalCodeEx (python2.7)
                #8  0x000055f87ddaa5be n/a (python2.7)
                #9  0x000055f87dd7c0c3 PyObject_Call (python2.7)
                #10 0x000055f87ddc0e1e n/a (python2.7)
                #11 0x000055f87dd7c0c3 PyObject_Call (python2.7)
                #12 0x000055f87ddc0b57 n/a (python2.7)
                #13 0x000055f87dd81be4 n/a (python2.7)
                #14 0x000055f87dd7c0c3 PyObject_Call (python2.7)
                #15 0x000055f87dd9535f PyEval_EvalFrameEx (python2.7)
                #16 0x000055f87dd8d9f5 PyEval_EvalCodeEx (python2.7)
                #17 0x000055f87dd8d7b9 PyEval_EvalCode (python2.7)
                #18 0x000055f87ddbdbff n/a (python2.7)
                #19 0x000055f87ddb8b52 PyRun_FileExFlags (python2.7)
                #20 0x000055f87ddb869e PyRun_SimpleFileExFlags (python2.7)
                #21 0x000055f87dd69771 Py_Main (python2.7)
                #22 0x00007fdba8c432e1 __libc_start_main (libc.so.6)
                #23 0x000055f87dd68f9a _start (python2.7)

GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/python2.7...Reading symbols from /usr/lib/debug/.build-id/6a/ac156c31a134f49fb9c5c62d223c163fb1b648.debug...done.
done.

warning: core file may not match specified executable file.
[New LWP 8019]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/bin/python /usr/bin/x-tile'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  XDefaultRootWindow (dpy=0x7f90c2f0) at ../../src/Macros.c:52
52      ../../src/Macros.c: Datei oder Verzeichnis nicht gefunden.
(gdb) set width 0
(gdb) set pagination off
(gdb) directory /home/benutzer/libx11-6/orig/libx11-1.6.4/src/util

(gdb) bt
#0  0x00007fdba42f91e0 in XDefaultRootWindow () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#1  0x00007fdba8661038 in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#2  0x00007fdba8660a9a in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#3  0x00007fdba8875224 in _ctypes_callproc () from /usr/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so
#4  0x00007fdba8874be5 in ?? () from /usr/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so
#5  0x000055f87dd7c0c3 in PyObject_Call ()
#6  0x000055f87dd9535f in PyEval_EvalFrameEx ()
#7  0x000055f87dd8d9f5 in PyEval_EvalCodeEx ()
#8  0x000055f87ddaa5be in ?? ()
#9  0x000055f87dd7c0c3 in PyObject_Call ()
#10 0x000055f87ddc0e1e in ?? ()
#11 0x000055f87dd7c0c3 in PyObject_Call ()
#12 0x000055f87ddc0b57 in ?? ()
#13 0x000055f87dd81be4 in ?? ()
#14 0x000055f87dd7c0c3 in PyObject_Call ()
#15 0x000055f87dd9535f in PyEval_EvalFrameEx ()
#16 0x000055f87dd8d9f5 in PyEval_EvalCodeEx ()
#17 0x000055f87dd8d7b9 in PyEval_EvalCode ()
#18 0x000055f87ddbdbff in ?? ()
#19 0x000055f87ddb8b52 in PyRun_FileExFlags ()
#20 0x000055f87ddb869e in PyRun_SimpleFileExFlags ()
#21 0x000055f87dd69771 in Py_Main ()
#22 0x00007fdba8c432e1 in __libc_start_main (main=0x55f87dd690a0 <main>, argc=2, argv=0x7fffa7af9c68, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffa7af9c58) at ../csu/libc-start.c:291
#23 0x000055f87dd68f9a in _start ()


(gdb) bt
#0  XDefaultRootWindow (dpy=0x7f90c2f0) at ../../src/Macros.c:52
#1  0x00007fdba8661038 in ffi_call_unix64 () at ../src/x86/unix64.S:76
#2  0x00007fdba8660a9a in ffi_call (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=0x7fffa7af8f90) at ../src/x86/ffi64.c:525
#3  0x00007fdba8875224 in _call_function_pointer (argcount=1, resmem=0x7fffa7af8fb0, restype=<optimized out>, atypes=0x7fffa7af8f70, avalues=0x7fffa7af8f90, pProc=0x7fdba42f91e0 <XDefaultRootWindow>, flags=4353) at ./Modules/_ctypes/callproc.c:841
#4  _ctypes_callproc () at ./Modules/_ctypes/callproc.c:1184
#5  0x00007fdba8874be5 in PyCFuncPtr_call.lto_priv.56 () at ./Modules/_ctypes/_ctypes.c:3979
#6  0x000055f87dd7c0c3 in PyObject_Call () at ../Objects/abstract.c:2547
#7  0x000055f87dd9535f in do_call (nk=<optimized out>, na=1, pp_stack=0x7fffa7af9278, func=<_FuncPtr(__name__='XDefaultRootWindow') at remote 0x7fdba9b34e20>) at ../Python/ceval.c:4569
#8  call_function (oparg=<optimized out>, pp_stack=0x7fffa7af9278) at ../Python/ceval.c:4374
#9  PyEval_EvalFrameEx () at ../Python/ceval.c:2989
#10 0x000055f87dd8d9f5 in PyEval_EvalCodeEx () at ../Python/ceval.c:3584
#11 0x000055f87ddaa5be in function_call.lto_priv () at ../Objects/funcobject.c:523
#12 0x000055f87dd7c0c3 in PyObject_Call () at ../Objects/abstract.c:2547
#13 0x000055f87ddc0e1e in instancemethod_call.lto_priv () at ../Objects/classobject.c:2602
#14 0x000055f87dd7c0c3 in PyObject_Call () at ../Objects/abstract.c:2547
#15 0x000055f87ddc0b57 in slot_tp_init.lto_priv () at ../Objects/typeobject.c:5806
#16 0x000055f87dd81be4 in type_call.lto_priv () at ../Objects/typeobject.c:765
#17 0x000055f87dd7c0c3 in PyObject_Call () at ../Objects/abstract.c:2547
#18 0x000055f87dd9535f in do_call (nk=<optimized out>, na=0, pp_stack=0x7fffa7af9828, func=<type at remote 0x55f87f8f70a0>) at ../Python/ceval.c:4569
#19 call_function (oparg=<optimized out>, pp_stack=0x7fffa7af9828) at ../Python/ceval.c:4374
#20 PyEval_EvalFrameEx () at ../Python/ceval.c:2989
#21 0x000055f87dd8d9f5 in PyEval_EvalCodeEx () at ../Python/ceval.c:3584
#22 0x000055f87dd8d7b9 in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at ../Python/ceval.c:669
#23 0x000055f87ddbdbff in run_mod.lto_priv () at ../Python/pythonrun.c:1376
#24 0x000055f87ddb8b52 in PyRun_FileExFlags () at ../Python/pythonrun.c:1362
#25 0x000055f87ddb869e in PyRun_SimpleFileExFlags () at ../Python/pythonrun.c:948
#26 0x000055f87dd69771 in Py_Main () at ../Modules/main.c:640
#27 0x00007fdba8c432e1 in __libc_start_main (main=0x55f87dd690a0 <main>, argc=2, argv=0x7fffa7af9c68, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffa7af9c58) at ../csu/libc-start.c:291
#28 0x000055f87dd68f9a in _start ()



(gdb) list Macros.c:50,53
50      Window XDefaultRootWindow (Display *dpy)
51      {
52          return (RootWindow(dpy,DefaultScreen(dpy)));
53      }


(gdb) display/i $pc
1: x/i $pc
=> 0x7fdba42f91e0 <XDefaultRootWindow>: movslq 0xe0(%rdi),%rax
(gdb) print/x $rdi
$1 = 0x7f90c2f0
(gdb) print $rdi
$2 = 2140193520
(gdb) x/1xw 0x7f90c2f0
0x7f90c2f0:     Cannot access memory at address 0x7f90c2f0


(gdb) py-bt
Traceback (most recent call first):
  File "/usr/share/x-tile/modules/globs.py", line 104, in __init__
    self.root = self.x11.XDefaultRootWindow(self.disp)
  File "/usr/bin/x-tile", line 54, in <module>
    __builtin__.glob = globs.GlobalsObject()


(gdb) py-list
  99            """Instantiate global vars"""
 100            support.glob = self
 101            # x11 reference to xlib library display and root window globals
 102            self.x11 = ctypes.CDLL(ctypes.util.find_library("X11"))
 103            self.disp = self.x11.XOpenDisplay(0)
>104            self.root = self.x11.XDefaultRootWindow(self.disp)
 105            # property atoms for moveresize
 106            # assigned once here so they are not recreated
 107            # every time moveresize is called
 108            self.fscreen_atom = self.x11.XInternAtom(self.disp, "_NET_WM_STATE_FULLSCREEN", False)
 109            self.maxv_atom = self.x11.XInternAtom(self.disp, "_NET_WM_STATE_MAXIMIZED_VERT", False)



(gdb) py-print self
local 'self' = <GlobalsObject(disp=2140193520, x11=<CDLL(XDefaultRootWindow=<_FuncPtr(__name__='XDefaultRootWindow') at remote 0x7fdba9b34e20>, _FuncPtr=<_ctypes.PyCFuncPtrType at remote 0x55f87f8f0a90>, XOpenDisplay=<_FuncPtr(__name__='XOpenDisplay') at remote 0x7fdba9b34bb0>, _handle=94525777920688, _name='libX11.so.6') at remote 0x7fdb9e054ed0>) at remote 0x7fdb9e054e50>







gdb -q --args /usr/bin/python /usr/bin/x-tile

set width 0
set pagination off
directory /home/benutzer/libx11-6/orig/libx11-1.6.4/src/util
b XOpenDisplay
y
run




(gdb) py-bt
Traceback (most recent call first):
  File "/usr/share/x-tile/modules/globs.py", line 103, in __init__
    self.disp = self.x11.XOpenDisplay(0)
  File "/usr/bin/x-tile", line 54, in <module>
    __builtin__.glob = globs.GlobalsObject()
(gdb) undisp 3
(gdb) display *(Display *) 0x555555eca6b0

(gdb) cont
Continuing.

Program received signal SIGSEGV, Segmentation fault.
XDefaultRootWindow (dpy=0x55eca6b0) at ../../src/Macros.c:52
52          return (RootWindow(dpy,DefaultScreen(dpy)));


--> pointer 0x555555eca6b0 truncated to 0x55eca6b0





         self.x11 = ctypes.CDLL(ctypes.util.find_library("X11"))
+        self.x11.XOpenDisplay.restype = ctypes.c_void_p
         self.disp = self.x11.XOpenDisplay(0)


Breakpoint 4, XOpenDisplay (display=0x0) at ../../src/OpenDis.c:199
199             dpy->savedsynchandler = NULL;
1: /x dpy = 0x555555e6d5c0
(gdb) cont
Continuing.

Breakpoint 4, XOpenDisplay (display=0x0) at ../../src/OpenDis.c:199
199             dpy->savedsynchandler = NULL;
1: /x dpy = 0x555555ecb600
(gdb) print/d dpy
$4 = 93825002157568
(gdb) cont
Continuing.

Program received signal SIGSEGV, Segmentation fault.
XDefaultRootWindow (dpy=0x55ecb600) at ../../src/Macros.c:52
52          return (RootWindow(dpy,DefaultScreen(dpy)));
(gdb) py-print self
local 'self' = <GlobalsObject(disp=93825002157568, x11=<CDLL(XDefaultRootWindow=<_FuncPtr(__name__='XDefaultRootWindow') at remote 0x7ffff68fde20>, _FuncPtr=<_ctypes.PyCFuncPtrType at remote 0x555555eaf4e0>, XOpenDisplay=<_FuncPtr(__name__='XOpenDisplay') at remote 0x7ffff68fdc80>, _handle=93824999629488, _name='libX11.so.6') at remote 0x7fffec311ed0>) at remote 0x7fffec311e50>



Reply to: