[asterisk-bugs] [JIRA] (ASTERISK-28685) check_expr2: linking (when hardening) and cross-compiling troubles

Asterisk Team (JIRA) noreply at issues.asterisk.org
Sun Jan 12 05:18:25 CST 2020


    [ https://issues.asterisk.org/jira/browse/ASTERISK-28685?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=249332#comment-249332 ] 

Asterisk Team commented on ASTERISK-28685:
------------------------------------------

Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution.

A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report.

Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process].

Please note that once your issue enters an open state it has been accepted. As Asterisk is an open source project there is no guarantee or timeframe on when your issue will be looked into. If you need expedient resolution you will need to find and pay a suitable developer. Asking for an update on your issue will not yield any progress on it and will not result in a response. All updates are posted to the issue when they occur.

> check_expr2: linking (when hardening) and cross-compiling troubles
> ------------------------------------------------------------------
>
>                 Key: ASTERISK-28685
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-28685
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Utilities/General
>    Affects Versions: 16.6.1
>         Environment: OpenWrt gcc-8.3.0, binutils 2.31.1
>            Reporter: Sebastian Kemper
>            Severity: Minor
>
> Hi all,
> Honestly I'm not too sure what check_expr2 is used for, but we bundle it as an optional package on OpenWrt.
> In the past we already had to comment out the test run "./check_expr2 expr2.testinput" because we're cross-compiling. And now OpenWrt introduced another hardening option into our buildroot: ASLR PIE. It's not enabled by default (yet), but if you select it the asterisk package fails to build:
> ccache_cc -g -c -I/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.6.1/include -DSTANDALONE /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.6.1/main/ast_expr2f.c -o ast_expr2fz.o
> cc1: note: someone does not honour COPTS correctly, passed 0 times
> ccache_cc -g -c -I/home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.6.1/include -DSTANDALONE2 /home/sk/tmp/openwrt/build_dir/target-mips_24kc_musl/asterisk-16.6.1/main/ast_expr2.c -o ast_expr2z.o
> cc1: note: someone does not honour COPTS correctly, passed 0 times
> ccache_cc -g -o check_expr2 ast_expr2fz.o ast_expr2z.o astmm.o -lm -L/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib -L/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/lib -L/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/usr/lib -L/home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/lib -fpic -specs=/home/sk/tmp/openwrt/include/hardened-ld-pie.specs -znow -zrelro -L/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libiconv-stub/lib -Wl,-rpath-link=/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libiconv-stub/lib -L/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libintl-stub/lib -Wl,-rpath-link=/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib/libintl-stub/lib   
> /home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/lib/gcc/mips-openwrt-linux-musl/8.3.0/../../../../mips-openwrt-linux-musl/bin/ld: ast_expr2fz.o: relocation R_MIPS_HI16 against `stdin' can not be used when making a shared object; recompile with -fPIC
> /home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/lib/gcc/mips-openwrt-linux-musl/8.3.0/../../../../mips-openwrt-linux-musl/bin/ld: ast_expr2z.o: relocation R_MIPS_26 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
> /home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/lib/gcc/mips-openwrt-linux-musl/8.3.0/../../../../mips-openwrt-linux-musl/bin/ld: non-dynamic relocations refer to dynamic symbol stdin
> /home/sk/tmp/openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/lib/gcc/mips-openwrt-linux-musl/8.3.0/../../../../mips-openwrt-linux-musl/bin/ld: failed to set dynamic section sizes: bad value
> collect2: error: ld returned 1 exit status
> So the first thing that happens is that the compiler warns us that there are no compiler flags provided. And this is followed by linker failure.
> I'm not sure why Asterisk chooses to compile the objects that make up check_expr2 without compiler flags. Maybe it's just an oversight. When I add them all this goes away.
> I also ran check_expr2 (so, the one compiled with the compiler flags) against the test file on a target device. The output looks reasonable to me:
> root at hank2:/tmp# ./check_expr2 expr2.testinput 
> Expression: 2 + 2    Result: [1] '4'
> Expression:       2     +       2                Result: [1] '4'
> Expression:     Result: [0] ''
> Expression: 2 - 4    Result: [2] '-2'
> Expression: 4 - 2    Result: [1] '2'
> Expression: -4 - -2    Result: [2] '-2'
> Expression: 4 + 2 * 8    Result: [2] '20'
> Expression: (4 + 2) * 8    Result: [2] '48'
> Expression: 4 + (2 * 8)    Result: [2] '20'
> Expression: 4 + (2 * 8) ? 3 :: 6    Result: [1] '3'
> Expression: 4 + 8 / 2    Result: [1] '8'
> Expression: 4 + 8 / 3    Result: [19] '6.66666666666666607'
> Expression: (4+8) / 3    Result: [1] '4'
> Expression: 4 + 8 % 3    Result: [1] '6'
> Expression: 4 + 9 % 3    Result: [1] '4'
> Expression: (4+9) %3    Result: [1] '1'
> Expression: (4+8) %3    Result: [1] '0'
> Expression: (4+9) %3    Result: [1] '1'
> Expression: (4+8) %3    Result: [1] '0'
> Expression: (4+9) % 3    Result: [1] '1'
> Expression: (4+8) % 3    Result: [1] '0'
> Expression: (4+9) % 3    Result: [1] '1'
> Expression: (4+8) % 3    Result: [1] '0'
> Expression: (4+9)% 3    Result: [1] '1'
> Expression: (4+8)% 3    Result: [1] '0'
> Expression: (4+9)% 3    Result: [1] '1'
> Expression: (4+8)% 3    Result: [1] '0'
> Expression: 4 & 4    Result: [1] '4'
> Expression: 0 & 4    Result: [1] '0'
> Expression: 0 & 0    Result: [1] '0'
> Expression: 2 | 0    Result: [1] '2'
> Expression: 2 | 4    Result: [1] '2'
> Expression: 0 | 0    Result: [1] '0'
> Expression: !0 | 0    Result: [1] '1'
> Expression: !4 | 0    Result: [1] '0'
> Expression: 4 | !0    Result: [1] '4'
> Expression: !4 | !0    Result: [1] '1'
> Expression: 3 < 4    Result: [1] '1'
> Expression: 4 < 3    Result: [1] '0'
> Expression: 3 > 4    Result: [1] '0'
> Expression: 4 > 3    Result: [1] '1'
> Expression: 3 = 3    Result: [1] '1'
> Expression: 3 = 4    Result: [1] '0'
> Expression: 3 != 3    Result: [1] '0'
> Expression: 3 != 4    Result: [1] '1'
> Expression: 3 >= 4    Result: [1] '0'
> Expression: 3 >= 3    Result: [1] '1'
> Expression: 4 >= 3    Result: [1] '1'
> Expression: 3 <= 4    Result: [1] '1'
> Expression: 4 <= 3    Result: [1] '0'
> Expression: 4 <= 4    Result: [1] '1'
> Expression: 3 > 4 & 4 < 3    Result: [1] '0'
> Expression: 4 > 3 & 3 < 4    Result: [1] '1'
> Expression: x = x    Result: [1] '1'
> Expression: y = x    Result: [1] '0'
> Expression: x != y    Result: [1] '1'
> Expression: x != x    Result: [1] '0'
> Expression: "Something interesting" =~ interesting    Result: [2] '11'
> Expression: "Something interesting" =~ Something    Result: [1] '9'
> Expression: "Something interesting" : Something    Result: [1] '9'
> Expression: "Something interesting" : interesting    Result: [1] '0'
> Expression: "Something interesting" =~ "interesting"    Result: [2] '11'
> Expression: "Something interesting" =~ "Something"    Result: [1] '9'
> Expression: "Something interesting" : "Something"    Result: [1] '9'
> Expression: "Something interesting" : "interesting"    Result: [1] '0'
> Expression: "Something interesting" =~ (interesting)    Result: [2] '11'
> Expression: "Something interesting" =~ (Something)    Result: [1] '9'
> Expression: "Something interesting" : (Something)    Result: [1] '9'
> Expression: "Something interesting" : (interesting)    Result: [1] '0'
> Expression: "Something interesting" =~ "\(interesting\)"    Result: [1] '0'
> Expression: "Something interesting" =~ "\(Something\)"    Result: [1] '0'
> Expression: "Something interesting" : "\(Something\)"    Result: [1] '0'
> Expression: "Something interesting" : "\(interesting\)"    Result: [1] '0'
> Expression: "011043567857575" : "011\(..\)"    Result: [1] '0'
> Expression: "9011043567857575" : "011\(..\)"    Result: [1] '0'
> Expression: "011043567857575" =~ "011\(..\)"    Result: [1] '0'
> Expression: "9011043567857575" =~ "011\(..\)"    Result: [1] '0'
> Expression: "Something interesting" =~ (interesting)    Result: [2] '11'
> Expression: "Something interesting" =~ (Something)    Result: [1] '9'
> Expression: "Something interesting" : (Something)    Result: [1] '9'
> Expression: "Something interesting" : (interesting)    Result: [1] '0'
> Expression: "Something interesting" =~ "(interesting)"    Result: [11] 'interesting'
> Expression: "Something interesting" =~ "(Something)"    Result: [9] 'Something'
> Expression: "Something interesting" : "(Something)"    Result: [9] 'Something'
> Expression: "Something interesting" : "(interesting)"    Result: [0] ''
> Expression: "011043567857575" : "011(..)"    Result: [2] '04'
> Expression: "9011043567857575" : "011(..)"    Result: [0] ''
> Expression: "011043567857575" =~ "011(..)"    Result: [2] '04'
> Expression: "9011043567857575" =~ "011(..)"    Result: [2] '04'
> Expression: 3    Result: [1] '3'
> Expression: something    Result: [9] 'something'
> Expression: 043    Result: [3] '043'
> Expression: 2.1+4.2    Result: [19] '6.30000000000000071'
> Expression: 1.500003+1.4999999999999898989898989898989898989889898    Result: [19] '3.00000299999998976'
> Expression: 1/4    Result: [4] '0.25'
> Expression: 2.3 + COS(3.141592653)    Result: [19] '1.29999999999999982'
> Expression: REMAINDER(13,3)    Result: [1] '1'
> Expression: 2.3 + SIN(3.1415823)    Result: [19] '2.30001035358979289'
> Expression: TAN(45) + 2.3    Result: [19] '3.91977519054386114'
> Expression: POW(10.0,4.0)    Result: [5] '10000'
> LOG: lev:4 file:ast_expr2.y  line:1071 func: op_func  Error! 'SQRT' is not available in the standalone version!
> Expression: SQRT(4)    Result: [1] '0'
> LOG: lev:4 file:ast_expr2.y  line:1071 func: op_func  Error! 'SQRT' is not available in the standalone version!
> Expression: SQRT(2)    Result: [1] '0'
> Expression: FLOOR(2.4)    Result: [1] '2'
> Expression: FLOOR(2.6)    Result: [1] '2'
> Expression: CEIL(2.4)    Result: [1] '3'
> Expression: CEIL(2.6)    Result: [1] '3'
> Expression: ROUND(2.4)    Result: [1] '2'
> Expression: ROUND(2.5)    Result: [1] '3'
> Expression: ROUND(2.6)    Result: [1] '3'
> Expression: RINT(2.4)    Result: [1] '2'
> Expression: RINT(2.5)    Result: [1] '2'
> Expression: RINT(2.6)    Result: [1] '3'
> Expression: TRUNC(2.4)    Result: [1] '2'
> Expression: TRUNC(2.5)    Result: [1] '2'
> Expression: TRUNC(2.6)    Result: [1] '2'
> Expression: EXP(1.0)    Result: [19] '2.71828182845904509'
> Expression: EXP2(1.0)    Result: [1] '2'
> Expression: LOG(10)    Result: [18] '2.3025850929940459'
> Expression: LOG2(10)    Result: [19] '3.32192809488736218'
> Expression: LOG10(10)    Result: [1] '1'
> Expression: ATAN2(4,5)    Result: [20] '0.674740942223552742'
> Expression: ACOS(12)    Result: [3] 'nan'
> Expression: ASIN(1)    Result: [19] '1.57079632679489656'
> Expression: ATAN(10)    Result: [18] '1.4711276743037347'
> LOG: lev:4 file:ast_expr2.y  line:1071 func: op_func  Error! 'SQRT' is not available in the standalone version!
> LOG: lev:4 file:ast_expr2.y  line:1071 func: op_func  Error! 'SQRT' is not available in the standalone version!
> Expression: SQRT(2)*SQRT(2)    Result: [1] '0'
> LOG: lev:3 file:ast_expr2.y  line:1468 func: op_times  overflow
> LOG: lev:3 file:ast_expr2.y  line:1468 func: op_times  overflow
> Expression: ATAN(12) + TRUNC(2.4) *ASIN(14.3) *ACOS(1.2)    Result: [3] 'nan'
> Expression: ATAN(.912)    Result: [19] '1.57079632679489656'
> Expression: TRUNC(2.4)    Result: [1] '2'
> Expression: ASIN(0.705)    Result: [19] '0.78242314584342898'
> Expression: ACOS(.12)    Result: [3] 'nan'
> Expression: ATAN(.912) + TRUNC(2.4) - ASIN(0.705) + ACOS(.12)    Result: [3] 'nan'
> LOG: lev:4 file:ast_expr2.y  line:1071 func: op_func  Error! 'MATH' is not available in the standalone version!
> Expression: MATH(3*9)    Result: [1] '0'
> Expression: ${GLOBAL(ULKOPREFIX)}9${x}    Result: [26] '${GLOBAL(ULKOPREFIX)}9${x}'
> Expression: 512059${x}    Result: [10] '512059${x}'
> root at hank2:/tmp#
> I'll raise a Gerrit case against this and add a patch which adds the compiler flags and prevents the test run when cross-compiling.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list