Package: mrd6
Severity: important
Tags: patch

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Dear Maintainer,

Not all (hardening) compiler flags from dpkg-buildpackage are
used by the Makefile.

As debian/compat=9 is used, it's not necessary to set *FLAGS
manually, dpkg-buildpackage is automatically used. For more
information please have a look at [1], [2] and [3]. The following
patch fixes that:

diff -Nru mrd6-0.9.6/debian/rules mrd6-0.9.6/debian/rules
- --- mrd6-0.9.6/debian/rules   2012-03-03 09:58:03.000000000 +0100
+++ mrd6-0.9.6/debian/rules     2012-03-04 16:43:03.000000000 +0100
@@ -9,10 +9,6 @@
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
 
- -export CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
- -export CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS)
- -export LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)
- -
 export PREFIX=/usr
 export TARGET=mrd6

But not all flags are used by the Makefile. The attached patches
fix that (0012-Use-flags-from-dpkg-buildflags.patch) and also
enable a verbose build (0011-Enable-verbose-build.patch) so it's
easy to detect missing flags.

With the hardening flags enabled, -Wformat-security detected a
problem: syslog_log_node::log() doesn't use a format string.
0013-Wformat-security-fix.patch fixes that.

To check if all flags were correctly enabled you can use
`hardening-check` from the hardening-includes package:

    $ hardening-check /usr/sbin/mrd6 /usr/lib/mrd6/bgp.so
    /usr/lib/mrd6/bgp.so:
     Position Independent Executable: no, regular shared library (ignored)
     Stack protected: yes
     Fortify Source functions: yes (some protected functions found)
     Read-only relocations: no, not found!
     Immediate binding: no not found!
    /usr/sbin/mrd6:
     Position Independent Executable: no, normal executable!
     Stack protected: yes
     Fortify Source functions: yes (some protected functions found)
     Read-only relocations: yes
     Immediate binding: no not found!

Regards,
Simon

[1]: https://wiki.debian.org/ReleaseGoals/SecurityHardeningBuildFlags
[2]: https://wiki.debian.org/HardeningWalkthrough
[3]: https://wiki.debian.org/Hardening

- -- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBCAAGBQJPU5FXAAoJEJL+/bfkTDL5uJIP/3NcyvX8DPlTBsk87frrFCot
RPTEbdj1yIvFAUjRMbehRROo91syb1L4MItNC2vMjnt9avm2PAG1oELnp4DtMJHY
ShtImLPgxkbQcGXuApkapuJ20bnJ6bLWw03JllPec71nXubCJOLWEpxWamZabXmh
IljfFTuGcNB6/nBaH6p0SgKQyD1KNfz9ZGnLdKHmMpSiUzovGjx8ynnvJkdj0p2C
BDyK/4C6089YtH0KxPZ0YQ6KywLpbTVwbuMc1m/OJmXXgpwwi8YNw67ZnlL7bCTw
rg962cb45OQdKvTo6mKIGTT4f2Rzks9fqRyApyP4QGinB3ec/E1ycfIciLqg+332
SZTAuP0WDWHSdyMi9qyQgy9TJIwvBRfII9mX7+mkz08enAjyMgTT67CHX10r7CBU
vnFdyYb3v8tPZ3d8HWwAMJOzdao6G7uNz3btyR3yZ4F5gCi3Pj6Chyh/DBW/nUA8
eURdYMGl5mI3dOA9ZtlNHZG94q5oS1g5MCl4IRrpqGkHFxJgOpfHLFW6U3IsbwEU
vX3XxK85pkthrgMvpnSDZ/1hbXnWXSzFqAFDXUwBYBe6S2S+XFnoONzfnBk0k3yo
+3DVarE7J8hoOArPqxralGidid5mILsNPJCIq9GctkMFJxIexLMZcOxtp51FPYxH
btbMJppde6g8V3AQoKKW
=TG/r
-----END PGP SIGNATURE-----
Description: Display compiler commands/flags while building.
Author: Simon Ruderich <si...@ruderich.org>
Last-Update: 2012-03-04

--- mrd6-0.9.6.orig/src/Makefile
+++ mrd6-0.9.6/src/Makefile
@@ -141,7 +141,7 @@ define module_template
 BUILT_SOURCES += $$($(1)_SOURCES)
 $$($(1)_TARGET): $$(addprefix $(OBJ_DIR)/,$($(1)_SOURCES:.cpp=.o))
 	@echo "Module $$($(1)_TARGET)"
