Aussehen
Suche Einloggen
[c] [meta] [fefe] [erp]

5466 Ergebnisse

[0] ... [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... [273]
  • [l] Felix Sun, 01 Jun 2025 14:04:02 GMT Nr. 157391
    >>157389
    >Da ist extremes Voodoo involviert (das Felix auch im originalen Bernstein-Kot bisher nicht gefunden hat). Denn intern in der libowfat wird die op-Funktion auch schon mal mit 4 statt 3 Parametern aufgerufen.
    Solche Zustände sind normal in Fefes Code. Du bist einfach nur nicht genial genug, um ihn zu verstehen.
  • [l] Felix Sun, 01 Jun 2025 13:53:47 GMT Nr. 157390
    >>157389
    Kot von djb ist per Definition perfekt und enthält keine Bugs.
  • [l] Felix Sun, 01 Jun 2025 13:43:14 GMT Nr. 157389
    >>157355
    Ich habe es zum Kompilieren bekommen, aber sage gleich, dass das, was der Meister zum Teil vom Herrn Bernstein übernommen hat und zum Teil dort selbst verzapft hat, absolut unterirdisch ist. Je mehr ich dort reinschaue, desto schlimmer wird es.

    Es geht um den buffer aus der libowfat (buffer.h):

    typedef struct buffer {
      char *x;              /* actual buffer space */
      size_t p;             /* current position */
      size_t n;             /* current size of string in buffer */
      size_t a;             /* allocated buffer size */
      ssize_t (*op)();      /* use read(2) or write(2) */
      void* cookie;                 /* used internally by the to-stralloc buffers, and for buffer chaining */
      void (*deinit)(void*);        /* called to munmap/free cleanup, with a pointer to the buffer as argument */
      int fd;               /* passed as first argument to op */
    } buffer;


    Wie man sieht, kriegt der Buffer eine op-Funktion übergeben. Und wie man bereits am Kommentar dort sieht: Das können z.B. die POSIX-Funktionen read() oder write() sein, oder auch andere Funktionen (wie intern in der libowfat genutzt). Da kommt man direkt zum ersten Problem, da read() und write() nicht die gleiche Signatur haben:

    ssize_t read(int fd, void *buf, size_t count);

    ssize_t write(int fd, const void *buf, size_t count);


    Also Unterschiede im cv-Qualifizierer des zweiten Parameters.

    Im Internet gibt es Diskussionen darüber, dass es UB sei, weil void * keine "unqualified version" von const void * sei (das wäre wohl bei void * const der Fall), und daher die Funktionsaufrufe inkompatibel seien:
    https://old.reddit.com/r/C_Programming/comments/18fbsfg/is_casting_a_function_pointer_to_the_same_type/

    Darum geht es hier aber nicht, denn das ist ein Luxusproblem im Vergleich zu den nun folgenden Problemen mit externem Kot und internem Kot.

    Erst mal muss man sich an der Stelle oben entscheiden: Nimmt man Signatur 1, Signatur 2, oder einen void *. Da auch externer Kot solche Punktionszeiger z.B. an buffer_init übergibt, muss man void * nehmen, da ansonsten der externe Kot einen Kompilerfehler verursacht, da dieser externe Kot sowohl Signatur 1 als auch Signatur 2 verwenden könnte. Mit void * gibt es nur eine Warnung, auch nicht schön, aber was will man machen.

    Nun zu den Problemen mit dem libowfat-internen Kot. Da ist extremes Voodoo involviert (das Felix auch im originalen Bernstein-Kot bisher nicht gefunden hat). Denn intern in der libowfat wird die op-Funktion auch schon mal mit 4 statt 3 Parametern aufgerufen. Das sieht man in buffer_feed, buffer_flush, buffer_put, buffer_putflush. Diese leiten den op-Funktionszeiger an buffer_stubborn oder buffer_stubborn_read weiter, welche den Funktionszeiger mit 4 Parametern aufrufen/missbrauchen.

    Felix will gar nicht wissen, was passiert, wenn man einen buffer mit read()/write() als op anlegt, und dann eine der obigen Funktionen aufruft, und zwar in einer Calling-Convention, bei dem der Aufgerufene den Stack aufräumen muss (z.B. das standardmäßige stdcall auf 32-Bit-Fenster, wo auch alle Parameter über den Stack gehen, vielleicht deswegen auch das "Please do not port my software to Windows!"). Das geht hier auf Linux bzw. x86/x86_64 nur gut, weil der Aufrufer zwar was in rcx schreibt, aber rcx vom aufgerufenen read()/write/etc. gemäß Calling-Convention ignoriert wird.

    Die Besten der Besten.
  • [l] Zuse ## Admin Sun, 01 Jun 2025 13:07:06 GMT Nr. 157386
    Habe mal nen MR mit dem aktuellen Stand aufgemacht: https://gitgud.io/zuse/dietchan/-/merge_requests/2
  • [l] Felix Sun, 01 Jun 2025 12:48:00 GMT Nr. 157385 SÄGE
    >>157384
    Vergessen, dass MSVC ein ILP32-Speichermodell nutzt und long standardmäßig auch nur 32 Bits sind. Unter diesen Umständen stellt der Microsoft-Compiler ebenfalls immer sicher, dass die oberen 32 Bit genullt sind.
  • [l] Felix Sun, 01 Jun 2025 12:37:16 GMT Nr. 157384
    >>157374
    Die naheliegendste Erklärung für Felix ist, dass {0} wie in vorherigen Versionen von Clang entgegen der Intuition kein spezielles Muster für das Nullen des Unions ist (vor allem, wenn das erste Mitglied kein Standard-Datentyp ist, bei dem der Nullwert nicht vollständig aus Nullbits besteht), sondern schlicht das erste Mitglied auf Null setzt und jetzt das implizite Leeren des Rests wegfällt.

    Felix hat sich aufgrund dieses konstruierten Beispiels mit Godbolt angesehen, was das in der Praxis bedeutet:
    extern void dosomething(long *);
    void bla() {
        union { int i; long l; } U = {-42};
        dosomething(&U.l);
    }


    x86_64, gcc 14.3, -O0: gesamtes Union wird genullt und dann die unteren 32 Bit geschrieben
    x86_64, gcc 14.3, -O1: die oberen 32 Bit werden explizit auf Null gesetzt und dann die unteren 32 Bit geschrieben
    x86_64, gcc 14.3, -O2/-O3: 32 Bit werden in EAX geladen, damit implizit die oberen 32 Bit des Registers auf Null gesetzt und RAX in das Union geschrieben

    x86_64, gcc 15.1, -O0: nur die unteren 32 Bit werden geschrieben
    x86_64, gcc 15.1, -O1: wie gcc 14.3
    x86_64, gcc 15.1, -O2/-O3: wie gcc 14.3

    ARM64-Ausgabe verhält sich jeweils wie x86_64, nur dass für -O1 die stp-Instruktion in Kombination mit dem Nullregister benutzt wird.

    x86_64, clang, -O0: 64 Bit mit Nullpadding werden aus static storage gelesen und geschrieben
    x86_64, clang, -O1/-O2/-O3: wie gcc -O2

    ARM64-Ausgabe verhält sich jeweils wie x86_64, d.h. mit Optimierungen werden die oberen 32 Bit eines 64-Bit-Registers implizit genullt.

    x86_64, ARM64 MSVC unabhängig von Optimizer-Flags: nur die unteren 32 Bit werden geschrieben

    Für dieses Beispiel auf diesen zwei Plattformen macht GCC 15 also zufälligerweise etwas Sinnvolles, außer wenn Optimierungen deaktiviert sind.
  • [l] Felix Sun, 01 Jun 2025 12:30:00 GMT Nr. 157383
    Ist das nicht dasselbe wie diese Doku von 2023, oder gibt es da was Neues? Felix bezweifelt irgendwie, dass jemand, der zufällig für die Notaufnahme eingeteilt war, größere Erfahrung im Beurteilen von Verletzungen durch Scharfschützen hat.
  • [l] Felix Sun, 01 Jun 2025 12:02:47 GMT Nr. 157382
    >>157376
    >Damit kann man behinderte Mikrobankmarken gewinnen.
    Selbst das erscheint fraglich. Welche Mikrobankmarke soll das sein?

    union { char a; char b[10000]; } trololol = {0};
    

  • [l] Felix Sun, 01 Jun 2025 11:58:39 GMT Nr. 157380
    JPG 618×481 52.0k
    >>157378
    >nach zwei wochen dürfte es selbst im treppenhaus schon zart duften
    Ein Gedicht!
  • [l] Zuse ## Admin Sun, 01 Jun 2025 11:52:02 GMT Nr. 157379
    GIF 990×419 259.2k
    >>157371
    >Ein "false" setzen sollte genügen für diesen key/value header.

    Dokumentation sagt Nein:
    >Directives
    >
    >
    true

    >
    >The server allows credentials to be included in cross-origin HTTP requests. This is the only valid value for this header and is case-sensitive. If you don't need credentials, omit this header entirely rather than setting its value to false.

    Wäre ja auch sonst nicht verwirrend genug.

    zl;ng: Dadurch, dass Diätkanal diesen Header nicht setzt, tut es bereits das richtige.


    >>157377
    Es ist alles so mühsam. Warum können Brausierer nicht von sich aus das richtige, vernünftige, erwartbare, naheliegende und sichere tun? Kein Keks sollte jemals von einer anderen Seite ausgelesen werden können ohne explizites Opt-In.
  • [l] Felix Sun, 01 Jun 2025 11:49:15 GMT Nr. 157378
    hat noch keiner seiner "freunde" bei ihm zuhause mal angeklopft?
    nach zwei wochen dürfte es selbst im treppenhaus schon zart duften
  • [l] Felix Sun, 01 Jun 2025 11:18:05 GMT Nr. 157377
    JPG 1280×1017 300.5k
    >>157373

    https://medium.com/@Lucif3rr/http-cookie-attributes-8a0962f46b68
    <SameSite is used by a variety of browsers to identify whether to allow a cookie to be accessed or not.It helps in preventing against CSRF attack.
    <Strict
    <The Strict value is the most restrictive usage of SameSite, allowing the browser to send the cookie only to first-party context without top-level navigation. In other words, the data associated with the cookie will only be sent on requests matching the current site shown on the browser URL bar. The cookie will not be sent on requests generated by third-party websites.

    Wenn es nur darum geht den Cookie zu schützen sollte das reichen. Musst halt deinen eigenen Cookie mal inspizieren:
    https://addons.mozilla.org/en-US/firefox/addon/cookie-quick-manager/
    https://github.com/spacesynth/userscripts-collection/blob/master/userscripts/YouTubeDarkNoAutoplayCookies.user.js#L27

    Nur als Referenzen, welche Daten und Werte in einem gutem™ Cookie sein können.
    Wenn dein Server den Cookie beim anlegen vor Fremdzugriff schützt weiss auch der Fuchs, wie der den Cookie auf anderen Seiten schützt.
    Denke das ist unproblematisch bei einem gut definierten Cookie. Die Isolation tut ihr Übriges.
  • [l] Felix Sun, 01 Jun 2025 11:15:12 GMT Nr. 157376
    >Was rauchen die eigentlich bei GCC?
    Vorsicht, gleich pfostiert ein Felix die Bugzilla-Elfe mit Fefe und -fwrapv und erklärt dir, das alles, was im C-Standard legal ist, per definitionem eine gute Implementationsentscheidung ist.

    Tatsächlich wird diese Geschichte noch lustiger: Clang hatte dieses Verhalten in der Vergangenheit, schuf es dann aber wieder ab, weil es zu behindert war und GCC es richtig tat. Jetzt macht es Clang richtig aber GCC falsch.

    >>157357
    Nur Unionen. memset ist streng genommen übrigens auch nicht zuverlässig, da NULL und 0.0 nicht unbedingt durch Nullbytes repräsentiert werden müssen.

    >>157374
    >Welchen Nutzen soll das haben?
    Damit kann man behinderte Mikrobankmarken gewinnen.
  • [l] Felix Sun, 01 Jun 2025 11:03:51 GMT Nr. 157374
    >>157372
    >Bezüglich Unions hat er aber immer nur vorausgesetzt, dass das benutzte Mitglied initialisiert wird, auch wenn man seit C99 per Bezeichner ein anderes wählen kann.
    Mag sein, trotzdem geht GCC hier vollretardiert. Welchen Nutzen soll das haben?
  • [l] Zuse ## Admin Sun, 01 Jun 2025 11:00:13 GMT Nr. 157373
    JPG 480×451 14.6k
    >>157371
    >Was genau läuft hier ab?
    Keine Ahnung. Wüsste ich auch gerne.

    >Ist das keine Ausnahme von dir im Fuchs?
    Nein, ich habe nie irgendeine Ausnahme gesetzt.

    >Sondern Kohl haut einen embed auf eine Ressource im Diätkanal und daher kommt ein Cross Site cookie?
    Scheint so. Was zum Fick?

    >Klingt in der Tat sehr nervig.
    Ja, etwas bedenklich. Ich hätte keine Lust, dass, wenn ich hier mit meinem Admin-Konto eingeloggt bin und den Kohl besuche, der einfach meinen Sitzungkeks klauen kann. Allerdings scheint das experimentell nicht der Fall zu sein: Die Kekse sind wohl in unterschiedlichen "Namensräumen" gespeichert, also wenn ich z.B. hier ein anderes Thema (Hell/Dunkel) einstelle, dann hat das auf den Frame bei Kohl keine Auswirkungen und umgekehrt. Aber ich möchte auch nicht, dass der Kohl meinen Sitzungskeks auslesen kann, falls ich mich mal in geistiger Umnachtung dort im Frame anmelden sollte.

    Soweit ich es verstanden und versucht habe, experimentell zu verifizieren, kann auch die Elternseite (in dem Fall Kohl) nicht auf den Inhalt des Frames zugreifen und soll (Quelle: Internet™) auch nicht die Kekse des Frames auslesen können, wenn der Frame von einer anderen Domain kommt.

    Deswegen verstehe ich diese Meldung irgendwie auch nicht so richtig. Wenn damit – anders als es klingt – gemeint sein sollte, dass der Frame (also in dem Fall dietchan) die Kekse der Elternseite (Kohl) auslesen könnte – ich glaube, das ginge u.U. per JS – dann würde ich es ja verstehen, aber müsste die Warnung dann nicht bei Kohlchan erscheinen statt hier? Ich werde daraus einfach nicht schlau.

    >https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Allow-Credentials
    Werde ich mir mal anschauen. Mal gucken, ob das irgendwas nützt.
  • [l] Felix Sun, 01 Jun 2025 10:55:42 GMT Nr. 157372
    >>157357
    Der C-Standard schreibt vor, dass alle verbleibenden Felder eines Structs inklusive Füllung leer-initialisiert werden, wenn mindestens ein Feld explizit initialisiert wird.
    Bezüglich Unions hat er aber immer nur vorausgesetzt, dass das benutzte Mitglied initialisiert wird, auch wenn man seit C99 per Bezeichner ein anderes wählen kann.
  • [l] Felix Sun, 01 Jun 2025 10:47:00 GMT Nr. 157371
    JPG 4096×2979 573.1k
    @Zuse:
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Allow-Credentials

    Leider will die Flut an Headern nicht aufhören. Ein "false" setzen sollte genügen für diesen key/value header. Ansonsten bin ich mit meinem Latein am Ende. Wenn es geht würde ich mich allerdings freuen, dass bei mir direkt mitzuimplementieren.

    Was genau läuft hier ab? Ist das keine Ausnahme von dir im Fuchs? Sondern Kohl haut einen embed auf eine Ressource im Diätkanal und daher kommt ein Cross Site cookie? Klingt in der Tat sehr nervig. Ich kann das hier halt nicht beobachten, da ich Kohl seit 1 Jahr nicht mehr nutze. Glaube da war zu viel Proof of Work beim connect oder irgendwas hat mich genervt.
  • [l] Felix Sun, 01 Jun 2025 10:36:17 GMT Nr. 157370
    >>157352
    Ich bezweifle, daß Fefe mit jemand befreundet ist, der Handynummer nicht ohne Deppenleerzeichen buchstabieren kann.
  • [l] Zuse ## Admin Sun, 01 Jun 2025 10:24:38 GMT Nr. 157369
    >>157368
    credentialless führte lediglich dazu, dass der Frame gar nicht mehr geladen wurde, was nun etwas zu weit geht. Diverse CORS/CORP/COOP/COEP/Blah-Header werden bereits gesetzt, aber das scheint nicht zu helfen.


[0] ... [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... [273]
[c] [meta] [fefe] [erp]