Suche
Kategorien
Getaggte Artikel
Impressum
Max-Planck-Ring 6d
98693 Ilmenau
Tel./Fax: +49 3677 691929
info@fem.tu-ilmenau.de
www.fem.tu-ilmenau.de
Vertretungs-
berechtigter Vorstand:
Vorsitzender:
Adrian Schollmeyer
Stellvertretender Vorsitzender:
Robin Lehmann
Schatzmeisterin:
Anna Brede
Stellvertretender Schatzmeister:
Maximilian Klook
Registergericht:
Amtsgericht Ilmenau
Registernummer: 120483
Datenschutzerklärung
Verwaltung des Blogs
Friday, 30. October 2015
Accepting expired client certificates with apache 2.4
The solution was to install SSL client certificates, so clients could reliably be identified even across different IPv6 privacy extension addresses. These client certificates were automatically generated and signed by a local CA using HTML <keygen> and PHPseclib and only served to identify the browser instance.
Now these client certificates started to expire.
As our Firefox users had not cleared the "Remember this decision" flag when choosing their single client certificate to connect with, Firefox 41 continued to connect using an expired certificate. The "auto select client certificate" in Firefox does not do any better, thought. When the server rejects an SSL client certificate with ssl_error_expired_cert_alert, Firefox shows an error message to the user but does not offer him to reselect an other client certificate. So users started to puzzle about how to fix this error. Even installing a renewed client certificate (same subject, issuer and public key) ahead of expiration into Firefox 41 does not help, as that does not remove the old certificate which is still chosen for connecting with.
So the only place to fix this is the server. On server side, the list of accepting CAs could be changed. Though Firefox code looks like in "auto select client certificate" mode this would work, the "use remembered client certificate" lacks any client certificate issuer check. So this does not look promising (see ClientAuthDataRunnable::RunOnTargetThread), though it has not been tested. Next, trying to configure apache 2.4 (Debian Jessie) to accept expired client certificates (while still requesting - at least optionally - one) turns out to be impossibly. There just is no such option. Thought, patching and recompiling apache2 was to be avoided as the server should still be able to install Debian security updates without much manual intervention.
After digging through the source of apache 2.4 mod_ssl, it appears that it is making heavy use of OpenSSL certificate validation routines to check client certificates - including the expiration checks (in contrast to https proxy server certificate validation, where expiration time is checked in mod_ssl itself). Specifically, it uses ssl_callback_SSLVerify with SSL_set_verify to ignore some verification errors already.
LD_PRELOAD is a mechanism to load a shared library early during linking (starting) of an applicaton (like apache2). The linker will the prefer the functions provided by LD_PRELOAD libraries over those libraries indicated by the application itself - so it can be used to hook into library function calls. By writing a specifically crafted LD_PRELOAD library, SSL_set_verify can be hooked and the callback replaced. The new callback will filter out any X509_V_ERR_CERT_HAS_EXPIRED error before passing back control to the original ssl_callback_SSLVerify callback.
LD_PRELOAD can the be configured in /etc/apache2/envvars (used by apache2ctl and thus Debian init scripts) to load the new library.
# mysslverify.c
// gcc -Wall -D_GNU_SOURCE -fPIC -DPIC -shared -ldl -o mysslverify.so mysslverify.c
// use with LD_PRELOAD=/.../mysslverify.so
#include <openssl/ssl.h>
#include <dlfcn.h>
void (*orig_SSL_CTX_set_verify)(SSL_CTX *ctx, int mode, int (*verify_callback)(int, X509_STORE_CTX *)) = NULL;
void (*orig_SSL_set_verify)(SSL *s, int mode, int (*verify_callback)(int, X509_STORE_CTX *)) = NULL;
int (*orig_verify_callback)(int, X509_STORE_CTX *) = NULL;
int verify_callback(int ok, X509_STORE_CTX *ctx) {
if (!ok && X509_STORE_CTX_get_error(ctx) == X509_V_ERR_CERT_HAS_EXPIRED) {
X509_STORE_CTX_set_error(ctx, X509_V_OK);
ok = !ok;
}
return orig_verify_callback(ok, ctx);
}
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*cb)(int, X509_STORE_CTX *)) {
if (orig_verify_callback == NULL) orig_verify_callback = cb;
if (cb != NULL && cb == orig_verify_callback) cb = verify_callback;
if (!orig_SSL_CTX_set_verify) orig_SSL_CTX_set_verify = dlsym(RTLD_NEXT, "SSL_CTX_set_verify");
orig_SSL_CTX_set_verify(ctx, mode, cb);
}
void SSL_set_verify(SSL *s, int mode, int (*cb)(int, X509_STORE_CTX *)) {
if (orig_verify_callback == NULL) orig_verify_callback = cb;
if (cb != NULL && cb == orig_verify_callback) cb = verify_callback;
if (!orig_SSL_set_verify) orig_SSL_set_verify = dlsym(RTLD_NEXT, "SSL_set_verify");
orig_SSL_set_verify(s, mode, cb);
}
Sunday, 27. September 2015
Campus Noir 2015 - Kein schwarzer Tag für uns
8 Bands... Drei Clubs... Ein schwarzer Campus und 8 Stunden Livestream
Winter is coming! Aber anders als im bekannten TV Zitat erwartet wir in Ilmenau nicht eine unaufhaltsame Macht aus dem hohen Norden, sondern freuen uns auf das bevorstehende Wintersemester. Doch kurz bevor dieses losgeht steht noch ein ganz besonderes Kleinod der ilmenauer Campuskultur auf dem Plan. Denn die Nächte um den 25tn und 26tn September stehen ganz im Zeichen der schwarzen Kultur, da der Campus Noir sein fünfjähriges Jubiläum feiert und damit wieder allerhand magisch interessierte der schwarzen Szene überall aus den Lande an den Rand des Thüringer Waldes zieht.
Nachdem wir uns letztes Jahr bereits an der Aufzeichnung in der ilmenauer Jakobuskirche beteiligen konnten, freuten wir uns natürlich sehr als die Organisation der Studentenclubs uns auch dieses Jahr fragte ob wir uns eine Mediale Umsetzung des Abends vorstellen könnten.
Und da einige von uns immer noch nicht genug bekommen können vom Broadcasten fragten wir dreist zurück ob wir es gestemmt bekommen alle Konzerte live in die ganze Welt hinauszutragen. Die Idee zündetet sofort beim Orgateam und man klemmte sich dahinter die Genehmigungen der Bands einzuholen.
Wir begannen schon mal mit der üblichen Suche nach Helfern und technischen Lösungen. So galt es als eine der Kernfragen zu klären welcher Club wie und von wo aus ins Internet gestreamt werden würde. Nach einigen hin und her entschieden wir uns für zwei separate Regien. Unseren Ü-Wagen parkten wir vorm C-Club und ließen Betsy dort die Konzerte vom Freitag, Samstag und die Feuershow im Außenbereich produzieren.
Die Auftritte der Künstler im H und I Club wurden kurzer Hand mit einer kleinen Regie im Konferenzraum des FeM-Office geschnitten und gestreamt. Auch das Umschalten zwischen den verschiedenen Streams erfolgte hier zentral. Die nötige Verkabelung wurde direkt hergestellt, was sich beim BI-Club, der nur einen Steinwurf entfernt ist, ja nicht sonderlich kompliziert gestaltete. Eine etwas kniffligere Angelegenheit war die Anbindung des BH-Clubs da der geliehene Bildmischer "nur" HD-Signale verarbeiten konnte. Durch die höheren Frequenzen des Signals führt natürlich zu einer höheren Dämpfung im Kabel und damit zu geringerer Reichweite. Und so nehmen die Beiden Kamerasignale den Weg vom H aus ins Kellerfenster des kleinen hsf Studios wo sie durch eine Kreuzschiene verstärkt werden und dann durch die zwischen Funk und FeM liegende A/V-Verkabelung in den Konferenzraum zu gelangen.
Am Freitag beginnen die Vorbereitungenn im BC-Club gemütlich am Nachmittag, fast schon enttäuscht stellt der Tagesverantwortlicheh fest das der Ü-Wagen nach 5min schon fertig zur Abfahrt ist. Am C angekommen ist eines der größten Probleme erst einmal die Organisation von Strom. Die beiden Außensteckdosen scheinen nicht zu funktionieren und so greifen wir mit den Clubeiern auf die Steckdosen in der Telefonzelle zurück. Das Problem dabei ist nur das hier das Vorhängeschloss verwittert ist und es trotz passenden Schlüssels sich nicht öffnen möchte. Aber mit einem kurzen auf kreischen des Trennschleifers ist auch dieses Hindernis bald bewältigt.
Der Club wird von uns mit 4 Kameras bestückt was auch das äußerste der Gefühle ist was wir an Platz ab zwacken können, denn wie immer sollen die Gäste der Konzerte ja so wenig wie möglich durch unsere Arbeit gestört werden. So kommt kurzer Hand einer Kamera auf die Bühne, eine ans Fenster davor und eine Totale vor die DJ-Ecke. Die Vierte Kamera ist eine Miniaturkamera die uns einen Blick über die Band Richtung Publikum beschert. Ton gibt es dank Digitalen Tonbus direkt vom Pult im Club so viele Spuren wie unserer spontan vom hsf entliehener Tonmeister haben möchte.
Die Bands des heutigen Abends sind mit Ochre Room und Myyra Rós musikalisch eher von der ruhigeren Sorte und auch der komplett ausverkaufte Club bietet uns so selber ein entspanntes Testfeld um kleinere Fehler zu finden und zu bekämpfen. Und so haben wir nach einem sehr unterhaltsamen Programm erst richtig Blut geleckt für den großen Stunt am nächsten Tag.
Am Samstag geht es zuerst damit los die Verkabelung im BI und BH-Club zu verlegen. Was sich etwas hinzieht da das ganze ja vor allem so sicher platziert seinen muss das sämtliche Stolperfallen ausgeschlossen sind. Auch die kleine Regie im Konferenzraum gilt es noch aufzubauen und zusammen zu stöpseln. Hier ist die Herkunft des Tons schon interessanter. Wir bekommen in beiden Clubs eine Stereosumme die wir über das Videosignal eingetütet mit auf Reisen schicken.
Beim C-Club stehen danach vor allem die Vorbereitungen für die Übertragung der Feuershow im Außenbereich an. Wir haben uns dazu entschlossen das wir sämtliche Kabel bereits vorher verlegen und dann zum Event nur noch fix die Kameras zu ihren Positionen tragen müssen. Von den Perspektiven her können wir uns hier frei austoben. So wandert eine Kamera auf unseren liebgewonnenen Kran, der so langsam eine Namens taufe bräuchte, eine weitere wagt sich dicht ans Geschehen und die Dritte begibt sich noch höher hinaus und positioniert sich auf der Feuerleiter des Haus G. Alles steht und ist soweit getestet. 10Min vorher taktischer standby.
Los geht der Reigen der Bunten Bilder mit BrigittyHandley im I-Club. Im Wagen schauen wir uns das ganze auf unserer Videowall an und warten auf unseren Einsatz im Anschluss.
Doch dann eine Kleine Schrecksekunde jemand hat die Speicherkarten vom Abend zuvor im Office liegen lassen. Doch nach ein paar bangen Warteminuten, kann der Springer sich leicht außer Atem in die MAZ im Kofferraum stecken und pünktlich zum ersten Song auf Aufnahme Drücken. Und schon Wind wir mit Date at Midnight in der zweiten Band des Abends. Und schon jetzt merken wir das die Clubs wesentlich voller sind als am Abend zuvor. Alles läuft aber bisher reibungslos. Schöne Bild und die Kommunikation läuft gut. Nach guten 70 Minuten geben wir ab in den BH-Club wo mit Klangstabil einer der bekanntesten Acts des Tages zu seinem elektronischen Programm eingeladen hat. Während dort also die Bässe durch das Publikum wandern, gilt es für die Crew am C die Feuerdarbietung vom Haus G und E vorzubereiten. Fix müssen die Kameras auf Position getragen und angeschlossen werden. Die Kamera für den Kran haben wir uns aus dem I-Club entliehen. Schneller als gedacht geht es dann auch los. Und die Freaks on Fire machen ihrem Namen alle Ehre. Eine Feuerakrobatik jagt die nächste und lassen das normale Feuerspucken fast schon langweilig wirken. Leider passiert uns hier der offensichtlichste Schnitzer des Abends da vergessen wurde den Sternchenfilter aus den Kameras auszuklappen. Leider haben die Kameras keinen Rückkanal und so steht derjenige der wüsste wo man ihn ausschaltet auf der Feuerleiter zum schweigen verdammt. Aber dieser Fehler verpufft im Abschluss der Show mit ihrer mehreren Meter hohen Feuerwand.
Doch nun kommt die größte Herausforderung des Programms der rasche Rückbau der Kameras in den Club. Leider kommt die Kamera von der Feuerleiter hier zu spät, da sie das Ende der Show auf der Intercom nicht mitbekommen hatte und der abstieg in tiefschwarzer Nacht auf der löchrigen Wendeltreppe doch länger dauerte als erwartet. Dadurch fällt Kamera 2 vor der Bühne nun aus, was die Möglichkeiten an Bildern doch stark begrenzt. Trotzdem macht die Übertragung von Still Patient die gerade auf Releasetour sind viel Spaß im Team.
Vor ähnlichen Problemen steht auch der Trupp im BI die nachdem sie ihn eröffnen durften nun auch die Ehre haben den Abend zu beenden. Mit der Band Other Day. Aber auch hier gestaltet sich das wieder einnehmen der Positionen als schwierig. Der Club ist schlicht zum brechen voll. Außerdem hat es eine der Koaxialleitung zerlegt. Aber wir machen das Beste aus den Mitteln und beenden den Abend kurz vor 2Uhr von der Übertragungsstechnischen Seite.
Während der I noch sendete kümmerte sich der Rest der Crew schon fleißig um den Rückbau von H, C und Feuershow. Und so ist sämtliche Technik gegen halb dreiviertel Drei auch wieder im Office verstaut. Bis auf Betsy, die wir bei den Feuchtkalten Wetter dann doch über Nacht lieber mit laufender Klimaanlage geschützt am Club verweilen lassen und erst am nächsten Tag zurück nach hause fahren.
Am Ende bleibt das Gefühl das wir mal wieder verdammt stolz auf uns seinen können. Wir haben etwas neues gewagt und die gesamte Mannschaft hat an einem Strang ziehend dafür gesorgt das es funktionierte. Und vor allem hatten alle einen Riesenspaß dabei, so das der enorme Arbeitsaufwand der Aktion niemandem wirklich aufgefallen sind.
Und so stellen wir nach fast genau einem Jahr Ü-Wagenbetrieb fest das es sich gelohnt hat die Hürden zu nehmen, die diesem Projekt im Wege standen und freuen uns gleichzeitig auf all die wundervollen Events die wir mit unserer Betsy noch bestreiten werden in Zukunft. Vielleicht seid ja auch ihr als neue Erstsemestler die sich auf diesen Einsatzblog verirrt haben schon beim nächsten mal mit dabei und könnt dann eure ganz persönliche Ü-Wagen Geschichte erzählen
Sunday, 30. August 2015
SNT 2015 - Brunch und Spiele
Die Studentennetze in Göttingen (Kellnerweg) und Erlangen (Rommelwood e.V.) organisieren in Ihren Wohnheimen neben dem Internetzugang viele weitere interessante Sachen. So ist in Göttingen wohl das einzige Studentenwohnheim, dass seinen Bewohnern sonntags einen Brötchen-Bringedienst mit Onlinebestellung bietet, während die Studenten in Erlangen online nachsehen können, wann Waschmaschine oder Trockner letztmalig eingeschaltet wurden.
In weiteren Gesprächen kam oft zur Sprache, dass viele Studentennetzwerke über einige "alte" Technik (100 MBit-Ports, GBit-Uplinks) verfügen, die durch Modernisierung obsolet geworden ist. Für viele ist die Technik jedoch zu schade zum wegwerfen, so dass die Geräte häufig erstmal eingelagert wurden. Die AG DSN ist derzeit im Kontakt z.B. mit dem Roten Kreuz, wo die Geräte unter Umständen für Schulen oder ähnliche Institutionen in anderen Ländern Verwendung finden könnten. Daran hätten auch die anderen Netze Interesse und die Mitglieder der AG DSN boten an, bei entsprechenden verfügbaren detaillierten Informationen die anderen zu informieren.
Zwischendurch ergriff Siggi - SNT-Archiv, Chronik und Besucher der ersten Stunde - das Wort. Seiner Recherche nach waren mindestens 21 verschiedene Netze aus 18 Universitätsstädten in den letzten 12 Jahren (und 11 Treffen) beim SNT. Mit einem Resüme über die Themen der vergangenen Treffen merkte er an, das sich zumindest gefühlt die Nachwuchssorgen minimiert haben. Trotzdem mahnte er, die Bemühungen diesbezüglich nicht abreissen zu lassen. Auch wenn sich die Netzwerke in den letzten Jahren technisch sehr viel angenähert haben, so ist die Ausstattung in Hersteller, Leistung und genauer Umsetzung doch weiter unterschiedlich. Ein Ideen- und Know-How-Transfer sollte daher zukünftig auch außerhalb der jährlichen Treffen stattfinden.
Der Nachmittag gehörte der Freiluft-Betätigung. Bei sonnigen Temperaturen mussten die Netzwerker zeigen, wie sie mit ihren oft verwendeten Geräten und Materialien wie USVs, Patchkabeln, Kaltgerätekabeln oder Kastenmuttern im 19" Schrank geschickt und kreativ umgehen können. In den folgenden Disziplinen wurden jeweils im Team-Doppel Punkte gesammelt:
- 30 Kastenmuttern im 19" Rack in die richtige Reihenfolge bringen
- USVs im Einkaufswagen schnell nach Hause fahren
- Kaltgerätekabel-Weitwurf
- 24 Ports umpatchen nach System
- Schreiben eines speziellen Wortes mit völlig randomisierten Tastaturlayouts
Der erste Platz ging an mit reichlich Vorsprung an "Die Letzten" aus Stuttgart.
Unsere Gastgeber erlaubten uns nach den Anstrengungen eine ausreichende Regenerationsphase. Zum Abendessen luden sie anschließend ins Restaurant Mythos ein, um den Abend bei leckerem griechisch, mediteranem Essen ausklingen zu lassen. Spontan präsentierten die Vertreter von "Heia Heia", "Schokoloko", "Sir Daniel Dütrieb" und "W.I.N.D" danach beim Powerpoint Karaoke in sehr lustiger Runde ihre Produkte. Sie stellten sich zudem den kritischen Zuhörern und beantworteten bereitwillig jede noch so abwegige Frage. Immer wieder ein großer Spaß!
Am Sonntag endet das SNT 2015 leider schon wieder. Neben Göttingen, das nach langer Zeit wieder beim Studentennetztreffen vertreten war, hat auch Erlangen Interesse an der Ausrichtung des 12. SNT bekundet. Wir würden uns freuen wenn auch im nächsten Jahr wieder ein neues Netz und eine neue Stadt erkundet werden kann.
Den Mitgliedern vom StuNet Freiberg gebührt der Dank für ein tolles, ereignisreiches und sehr gut geplantes Studentennetztreffen. Wir hoffen, dass die entwickelten Ideen bis zum nächsten Treffen Umsetzung finden, freuen uns auf den weiteren Austausch via IRC oder Mail und natürlich auf das SNT 2016 - vielleicht in Göttingen oder Erlangen.
Saturday, 29. August 2015
SNT 2015 - Willkommen in der Universitätsstadt Freiberg
Im letzten Jahr waren die sich aktuell beim Studentennetzwerk "Stunet" aus Freiberg ehrenamtlich Engagierenden zum ersten mal bei einem Studentennetztreffen. Dies hat ihnen wohl so gut gefallen, dass sie die anderen Netze in diesem Jahr direkt an die Technische Universität Bergakademie Freiberg ins wunderschöne Sachsen einluden. Seit Tübingen finden unsere jährlichen Treffen immer von Freitag bis Sonntag statt, wobei die meisten Besucher bereits den Donnerstag Abend für die Anreise und Gespräche in entspannter Atmosphäre bei Gegrilltem und Gebrautem nutzen.
Neben uns drei aus Ilmenau sind Vertreter vom
- StuStaNet e.V. (München)
- Selfnet e.V. (Stuttgart)
- AG DSN (Dresden)
- Mittweidaer CampusNet
- Rommelwood e.V. (Erlangen-Nürnberg)
- Netz-AK (Tübingen)
- SielNet e. V. (Braunscheig)
- Kellnerweg (Göttingen)
nach Freiberg gereist. Und das "SNT-Archiv & Chronik Siggi" vom MCN als langjähriger SNT-Besucher lies die Chance natürlich auch nicht entgehen.
Am Donnerstag Abend wurde bis spät in die Nacht über die eigenen Netze, Techniken und aktuelle Entwicklungen gesprochen. Zu für Studenten eher unüblichen Zeiten klingelte am Freitag morgen dann der Wecker - zumindest für alle, die sich mit Kaffee & Frühstück in der Mensa nochmal stärken wollten. Bis zum Mittag gab es dann die Gelegenheit auf und vom Weg zum ersten Programmpunkt die getankte in kinetische Energie zu verwandeln.
Die Gastgeber luden die sicherlich zumeist Computer- und Netzwerkbegeisterten Besucher nach unter Tage - in eine Welt ohne Sonne und Vogelgeschrei. Im Bergwerk "Reiche Zeche" unter Freiberg kann man den Bergbau, bei dem Silber und Erze seit dem Mittelalter abgebaut wurde, hautnah erleben. Die aktive Förderung wurde 1969 eingestellt - das Bergwerk dient heute der Lehre, Forschung und Bildung der hiesigen Universität. In teils sehr engen Gängen konnte man erfahren, wie beschwerlich sich der Erz-Abbau im 19. Jahrhundert gestaltete und welche Gefahren die "Altvorderen" auf sich nahmen. Zugleich erfuhr man in der etwa 90-minütigen Führung interessante Details zum Silber- und Erzabbau in den letzten 800 Jahren.
Auf dem Weg zum nächsten Programmpunkt war die Stärkung in der Freiberger Mensa angesagt. Auch wenn das Wetter am Freitag sich nicht von seiner besten Seite zeigte war Petrus wenigstens auf den Wegen gnädig mit dem Wasser von oben. Regen hätten die M.Sc. Erik Berger und Kollege M. Sc. David Voigt in der X-SITE CAVE - einem innovativen Projektionsraum für Forschung und Lehre auf dem Gebiet der Virtuellen Realität - visualisieren können. Neben imposanten Demos auf den 24 Full-HD Projektoren mit etwwa 50 Megapixeln waren vor allem die technischen Probleme wie Abberationen im Fokus. Da hier auch nicht ausreichend kalibrierbare (Consumer-)Technik zum Einsatz kommt werden z.B. Darstellungsfehler durch unterschiedliche Chrominanz oder Luminanz untersucht und dabei Möglichkeiten entwickelt diese zu unterbinden. Natürlich spielte auch das Infrarot-Tracking im CAVE eine Rolle, mit der Nutzer sich in der 3D-Welt bewegen können.
Im Laufe des Tages wurde viel über die einzelnen Netzwerke gesprochen und am späten Nachmittag gab es die Möglichkeiten den eigenen Verein, die eigene Arbeitsgemeinschaft, seine Arbeit oder andere interessante Punkte aus dem Leben eines Studentennetzwerkers vorzustellen. Dies zeigt immer wieder die Gemeinsamkeiten bei technischen Umsetzungen, aber auch die Probleme mit Studentenwerken, Rechenzentren und anderen involvierten Partnern. Die Vorstellungsrunde bietet natürlich für alle auch die Chance neue Ideen aufzuschnappen und im eigenen Netzwerk zu realisieren.
Gestärkt durch das Abendessen forderten die StuNet-Jungs die Besucher bei einer Art Kneipenquiz dazu auf, ihr Wissen rund um die Welt von Netzwerken, IT, Geschichte und Internet-Phänomenen zu beweisen. In kleinen Teams und fünf Runden stellte man Fragen zu ARPANET, IEEE Milestones, Memes und diversen Standards und Abkürzungen - die Nutzung von Notebook, Smartphone oder anderen internetfähigen Geräten war natürlich untersagt. In bunt gemischten Team verwies das Team "Die Bestechlichen" die Mitglieder von "Trial & Error" und "Die Heruntergenudelten" auf die Plätze.
Und nun klingt der Abend des ersten SNT-Tages mit Know-How-Transfer, gemeinsamer Lösungssuche und einer Mate oder einem Bierchen aus...
To be continued...
Thursday, 14. May 2015
HowTo enable address sanitizer with OpenWRT
To get a program with address sanitizer support compiled in, it needs the following flags:
TARGET_CPPFLAGS += -fsanitize=address -fno-omit-frame-pointer
TARGET_CFLAGS += -fsanitize=address -fno-omit-frame-pointer
TARGET_LDFLAGS += -lasan -fsanitize=address
TARGET_LDFLAGS_C += -lasan -fsanitize=address
So the toolchain (gcc) needs to be compiled with support for compiling for address sanitizer, that is using gcc "--enable-sanitizer" configure argument. The trouble with OpenWRT is that it uses uClibc, so libsanitizer does not compile out of the box against it. Additionally, libasan.so needs to be packed (it depends on libstdcpp) and packets compiled with address sanitizer need to depend on libasan, thought that was not that much of an issue.
So how can one enable libsanitizer with uclibc? The following steps are for toolchain gcc 4.8, gcc 4.9 will be more difficult because its extra features result in more (conflicting) dependencies.
- patch gcc 4.8 to avoid using __libc_malloc as uClibc does not provide this [2]
- change OpenWRT toolchain Makefiles to enable sanitizer support for gcc
diff --git a/toolchain/gcc/final/Makefile b/toolchain/gcc/final/Makefile
index 3fb5ccf..4fae52f 100644
--- a/toolchain/gcc/final/Makefile
+++ b/toolchain/gcc/final/Makefile
@@ -4,7 +4,7 @@ include ../common.mk
GCC_CONFIGURE += \
--with-headers=$(TOOLCHAIN_DIR)/include \
- --disable-libsanitizer \
+ --enable-libsanitizer \
--enable-languages=$(TARGET_LANGUAGES) \
--enable-shared \
--enable-threads \
@@ -58,7 +58,7 @@ endef
define Host/Install
$(CleanupToolchain)
- $(_SINGLE)$(GCC_MAKE) -C $(GCC_BUILD_DIR) install
+ $(_SINGLE)$(GCC_MAKE) -C $(GCC_BUILD_DIR) install install-target-libsanitizer
# Set up the symlinks to enable lying about target name.
set -e; \
(cd $(TOOLCHAIN_DIR); \
diff --git a/toolchain/gcc/minimal/Makefile b/toolchain/gcc/minimal/Makefile
index 0344e1a..e14f64a 100644
--- a/toolchain/gcc/minimal/Makefile
+++ b/toolchain/gcc/minimal/Makefile
@@ -6,7 +6,7 @@ GCC_CONFIGURE += \
--with-newlib \
--without-headers \
--enable-languages=c \
- --disable-libsanitizer \
+ --enable-libsanitizer \
--disable-libssp \
--disable-shared \
--disable-threads
@@ -30,11 +30,11 @@ define Host/Prepare
endef
define Host/Compile
- +$(GCC_MAKE) $(HOST_JOBS) -C $(GCC_BUILD_DIR) all-gcc all-target-libgcc
+ +$(GCC_MAKE) $(HOST_JOBS) -C $(GCC_BUILD_DIR) all-gcc all-target-libgcc all-target-libsanitizer
endef
define Host/Install
- $(GCC_MAKE) -C $(GCC_BUILD_DIR) install-gcc install-target-libgcc
+ $(GCC_MAKE) -C $(GCC_BUILD_DIR) install-gcc install-target-libgcc install-target-libsanitizer
endef
define Host/Clean
- fix uClibc to pass the sixth syscall argument to the kernel on powerpc (as my platform is powerpc) (or you will get "failed to mmap" errors)
--- uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/syscall.S 2015-05-14 09:24:29.299815401 +0200
+++ uClibc-0.9.33.2/libc/sysdeps/linux/powerpc/syscall.S 2015-05-14 09:24:41.187991584 +0200
@@ -30,6 +30,7 @@
mr 5,6
mr 6,7
mr 7,8
+ mr 8,9
sc
bnslr;
- add libasan to OpenWRT packages
diff --git a/package/libs/toolchain/Makefile b/package/libs/toolchain/Makefile
index 42b9935..aad3d3c 100644
--- a/package/libs/toolchain/Makefile
+++ b/package/libs/toolchain/Makefile
@@ -133,6 +133,34 @@ define Package/libstdcpp/config
endef
+define Package/libasan
+$(call Package/gcc/Default)
+ NAME:=libasan
+ TITLE:=GNU Standard ASAN Library v3
+ DEPENDS=+libstdcpp
+endef
+
+define Package/libasan/config
+ menu "Configuration"
+ depends on EXTERNAL_TOOLCHAIN && PACKAGE_libasan
+
+ config LIBASAN_ROOT_DIR
+ string
+ prompt "libasan shared library base directory"
+ depends on EXTERNAL_TOOLCHAIN && PACKAGE_libasan
+ default TOOLCHAIN_ROOT if !NATIVE_TOOLCHAIN
+ default "/" if NATIVE_TOOLCHAIN
+
+ config LIBASAN_FILE_SPEC
+ string
+ prompt "libasan shared library files (use wildcards)"
+ depends on EXTERNAL_TOOLCHAIN && PACKAGE_libasan
+ default "./lib/libasan.so.*"
+
+ endmenu
+endef
+
+
define Package/libc/Default
SECTION:=libs
CATEGORY:=Base system
@@ -420,6 +448,11 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
$(CP) $(TOOLCHAIN_DIR)/lib/libstdc++.so. $(1)/usr/lib/
endef
+ define Package/libasan/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(TOOLCHAIN_DIR)/lib/libasan.so. $(1)/usr/lib/
+ endef
+
use_libutil=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_UTMP),libutil)
use_libnsl=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_NIS),libnsl)
use_nsswitch=$(if $(CONFIG_EGLIBC_OPTION_EGLIBC_NSSWITCH),libnss_dns libnss_files)
@@ -568,6 +601,15 @@ else
exit 0
endef
+ define Package/libasan/install
+ for file in $(call qstrip,$(CONFIG_LIBASAN_FILE_SPEC)); do \
+ dir=`dirname $$$$file` ; \
+ $(INSTALL_DIR) $(1)/$$$$dir ; \
+ $(CP) $(call qstrip,$(CONFIG_LIBASAN_ROOT_DIR))/$$$$file $(1)/$$$$dir/ ; \
+ done ; \
+ exit 0
+ endef
+
define Package/libstdcpp/install
for file in $(call qstrip,$(CONFIG_LIBSTDCPP_FILE_SPEC)); do \
dir=`dirname $$$$file` ; \
@@ -638,6 +680,7 @@ $(eval $(call BuildPackage,libgcc))
$(eval $(call BuildPackage,libatomic))
$(eval $(call BuildPackage,libssp))
$(eval $(call BuildPackage,libstdcpp))
+$(eval $(call BuildPackage,libasan))
$(eval $(call BuildPackage,libpthread))
$(eval $(call BuildPackage,libthread-db))
$(eval $(call BuildPackage,librt))
- fix malloc being called from within malloc replacement function indirectly due to stack unwinding needing it (similar to [3], but that patch does apply to gcc 4.8 ). This patch might lose backtraces when used with threaded applications.
--- gcc-linaro-4.8-2014.04/libsanitizer/sanitizer_common/sanitizer_linux.cc.orig 2015-05-15 09:50:10.190769407 +0200
+++ gcc-linaro-4.8-2014.04/libsanitizer/sanitizer_common/sanitizer_linux.cc 2015-05-15 09:50:52.503376258 +0200
@@ -494,9 +494,13 @@
}
void StackTrace::SlowUnwindStack(uptr pc, uptr max_depth) {
+ static int nested = 0;
this->size = 0;
+ if (nested)
+ max_depth = 0;
this->max_size = max_depth;
if (max_depth > 1) {
+ nested++;
_Unwind_Backtrace(Unwind_Trace, this);
// We need to pop a few frames so that pc is on top.
// trace[0] belongs to the current function so we always pop it.
@@ -507,6 +511,7 @@
else if (size > 4 && MatchPc(pc, trace[4])) to_pop = 4;
else if (size > 5 && MatchPc(pc, trace[5])) to_pop = 5;
this->PopStackFrames(to_pop);
+ nested--;
}
this->trace[0] = pc;
}
- fix register usage in asan (or you'll see all kinds of false-positive errors): [3] (the changelog part is not required)
- recompile OpenWRT from the scratch or atleast
make toolchain/gcc/final/clean
make toolchain/gcc/final/install
make toolchain/uClibc/clean
make toolchain/uClibc/install
- change and possibly recompile the packages you need address sanitizer support with (mind the libraries!)
When recompiling uClibc, make sure that all copies of libuClibc-0.9.33.2.so got updated, or you might end up with a copy that does not have the syscall function fixed. If not fixed, when stracing, you will see the last argument of mmap2 to be 0xffffffff or alike; and program startup will fail with "mmap failed".
With this, I finally got hostapd on an embedded device running and found the memory corruption bug I introduced by accident.
[1] http://en.wikipedia.org/wiki/AddressSanitizer
[2] http://patchwork.ozlabs.org/patch/233933/
[3] https://github.com/gcc-mirror/gcc/commit/a15fa55a4a13bde63a86422bba672b3af8232a31
Sunday, 26. April 2015
Neuer Backup-Server für die FeM
Noch ein paar Daten und Fakten zum neuen System:
CPU: Intel Xeon E3-1231 v3
RAM: 16 GiB ECC DDR3
Betriebssystem-HDD: 2x 160 GB (gespiegelt)
Daten-HDD: 6x 2 TB (RAIDZ2)
Netto-Speicherkapazität: 7 TB
Betriebsystem: FreeBSD 10.1
Admins: Bammes, Michael
Wednesday, 4. March 2015
Zuse-Uplink-Migration am 24.02.2015
Pünktlich zu Heiligabend am 24.12.2014 war unser Switch im Zuse-NSP (Cisco WS-C3750G-24) ausgefallen. Dieser stellte den Uplink für alle vom Internet aus erreichbaren FeM-Dienste (Websites, E-Mail, Jabber, ...) zur Verfügung, welche damit nicht erreichbar waren. Bedingt durch die Feiertage konnten wir erst am 29.12. den defekten Switch durch eine spontane Leihgabe des Rechenzentrums ersetzen. Für uns ein Grund mehr, die schon länger fällige Migration in einen anderen Netzbereich des RZs anzugehen.
Am 24.02. um 13:00 wurde dann der Leih-Switch wieder ausgebaut und an das Rechenzentrum zurückgegeben. Die Server im Zuse-NSP wurden umgepatcht und stecken nun direkt auf einer Linecard eines Cisco 4500 des RZs. Dadurch steigt auch die Geschwindigkeit der Anbindung unserer Server von 1 Gigabit auf 2x10 Gigabit. Zeitgleich mussten auch im Medienlabor 2 einige Server, die IP-Addressen aus demselben Subnetz besitzen, migriert werden. Um 13:28 waren die Dienste im Großen und Ganzen wieder verfügbar, und kurz darauf waren auch alle verbleibenden Ruckler beseitigt.
Beteiligte: Bammes, Texec, Pegro, Rafi, Meineeiner, Michael
Hier stecken die Server noch auf dem geliehenen Switch... | Umpatchen auf das Patchpanel. | Ohne Plan is nix... (Bammes und Texec) | Männer, die auf Server starren... (Pegro, Meineeiner, Bammes) |
Monday, 1. December 2014
Goodbye Cisco - Der Auswanderer
Cisco-Umzug 24./25. November 2014
In der Nacht vom Montag den 24.11.14 auf Dienstag den 25.11.14 wurde der Kernrouter des
FeM-Netzes aus dem Block M in den Block H umgezogen.
Hintergrund: Beweggrund für den (temporären) Umzug ist der geplante
Einbau eines Fahrstuhls in den Block M, bei welchem die Wand, neben der der Cisco bislang stand,
durchbrochen werden muss. Um nun die empfindliche Netzwerktechnik diese Bauarbeiten
unbeschadet überstehen zu lassen, ist diese nun vorübergehend im H-Betriebsraum untergebracht
(genau genommen "übergebracht", da er nun über den sich dort befindenden
Servern hängt).
Der eigentliche Umzug:
Die FeM-Mitglieder wurden zuvor per E-Mail darauf hingewiesen, dass es in der Nacht von Montag auf Dienstag
ab 00:00 Uhr zu einem Netzausfall kommen würde, der sich auf einen
Zeitraum von ca. 3-4 Stunden erstreckt.
Gegen
22:40 trudelten so langsam alle Helfer im FeM-Office ein. Die üblichen
Verdächtigen waren schon fleißig am Werkzeug zusammensuchen,Doku ausdrucken etc..
Ziemlich genau um 23:00 Uhr trafen wir am Block M ein, der uns, dank des zuvor informierten Wachschutzes, offen stand.
Flib und hebbet begannen einige Block - Cisco Steckverbindungen zu dokumentieren, um später Zeit zu sparen. Die
günstige Gelegenheit, das Campusnetz auseinander zu nehmen wurde auch
gleich dazu genutzt, um diverse Strecken auf ihre 10GE-Fähigkeit zu
testen. Hierzu bereiteten Gerbi, Rafael und Meineeiner unter der
Anleitung von Pegro zwei HP 3800 Switches als "Paketbeschleuniger"[0] vor, um die tatsächlich vorhandene
Bandbreite zu testen und sich nicht nur auf das Aufleuchten der Link-LED zu verlassen.
Als das eigentliche Abpatchen begann, zeigte die Uhr gerade 23:57 Uhr.
Parallel dazu wurden die restlichen Steckverbindungen dokumentiert und die Patchkabel fein säuberlich aufgerollt.
Einer der beiden 38er Switche war bereits in Position gebracht und der zweite wurde um 00:02 von
Pegro, Rafael und Anton in den K-Betriebsraum verfrachtet.
Unterdessen
kümmerte sich Gerbi um das Verkabeln zweier Laptops, die als Paketquelle und -senke für die 10GE-Tests herhalten sollten. Um
exakt 00:08 Uhr ging der Uplink down und etwa 10 Minuten später wird
der Cisco mithilfe von Stefan (lost_sync) und Thorsten (Aaaarrrggh) zum
Block H gefahren (Achtung Gefahrensituation). Dort angekommen fiel auf,
dass der BR-Schlüssel vergessen wurde und Meineeiner durfte noch einmal
zurücklaufen und ihn holen.
00:41
Uhr war die BR-Tür dann endlich offen und Mank kommentiert: "Staubig
hier", woraufhin ihm lost_sync, auf den Feuerlöscher deutend, eine CO2-Party offerierte....
Der Cisco wurde anschließend in einer dafür vorgesehen Schale
in das Rack geschraubt. Dabei fiel auf, dass eben jene Schale nicht für
den Schrank im H-BR geeignet ist, da der Cisco in ihr zu stark auf den
darunterliegenden Servern auflag. Zum Glück zauberte Keksi aus dem
Nichts (niemand möchte wissen woher genau ) eine passende 1HE Platte,
die wie gemacht schien, um einen Cisco in einem Serverschrank zu fixieren.
Die Serverschranktür musste jedoch ausgebaut werden, da das Rack zu
weit vorne saß und man deshalb beim Schließen der Tür die Glaskabel
beschädigt würden. In
der Zwischenzeit haben hebbet und fabian die nötigen Patches im Haus M
gesteckt. Hebbet zog danach weiter in den L und patchte dort fröhlich
vor sich hin.
Schlag 01:04 war der zweite Versuch den Cisco einzubauen erfolgreich, dann begannen hebbet und texec
damit die Glaskabel auf den Cisco zu patchen, während meineeiner und phite in den M liefen,
um die übrigen Patchkabel zu organisieren.
Gegen 01:49 Uhr waren die Uplinks der einzelnen Blöcken gesteckt,
womit das Netz auf Nutzerseite wieder funktionsfähig war.
Um 02.57 Uhr und später noch einmal um 03.25 Uhr mussten die WLAN-APs
einzeln neu wieder aktiviert werden.
Das Sorgenkind war bis zuletzt war der Link Richtung ML2.
Dieser konnte erst nachmittags von Meineeiner und Pegro gefixt werden.
Friday, 17. October 2014
FeM-WLAN Ausbauplanung
Aktuell ist Haus P vollständig, im Haus I sind noch 2, im Haus H noch 4 und im Haus K noch 23 AccessPoints zu installieren; diese sind auch als Nächstes für den Ausbau eingeplant.
Voraussetzung für den Ausbau mit FeM-WLAN sind freie LAN-Kabel und die Unterstützung von Strom-über-LAN (POE). Im Haus A, C, D, E, Q, CJD ist POE verfügbar, allerdings fehlen noch Kabel. Im Haus B, L und N sind Kabel verfügbar, aber noch kein POE - was sich jedoch nachrüsten ließe.
Daneben gibt es an ausgewählten Standorten (beispw. in den Clubs) bereits jetzt FeM-WLAN zu empfangen.
Wenn du also Interesse hast, den Ausbau beispw. in deinem Block zu beschleunigen, dann komm doch einfach mal vorbei.
Donnerstags in ungeraden Wochen um 20:30 Uhr im Haus L, Eingang 6d, im Keller.
Tuesday, 12. August 2014
HTML5 WLAN-Speedtest
"HTML5 WLAN-Speedtest" vollständig lesen