Package: afnix
Version: 2.2.0-1
Severity: important
Tags: patch

Dear Maintainer,

The hardening flags are missing because the build system ignores
them.

The attached patch (use-dpkg-buildflags.patch) fixes the issue.
The second patch (verbose-build.patch) prevents a false positive
when checking the build log for non-verbose builds.

Btw. you should refresh your quilt patches, some apply with
offset (quilt pop -a; while quilt push && quilt refresh; do :; done).

To check if all flags were correctly enabled you can use
`hardening-check` from the hardening-includes package and check
the build log (hardening-check doesn't catch everything):

    $ hardening-check /usr/lib/afnix/libafnix-eng.so.2.2.0 
/usr/lib/afnix/libafnix-std.so.2.2.0 /usr/lib/afnix/libafnix-plt.so.2.2.0 
/usr/bin/axd ...
    /usr/lib/afnix/libafnix-eng.so.2.2.0:
     Position Independent Executable: no, regular shared library (ignored)
     Stack protected: yes
     Fortify Source functions: unknown, no protectable libc functions used
     Read-only relocations: yes
     Immediate binding: no not found!
    /usr/lib/afnix/libafnix-std.so.2.2.0:
     Position Independent Executable: no, regular shared library (ignored)
     Stack protected: yes
     Fortify Source functions: unknown, no protectable libc functions used
     Read-only relocations: yes
     Immediate binding: no not found!
    /usr/lib/afnix/libafnix-plt.so.2.2.0:
     Position Independent Executable: no, regular shared library (ignored)
     Stack protected: yes
     Fortify Source functions: yes (some protected functions found)
     Read-only relocations: yes
     Immediate binding: no not found!
    /usr/bin/axd:
     Position Independent Executable: no, normal executable!
     Stack protected: no, not found!
     Fortify Source functions: unknown, no protectable libc functions used
     Read-only relocations: yes
     Immediate binding: no not found!
    ...

(Position Independent Executable and Immediate binding is not
enabled by default.)

Use find -type f \( -executable -o -name \*.so\* \) -exec
hardening-check {} + on the build result to check all files.

Regards,
Simon

[1]: https://wiki.debian.org/ReleaseGoals/SecurityHardeningBuildFlags
[2]: https://wiki.debian.org/HardeningWalkthrough
[3]: https://wiki.debian.org/Hardening
-- 
+ privacy is necessary
+ using gnupg http://gnupg.org
+ public key id: 0x92FEFDB7E44C32F9
Description: Use build flags from environment (dpkg-buildflags).
 Necessary for hardening flags.
 .
 CPPFLAGS contains preprocessor flags, not flags for .cpp files.
Author: Simon Ruderich <[email protected]>
Last-Update: 2012-03-23

Index: afnix-2.2.0/cnf/mak/afnix-rule.mak
===================================================================
--- afnix-2.2.0.orig/cnf/mak/afnix-rule.mak	2012-03-23 16:28:31.661433331 +0100
+++ afnix-2.2.0/cnf/mak/afnix-rule.mak	2012-03-23 16:28:32.461433362 +0100
@@ -16,34 +16,34 @@
 
 ifeq ($(CCMODE),debug)
   ENVFLAGS      = $(STDEVFLAGS) $(PLTEVFLAGS)
-  CPPFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(DEBUGFLAGS)
-  CXXFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(DEBUGFLAGS)
-  CCDEFINE      = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
+  CPPFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(DEBUGFLAGS)
+  CXXFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(DEBUGFLAGS)
+  CCDEFINE_     = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
 endif
 
 ifeq ($(CCMODE),optimized)
   ENVFLAGS      = $(STDEVFLAGS) $(PLTEVFLAGS)
-  CPPFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(OPTCCFLAGS)
-  CXXFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(OPTCCFLAGS)
-  CCDEFINE      = $(STDDEFINES) $(PLTDEFINES) $(OPTDEFINES)
+  CPPFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(OPTCCFLAGS)
+  CXXFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(OPTCCFLAGS)
+  CCDEFINE_     = $(STDDEFINES) $(PLTDEFINES) $(OPTDEFINES)
 endif
 
 ifeq ($(CCMODE),profiled)
   ENVFLAGS      = $(STDEVFLAGS) $(PLTEVFLAGS)
-  CPPFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(PFLCCFLAGS)
-  CXXFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(PFLCCFLAGS)
-  CCDEFINE      = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
+  CPPFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(PFLCCFLAGS)
+  CXXFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(PFLCCFLAGS)
+  CCDEFINE_     = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
 endif
 
 ifeq ($(CCMODE),coverage)
   ENVFLAGS      = $(STDEVFLAGS) $(PLTEVFLAGS)
-  CPPFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(COVCCFLAGS)
-  CXXFLAGS      = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(COVCCFLAGS)
-  CCDEFINE      = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
+  CPPFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CPPCCFLAGS) $(COVCCFLAGS)
+  CXXFLAGS_     = $(STDCCFLAGS) $(PLTCCFLAGS) $(CXXCCFLAGS) $(COVCCFLAGS)
+  CCDEFINE_     = $(STDDEFINES) $(PLTDEFINES) $(DBGDEFINES)
 endif
 
-PPFLAGS         = $(CPPFLAGS)   $(EXTCPPFLAGS)
-XXFLAGS         = $(CXXFLAGS)   $(EXTCXXFLAGS)
+PPFLAGS         = $(CPPFLAGS) $(CXXFLAGS) $(CPPFLAGS_)   $(EXTCPPFLAGS)
+XXFLAGS         = $(CPPFLAGS) $(CXXFLAGS) $(CXXFLAGS_)   $(EXTCXXFLAGS)
 DEFINES         = $(CCDEFINE)   $(EXTCCDEFINE)
 PPINCLS		= $(STDINCLUDE) $(INCLUDE)
 XXINCLS		= $(STDINCLUDE) $(EXTINCLUDES) $(INCLUDE)
