aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2015-10-25 09:27:34 -0400
committerLibravatar netblue30 <netblue30@yahoo.com>2015-10-25 09:27:34 -0400
commit801164566924c41d18d66bdc9ca8b2305103fb82 (patch)
tree3384c10df8b38fb4af945f90fecd2c3876941fdf
parentignore option testing (diff)
downloadfirejail-801164566924c41d18d66bdc9ca8b2305103fb82.tar.gz
firejail-801164566924c41d18d66bdc9ca8b2305103fb82.tar.zst
firejail-801164566924c41d18d66bdc9ca8b2305103fb82.zip
fix struct stat64 problem for musl libc
-rwxr-xr-xconfigure23
-rw-r--r--configure.ac15
-rw-r--r--src/libtrace/Makefile.in3
-rw-r--r--src/libtrace/libtrace.c14
-rw-r--r--src/libtrace/musl_defs.h52
5 files changed, 100 insertions, 7 deletions
diff --git a/configure b/configure
index 9625cdb61..e7b573c25 100755
--- a/configure
+++ b/configure
@@ -628,6 +628,7 @@ HAVE_SECCOMP_H
628EGREP 628EGREP
629GREP 629GREP
630CPP 630CPP
631HAVE_MUSL_LIBC
631HAVE_FATAL_WARNINGS 632HAVE_FATAL_WARNINGS
632HAVE_BIND 633HAVE_BIND
633HAVE_CHROOT 634HAVE_CHROOT
@@ -688,6 +689,7 @@ enable_seccomp
688enable_chroot 689enable_chroot
689enable_bind 690enable_bind
690enable_fatal_warnings 691enable_fatal_warnings
692enable_musl_libc
691' 693'
692 ac_precious_vars='build_alias 694 ac_precious_vars='build_alias
693host_alias 695host_alias
@@ -1307,10 +1309,11 @@ Optional Features:
1307 --disable-option-checking ignore unrecognized --enable/--with options 1309 --disable-option-checking ignore unrecognized --enable/--with options
1308 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) 1310 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
1309 --enable-FEATURE[=ARG] include FEATURE [ARG=yes] 1311 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
1310 --disable-seccomp Disable seccomp 1312 --disable-seccomp disable seccomp
1311 --disable-chroot Disable chroot 1313 --disable-chroot disable chroot
1312 --disable-bind Disable bind 1314 --disable-bind disable bind
1313 --enable-fatal-warnings -W -Wall -Werror 1315 --enable-fatal-warnings -W -Wall -Werror
1316 --enable-musl-libc ugly hack to allow compilation with musl libc
1314 1317
1315Some influential environment variables: 1318Some influential environment variables:
1316 CC C compiler command 1319 CC C compiler command
@@ -3100,6 +3103,19 @@ if test "x$enable_fatal_warnings" = "xyes"; then :
3100 3103
3101fi 3104fi
3102 3105
3106HAVE_MUSL_LIBC=""
3107# Check whether --enable-musl_libc was given.
3108if test "${enable_musl_libc+set}" = set; then :
3109 enableval=$enable_musl_libc;
3110fi
3111
3112if test "x$enable_musl_libc" = "xyes"; then :
3113
3114 HAVE_MUSL_LIBC="-DHAVE_MUSL_LIBC"
3115
3116
3117fi
3118
3103# checking pthread library 3119# checking pthread library
3104 3120
3105{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpthread" >&5 3121{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpthread" >&5
@@ -4736,4 +4752,5 @@ echo " <linux/seccomp.h>: $HAVE_SECCOMP_H"
4736echo " chroot: $HAVE_CHROOT" 4752echo " chroot: $HAVE_CHROOT"
4737echo " bind: $HAVE_BIND" 4753echo " bind: $HAVE_BIND"
4738echo " fatal warnings: $HAVE_FATAL_WARNINGS" 4754echo " fatal warnings: $HAVE_FATAL_WARNINGS"
4755echo " musl libc: $HAVE_MUSL_LIBC"
4739echo 4756echo
diff --git a/configure.ac b/configure.ac
index b2fa22fd7..52048757c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -11,7 +11,7 @@ AC_PROG_RANLIB
11 11
12HAVE_SECCOMP="" 12HAVE_SECCOMP=""
13AC_ARG_ENABLE([seccomp], 13AC_ARG_ENABLE([seccomp],
14 AS_HELP_STRING([--disable-seccomp], [Disable seccomp])) 14 AS_HELP_STRING([--disable-seccomp], [disable seccomp]))
15AS_IF([test "x$enable_seccomp" != "xno"], [ 15AS_IF([test "x$enable_seccomp" != "xno"], [
16 HAVE_SECCOMP="-DHAVE_SECCOMP" 16 HAVE_SECCOMP="-DHAVE_SECCOMP"
17 AC_SUBST(HAVE_SECCOMP) 17 AC_SUBST(HAVE_SECCOMP)
@@ -19,7 +19,7 @@ AS_IF([test "x$enable_seccomp" != "xno"], [
19 19
20HAVE_CHROOT="" 20HAVE_CHROOT=""
21AC_ARG_ENABLE([chroot], 21AC_ARG_ENABLE([chroot],
22 AS_HELP_STRING([--disable-chroot], [Disable chroot])) 22 AS_HELP_STRING([--disable-chroot], [disable chroot]))
23AS_IF([test "x$enable_chroot" != "xno"], [ 23AS_IF([test "x$enable_chroot" != "xno"], [
24 HAVE_CHROOT="-DHAVE_CHROOT" 24 HAVE_CHROOT="-DHAVE_CHROOT"
25 AC_SUBST(HAVE_CHROOT) 25 AC_SUBST(HAVE_CHROOT)
@@ -27,7 +27,7 @@ AS_IF([test "x$enable_chroot" != "xno"], [
27 27
28HAVE_BIND="" 28HAVE_BIND=""
29AC_ARG_ENABLE([bind], 29AC_ARG_ENABLE([bind],
30 AS_HELP_STRING([--disable-bind], [Disable bind])) 30 AS_HELP_STRING([--disable-bind], [disable bind]))
31AS_IF([test "x$enable_bind" != "xno"], [ 31AS_IF([test "x$enable_bind" != "xno"], [
32 HAVE_BIND="-DHAVE_BIND" 32 HAVE_BIND="-DHAVE_BIND"
33 AC_SUBST(HAVE_BIND) 33 AC_SUBST(HAVE_BIND)
@@ -41,6 +41,14 @@ AS_IF([test "x$enable_fatal_warnings" = "xyes"], [
41 AC_SUBST(HAVE_FATAL_WARNINGS) 41 AC_SUBST(HAVE_FATAL_WARNINGS)
42]) 42])
43 43
44HAVE_MUSL_LIBC=""
45AC_ARG_ENABLE([musl_libc],
46 AS_HELP_STRING([--enable-musl-libc], [ugly hack to allow compilation with musl libc]))
47AS_IF([test "x$enable_musl_libc" = "xyes"], [
48 HAVE_MUSL_LIBC="-DHAVE_MUSL_LIBC"
49 AC_SUBST(HAVE_MUSL_LIBC)
50])
51
44# checking pthread library 52# checking pthread library
45AC_CHECK_LIB([pthread], [main], [], AC_MSG_ERROR([*** POSIX thread support not installed ***])) 53AC_CHECK_LIB([pthread], [main], [], AC_MSG_ERROR([*** POSIX thread support not installed ***]))
46AC_CHECK_HEADER(pthread.h,,AC_MSG_ERROR([*** POSIX thread support not installed ***])) 54AC_CHECK_HEADER(pthread.h,,AC_MSG_ERROR([*** POSIX thread support not installed ***]))
@@ -57,4 +65,5 @@ echo " <linux/seccomp.h>: $HAVE_SECCOMP_H"
57echo " chroot: $HAVE_CHROOT" 65echo " chroot: $HAVE_CHROOT"
58echo " bind: $HAVE_BIND" 66echo " bind: $HAVE_BIND"
59echo " fatal warnings: $HAVE_FATAL_WARNINGS" 67echo " fatal warnings: $HAVE_FATAL_WARNINGS"
68echo " musl libc: $HAVE_MUSL_LIBC"
60echo 69echo
diff --git a/src/libtrace/Makefile.in b/src/libtrace/Makefile.in
index 3924bdf3f..8bc57cddf 100644
--- a/src/libtrace/Makefile.in
+++ b/src/libtrace/Makefile.in
@@ -2,12 +2,13 @@ PREFIX=@prefix@
2VERSION=@PACKAGE_VERSION@ 2VERSION=@PACKAGE_VERSION@
3NAME=@PACKAGE_NAME@ 3NAME=@PACKAGE_NAME@
4HAVE_FATAL_WARNINGS=@HAVE_FATAL_WARNINGS@ 4HAVE_FATAL_WARNINGS=@HAVE_FATAL_WARNINGS@
5HAVE_MUSL_LIBC=@HAVE_MUSL_LIBC@
5 6
6H_FILE_LIST = $(wildcard *.[h]) 7H_FILE_LIST = $(wildcard *.[h])
7C_FILE_LIST = $(wildcard *.c) 8C_FILE_LIST = $(wildcard *.c)
8OBJS = $(C_FILE_LIST:.c=.o) 9OBJS = $(C_FILE_LIST:.c=.o)
9BINOBJS = $(foreach file, $(OBJS), $file) 10BINOBJS = $(foreach file, $(OBJS), $file)
10CFLAGS += -ggdb $(HAVE_FATAL_WARNINGS) -O2 -DVERSION='"$(VERSION)"' -fstack-protector-all -D_FORTIFY_SOURCE=2 -fPIC -Wformat -Wformat-security 11CFLAGS += -ggdb $(HAVE_FATAL_WARNINGS) -O2 -DVERSION='"$(VERSION)"' $(HAVE_MUSL_LIBC) -fstack-protector-all -D_FORTIFY_SOURCE=2 -fPIC -Wformat -Wformat-security
11LDFLAGS += -pie -Wl,-z,relro -Wl,-z,now 12LDFLAGS += -pie -Wl,-z,relro -Wl,-z,now
12 13
13all: libtrace.so 14all: libtrace.so
diff --git a/src/libtrace/libtrace.c b/src/libtrace/libtrace.c
index 1eb1cf931..2ce74d331 100644
--- a/src/libtrace/libtrace.c
+++ b/src/libtrace/libtrace.c
@@ -18,7 +18,11 @@
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/ 19*/
20#define _GNU_SOURCE 20#define _GNU_SOURCE
21#ifdef HAVE_MUSL_LIBC
22#include "musl_defs.h"
23#else
21#include <stdio.h> 24#include <stdio.h>
25#endif
22#include <stdlib.h> 26#include <stdlib.h>
23#include <string.h> 27#include <string.h>
24#include <dlfcn.h> 28#include <dlfcn.h>
@@ -28,7 +32,9 @@
28#include <netinet/in.h> 32#include <netinet/in.h>
29#include <arpa/inet.h> 33#include <arpa/inet.h>
30#include <sys/un.h> 34#include <sys/un.h>
35#ifndef HAVE_MUSL_LIBC
31#include <sys/stat.h> 36#include <sys/stat.h>
37#endif
32 38
33// break recursivity on fopen call 39// break recursivity on fopen call
34typedef FILE *(*orig_fopen_t)(const char *pathname, const char *mode); 40typedef FILE *(*orig_fopen_t)(const char *pathname, const char *mode);
@@ -414,9 +420,17 @@ int stat(const char *pathname, struct stat *buf) {
414 return rv; 420 return rv;
415} 421}
416 422
423#ifdef HAVE_MUSL_LIBC
424typedef int (*orig_stat64_t)(const char *pathname, struct stat *buf);
425#else
417typedef int (*orig_stat64_t)(const char *pathname, struct stat64 *buf); 426typedef int (*orig_stat64_t)(const char *pathname, struct stat64 *buf);
427#endif
418static orig_stat64_t orig_stat64 = NULL; 428static orig_stat64_t orig_stat64 = NULL;
429#ifdef HAVE_MUSL_LIBC
430int stat64(const char *pathname, struct stat *buf) {
431#else
419int stat64(const char *pathname, struct stat64 *buf) { 432int stat64(const char *pathname, struct stat64 *buf) {
433#endif
420 if (!orig_stat) 434 if (!orig_stat)
421 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat"); 435 orig_stat64 = (orig_stat64_t)dlsym(RTLD_NEXT, "stat");
422 436
diff --git a/src/libtrace/musl_defs.h b/src/libtrace/musl_defs.h
new file mode 100644
index 000000000..02eb65b83
--- /dev/null
+++ b/src/libtrace/musl_defs.h
@@ -0,0 +1,52 @@
1/*
2 * Copyright (C) 2014, 2015 Firejail Authors
3 *
4 * This file is part of firejail project
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/
20
21#ifndef _MUSL_DEFS_H
22#define _MUSL_DEFS_H
23
24#include <features.h>
25
26#define __NEED_FILE
27#define __NEED_dev_t
28#define __NEED_ino_t
29#define __NEED_mode_t
30#define __NEED_nlink_t
31#define __NEED_uid_t
32#define __NEED_gid_t
33#define __NEED_off_t
34#define __NEED_time_t
35#define __NEED_blksize_t
36#define __NEED_blkcnt_t
37#define __NEED_struct_timespec
38
39#include <bits/alltypes.h>
40#include <bits/stat.h>
41
42#ifdef __cplusplus
43#define NULL 0L
44#else
45#define NULL ((void*)0)
46#endif
47
48int printf(const char *format, ...);
49int sprintf(char *buffer, const char *format, ...);
50char *fgets(char *buffer, int size, FILE *fp);
51
52#endif