segfault von epghttpd beim Speichern von Timern

  • Okay selbes Resultat also an den beiden Instanzen des Python Wrapper liegt es schon mal nicht.


    m.E. wird (sofern es am epghttpd liegt, wovon ich ausgehe) etwas im Speicher überschrieben.

    Komisch ist nur das Valgrind dazu nichts anzeigt.


    Hast du mal versucht es mit FORTIFY oder Stack Protection übersetz? Ggf bringt das Licht ins Dunkel

  • Die beiden Optionen sind Neuland für mich.

    Meinst du mit FORTIFY, gcc mit passenden Optionen/Flags zu versorgen, wie z.B. hier beschrieben und das Gleiche für Stack Protection?

  • ja genau. Definiere dir am besten dieses Macro im Make.config

    Code
    CFLAGS_MEM = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS \
                 -fstack-clash-protection -fstack-protector-strong \
                 -Wl,-z,nodlopen -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now
    CFLAGS_MEM += -fcf-protection=full -Wtrampolines

    und hänge es an die CFLAGS dran:

    Code
    CFLAGS += $(CFLAGS_MEM) -O2

    dann alles neu bauen

    Code
    make clean
    make 

    beim make solltest du dann sehen das die Optionen verwendet werden

    Als Patch:


    das ist kein Fix hilft aber ggf. um dem Problem auf die Spur zu kommen.

  • beim make solltest du dann sehen das die Optionen verwendet werden

    Jup (muss ich eigentlich -fno-stack-protector -O0 aus dem ifdef DEBUG Block auch noch entfernen, weil sich sonst das -O2 und -O0 bzw. die unterschiedlichen stack-protection Optionen beißen?):

    Code
    ...
    Compile main ..
    g++ -c -I/usr/include/mariadb -I/usr/include/mariadb/mysql -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS -fstack-clash-protection -fstack-protector-strong -Wl,-z,nodlopen -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -fcf-protection=full -Wtrampolines -O2 -I/usr/include/python3.12 -I/usr/include/python3.12 -ggdb -fno-stack-protector -O0 -std=c++17 -D__STDC_FORMAT_MACROS -fPIC -Wall -Wreturn-type -Wformat -Wextra -Wparentheses -pedantic -Werror=format-security -Wunused-variable -Wunused-label -Wunused-value -Wunused-function -Wunused-local-typedefs -Wno-unused-parameter -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DBINDEST='"/usr/local/bin"' -DTARGET='"epgd"' -DLOG_PREFIX='""' -DPLGDIR='"/usr/local/lib/epgd/plugins"' -DUSEUUID -DUSEMD5 -DUSELIBXML -DUSELIBARCHIVE -DUSEJSON -DUSEGUNZIP -DSYSDWDIFO -DUSESYSD -I/usr/include/libxml2  -I/usr/include/libxml2  -I/usr/include/python3.12 -I/usr/include/python3.12 -DGIT_REV='"544018b"' -o main.o main.c
    ...

    aber wie kommt man nun dem Problem besser auf die Spur?

    Sieht immer noch gleich aus für meine Augen:

    Ist übrigens auch immer noch nur der epghttpd inkl. der Änderungen aus https://www.vdr-portal.de/forum/index.php?thread/136271-segfault-von-epghttpd-beim-speichern-von-timern/&pageNo=2

    den ich nach dem Bauen an seinen Bestimmungsort kopiert und dann gestartet habe. Der epgd ist "der Alte", der läuft ja und erstellt auch Timer via Autotimer korrekt, selbst mit "Auto" Option ...

  • Jup (muss ich eigentlich -fno-stack-protector -O0 aus dem ifdef DEBUG Block auch noch entfernen, weil sich sonst das -O2 und -O0 bzw. die unterschiedlichen stack-protection Optionen beißen?):

    ja, sorry hatte ich übersehen:

    aber wie kommt man nun dem Problem besser auf die Spur?

    Sieht immer noch gleich aus für meine Augen:

    in den Fall hat es wie es aussieht nicht geholfen. Diese Einstellungen bewirken das (in bestimmten Situationen) Stack Fehler, Buffer-Overflows etc. erkannt und direkt mir SEGFAULT abgebrochen wird wodurch man die auslösende Stelle besser eingrenzen kann. Hier hat es wohl nicht zugeschlagen. Das ganze war ausgehend von der Vermutung das der Crash in der Python Lib nur ein Folgefehler ist (wovon ich immer noch ausgehe). Hab gerade auch keine Idee mehr wie man dem auf die Schliche kommen könnte.

    Generell läuft meine Implementierung rund um die Python C++ lib ja, zum einen im epgd und zum anderen auch im Test Programm.

  • Hi,

    habe hier das gleiche Problem. Coredump beim Anlegen von timern, die nicht auf 'VDR' gestellt werden.

    Ich poste mal den bt, vielleicht hilft's.

    Christian



    Log dazu:


  • Hi Hopsi,


    hast du auch schonmal versucht, epghttpd so zu bauen, wie horchi hier in Beitrag #23 segfault von epghttpd beim Speichern von Timern vorgeschlagen hat?

    Denk' dabei dann direkt hier dran ;) :

    Jup (muss ich eigentlich -fno-stack-protector -O0 aus dem ifdef DEBUG Block auch noch entfernen, weil sich sonst das -O2 und -O0 bzw. die unterschiedlichen stack-protection Optionen beißen?):

    Viele Grüße,

    Chriss

  • hast du auch schonmal versucht, epghttpd so zu bauen, wie horchi hier in Beitrag #23 segfault von epghttpd beim Speichern von Timern vorgeschlagen hat?

    gerade gemacht:



    Bringt vermutlich auch keine Erleuchtung.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!