Index: afnix-2.2.0/cnf/mak/afnix-gcc-4.mak
===================================================================
--- afnix-2.2.0.orig/cnf/mak/afnix-gcc-4.mak	2012-03-23 16:28:32.137433348 +0100
+++ afnix-2.2.0/cnf/mak/afnix-gcc-4.mak	2012-03-23 16:28:32.461433362 +0100
@@ -30,7 +30,8 @@
 DYNCCFLAGS	= -fPIC
 PLTCCFLAGS      = 
 DEBUGFLAGS      = -g
-OPTCCFLAGS      = -O2
+# dpkg-buildflags sets -O2 when noopt is not used
+OPTCCFLAGS      =
 PFLCCFLAGS      = -g -pg
 COVCCFLAGS      = -g -fprofile-arcs -ftest-coverage
 CPPCCFLAGS      = -nostdinc -nostdinc++
@@ -89,7 +90,7 @@
 # adjust for linux platform
 ifeq ($(PLATNAME),linux)
 ARFLAGS		= rc
-LDFLAGS		= -shared
+LDFLAGS		+= -shared
 ifeq ($(LKMODE),soname)
 LDFLAGS	       += -Wl,-soname,$(SOMIN)
 endif
@@ -99,7 +100,7 @@
 # adjust for solaris platform
 ifeq ($(PLATNAME),solaris)
 ARFLAGS		= rc
-LDFLAGS		= -shared
+LDFLAGS		+= -shared
 ifeq ($(LKMODE),soname)
 LDFLAGS	       += -Wl,-h,$(SOMIN)
 endif
@@ -109,7 +110,7 @@
 # adjust for freebsd platform
 ifeq ($(PLATNAME),freebsd)
 ARFLAGS		= rc
-LDFLAGS		= -shared
+LDFLAGS		+= -shared
 ifeq ($(LKMODE),soname)
 LDFLAGS	       += -Wl,-soname,$(SOMIN)
 endif
@@ -119,7 +120,7 @@
 # adjust for gnu/freebsd platform
 ifeq ($(PLATNAME),gnukbsd)
 ARFLAGS		= rc
-LDFLAGS		= -shared
+LDFLAGS		+= -shared
 ifeq ($(LKMODE),soname)
 LDFLAGS	       += -Wl,-soname,$(SOMIN)
 endif
@@ -129,7 +130,7 @@
 # adjust for gnu platform
 ifeq ($(PLATNAME),gnu)
 ARFLAGS		= rc
-LDFLAGS		= -shared
+LDFLAGS		+= -shared
 ifeq ($(LKMODE),soname)
 LDFLAGS	       += -Wl,-soname,$(SOMIN)
 endif
@@ -139,7 +140,7 @@
 # adjust for darwin platform
 ifeq ($(PLATNAME),darwin)
 ARFLAGS		= -rc
-LDFLAGS		= -dynamiclib $(PLTLDFLAGS)
+LDFLAGS		+= -dynamiclib $(PLTLDFLAGS)
 ifeq ($(LKMODE),dylib)
 LDFLAGS	       += -compatibility_version $(MAJOR).$(MINOR)
 LDFLAGS        += -current_version $(MAJOR).$(MINOR).$(PATCH)
@@ -153,21 +154,22 @@
 # - platform dependant final executable flags                                -
 # ----------------------------------------------------------------------------
 
-LKFLAGS		=
+# Can't use LDFLAGS as it's used for library linking flags.
+LKFLAGS		= $(shell dpkg-buildflags --get LDFLAGS)
 
 # adjust linker flags for linux
 ifeq ($(PLATNAME),linux)
-LKFLAGS      	= -pthread
+LKFLAGS      	+= -pthread
 endif
 
 # adjust linker flags for freebsd
 ifeq ($(PLATNAME),freebsd)
-LKFLAGS      	= -pthread
+LKFLAGS      	+= -pthread
 endif
 
 # adjust linker flags for darwin
 ifeq ($(PLATNAME),darwin)
-LKFLAGS      	= $(PLTLKFLAGS)
+LKFLAGS      	+= $(PLTLKFLAGS)
 endif
 
 # ----------------------------------------------------------------------------
Description: Verbose build.
 Prevents false positives when checking the log for non-verbose builds.
Author: Simon Ruderich <[email protected]>
Last-Update: 2012-03-23

Index: afnix-2.2.0/prj/std/adp/src/Makefile
===================================================================
--- afnix-2.2.0.orig/prj/std/adp/src/Makefile	2012-03-23 16:50:31.169483553 +0100
+++ afnix-2.2.0/prj/std/adp/src/Makefile	2012-03-23 16:51:37.649486083 +0100
@@ -51,12 +51,10 @@
 # this rule build all source directories
 
 %.axc : %.als
-	@echo "compiling " $<
-	@$(AEXEC) --prefix=$(BLDDIR) --binexe=$(AXCEXE) $<
+	$(AEXEC) --prefix=$(BLDDIR) --binexe=$(AXCEXE) $<
 
 $(APPLIB) : $(APPAXC)
-	@echo "linking   " $@
-	@$(AEXEC) --noloop --prefix=$(BLDDIR) --binexe=$(AXLEXE) \
+	$(AEXEC) --noloop --prefix=$(BLDDIR) --binexe=$(AXLEXE) \
                   --binopt="-c -m $(APPSTM) -f $@" $(APPAXC)
 	@$(MKDIR) $(BLDPRJ)
 	@$(CP) $@ $(BLDPRJ)

Attachment: signature.asc
Description: Digital signature

Reply via email to