-	@$(CXX) -shared $(LDMODCMD) $(CXXFLAGS) -o $$($(1)_TARGET) \
+	$(CXX) -shared $(LDMODCMD) $(CXXFLAGS) -o $$($(1)_TARGET) \
 		$$(addprefix $(OBJ_DIR)/,$($(1)_SOURCES:.cpp=.o))
 endef
 
@@ -154,7 +154,7 @@ define unittest_template
 BUILT_SOURCES += $(1).cpp
 $(1): $(TEST_OBJECTS) $(1).cpp
 	@echo "Linking $(1)"
-	@$(CXX) $(LDCMD) $(CXXFLAGS) -o $(1) $(1).cpp $(TEST_OBJECTS) \
+	$(CXX) $(LDCMD) $(CXXFLAGS) -o $(1) $(1).cpp $(TEST_OBJECTS) \
 		$(LDFLAGS) -lboost_unit_test_framework
 endef
 
@@ -166,7 +166,7 @@ $(foreach test,$(TESTS),$(eval $(call un
 
 $(TARGET): $(MRD_OBJECTS)
 	@echo "Linking $(TARGET)"
-	@$(CXX) $(LDCMD) $(CXXFLAGS) -o $@ $(MRD_OBJECTS) $(LDFLAGS)
+	$(CXX) $(LDCMD) $(CXXFLAGS) -o $@ $(MRD_OBJECTS) $(LDFLAGS)
 
 install: $(TARGET) $(EXTERNAL_MODULES)
 	install -D $(TARGET) $(DEST_PREFIX)/sbin/$(TARGET)
@@ -196,7 +196,7 @@ $(OPTIONS):
 
 $(DEPS_DIR)/%.d: %.cpp $(OPTIONS)
 	@echo "Deps $<"
-	@set -e; mkdir -p $(dir $@); \
+	set -e; mkdir -p $(dir $@); \
 		$(CXX) -MM -MT $@ -MT $(addprefix $(OBJ_DIR)/,$(<:.cpp=.o)) \
 		       $(CXXFLAGS) $< > $@
 
@@ -210,7 +210,7 @@ endif
 
 $(OBJ_DIR)/%.o: %.cpp $(OPTIONS)
 	@echo "C++ $<"
-	@set -e; mkdir -p $(dir $@); \
+	set -e; mkdir -p $(dir $@); \
 		$(CXX) -c $(CXXFLAGS) $< -o $@
 
 clean:
Description: Use compiler flags from the environment.
 This is necessary to use the (hardening) compiler flags from dpkg-buildflags.
 .
 Also pass CPPFLAGS which is used for hardening.
Author: Simon Ruderich <si...@ruderich.org>
Last-Update: 2012-03-04

Index: mrd6-0.9.6/tools/c/Makefile
===================================================================
--- mrd6-0.9.6.orig/tools/c/Makefile	2012-03-04 16:39:04.000000000 +0100
+++ mrd6-0.9.6/tools/c/Makefile	2012-03-04 16:42:23.000000000 +0100
@@ -1,4 +1,4 @@
-CFLAGS = -g -O2 -Wall -ansi
+CFLAGS += -Wall -ansi
 
 PREFIX ?= /usr/local
 
Index: mrd6-0.9.6/src/Makefile
===================================================================
--- mrd6-0.9.6.orig/src/Makefile	2012-03-04 16:42:23.000000000 +0100
+++ mrd6-0.9.6/src/Makefile	2012-03-04 16:42:36.000000000 +0100
@@ -105,7 +105,7 @@
 
 DEST_PREFIX = $(DESTDIR)$(PREFIX)
 
-CXXFLAGS = $(INCLUDES) -ansi -Wall -Wno-multichar -fno-exceptions -fPIC \
+CXXFLAGS += $(CPPFLAGS) $(INCLUDES) -ansi -Wall -Wno-multichar -fno-exceptions -fPIC \
 	   -fno-strict-aliasing -D$(PLATFORM) $(addprefix -D,$(MODULE_OPTIONS))
 
 ifeq ($(OPTIMIZE),yes)
Description: Fix compiling with -Wformat-security.
Author: Simon Ruderich <si...@ruderich.org>
Last-Update: 2012-03-04

--- mrd6-0.9.6.orig/src/log.cpp
+++ mrd6-0.9.6/src/log.cpp
@@ -321,7 +321,7 @@ static inline int type_as_syslog_priorit
 }
 
 void syslog_log_node::log(int type, int level, const char *msg, bool) {
-	syslog(type_as_syslog_priority(type), msg);
+	syslog(type_as_syslog_priority(type), "%s", msg);
 }
 
 tb_log_node::tb_log_node(log_base *parent, const char *name, int level)

Reply via email to